MCPcopy Create free account
hub / github.com/facebook/CacheLib / TEST_F

Function TEST_F

cachelib/allocator/memory/tests/MemoryPoolManagerTest.cpp:32–87  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

30constexpr size_t SerializationBufferSize = 100 * 1024;
31
32TEST_F(MemoryPoolManagerTest, CreatePools) {
33 auto slabAlloc = createSlabAllocator(50);
34 auto nUsable = slabAlloc->getNumUsableSlabs();
35 MemoryPoolManager m(*slabAlloc);
36
37 // add some pools by name
38
39 const std::string poolName1 = "foo";
40 const std::string poolName2 = "bar";
41
42 // create two pools with 20 slabs worth of memory.
43 PoolId pool1Id = Slab::kInvalidPoolId;
44 size_t poolSize1 = 20 * Slab::kSize;
45
46 auto allocSizes1 = getRandomAllocSizes(5);
47
48 PoolId pool2Id = Slab::kInvalidPoolId;
49 size_t poolSize2 = 20 * Slab::kSize;
50
51 auto allocSizes2 = getRandomAllocSizes(10);
52
53 ASSERT_NO_THROW(pool1Id = m.createNewPool(poolName1, poolSize1, allocSizes1));
54 ASSERT_NO_THROW(pool2Id = m.createNewPool(poolName2, poolSize2, allocSizes2));
55
56 MemoryPool& pool1 = m.getPoolById(pool1Id);
57 MemoryPool& pool2 = m.getPoolById(pool2Id);
58
59 ASSERT_EQ(pool1.getPoolSize(), poolSize1);
60 ASSERT_EQ(pool2.getPoolSize(), poolSize2);
61 // pools should have unique id.
62 ASSERT_NE(pool1.getId(), pool2.getId());
63
64 // trying to create a new pool with not enough memory left should throw
65 const size_t remaining = (nUsable * Slab::kSize) - poolSize1 - poolSize2;
66 ASSERT_GT(remaining, 0);
67 ASSERT_THROW(
68 m.createNewPool("bazz", remaining + Slab::kSize, getRandomAllocSizes(4)),
69 std::invalid_argument);
70
71 // trying to create pools with duplicate names should fail.
72 ASSERT_THROW(m.createNewPool(poolName1, Slab::kSize, getRandomAllocSizes(3)),
73 std::invalid_argument);
74
75 const std::string poolName3 = "bazz";
76 PoolId pool3Id = Slab::kInvalidPoolId;
77 ASSERT_NO_THROW(
78 pool3Id = m.createNewPool(poolName3, remaining, getRandomAllocSizes(4)));
79 auto& pool3 = m.getPoolById(pool3Id);
80 ASSERT_NE(pool1.getId(), pool3.getId());
81 ASSERT_NE(pool2.getId(), pool3.getId());
82
83 // any more pool creations should fail since we are out of memory in slab
84 // allocator.
85 ASSERT_THROW(m.createNewPool("another", Slab::kSize, getRandomAllocSizes(4)),
86 std::invalid_argument);
87}
88
89// ensure that we can not create more than the maximum number of pools.

Callers

nothing calls this directly

Calls 15

getRandomAllocSizesFunction · 0.85
getNumUsableSlabsMethod · 0.80
createNewPoolMethod · 0.80
getPoolSizeMethod · 0.80
getCurrentAllocSizeMethod · 0.80
getNumClassIdMethod · 0.80
getBytesUnReservedMethod · 0.80
ASSERT_THROWFunction · 0.70
getIdMethod · 0.45
sizeMethod · 0.45
getPoolIdsMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected