}
return seastar::now();
}
- void init_alloc(uint64_t block_size, uint64_t total_size) {
+ void init_alloc(uint64_t block_size, uint64_t total_size, uint64_t base_addr = 0) {
assert(allocator);
- allocator->init(0, total_size, block_size);
+ allocator->init(base_addr, total_size, block_size);
}
void close() {
assert(allocator);
}
}
+TEST_P(allocator_test_t, test_base_addr)
+{
+ uint64_t block_size = 8192;
+ uint64_t capacity = 1024 * block_size;
+
+ auto run_case = [&](uint64_t base_addr) {
+ init_alloc(block_size, capacity, base_addr);
+
+ allocator->mark_extent_used(base_addr, block_size * 256);
+ allocator->mark_extent_used(base_addr + (block_size * 512), block_size * 256);
+
+ auto result = allocate(block_size * 512);
+ ASSERT_EQ(false, result.has_value());
+
+ result = allocates(block_size * 512);
+ ASSERT_EQ(true, result.has_value());
+
+ free(base_addr, block_size * 512);
+
+ result = allocate(block_size * 512);
+ ASSERT_EQ(true, result.has_value());
+
+ close();
+ };
+
+ run_case(0 /* base_addr */);
+ run_case(capacity /* base_addr */);
+}
+
TEST_P(allocator_test_t, test_random_alloc_verify)
{
uint64_t block_size = 4096;