aboutsummaryrefslogtreecommitdiffstats
path: root/vespalib/src/tests/alloc
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2021-02-10 14:48:36 +0100
committerTor Egge <Tor.Egge@broadpark.no>2021-02-10 16:04:30 +0100
commit3f49fca252a0a7ddc5524c0daba04c0ddb86bda2 (patch)
tree5e192374f183c9c6273b0985250d66549b26c849 /vespalib/src/tests/alloc
parent96faf76fdfd71551f52e9d038bad24e8f98bc301 (diff)
Add memory allocator backed by a file.
Diffstat (limited to 'vespalib/src/tests/alloc')
-rw-r--r--vespalib/src/tests/alloc/alloc_test.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/vespalib/src/tests/alloc/alloc_test.cpp b/vespalib/src/tests/alloc/alloc_test.cpp
index 4dbeba62ee1..056bac58d28 100644
--- a/vespalib/src/tests/alloc/alloc_test.cpp
+++ b/vespalib/src/tests/alloc/alloc_test.cpp
@@ -2,8 +2,10 @@
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/vespalib/util/alloc.h>
+#include <vespa/vespalib/util/mmap_file_allocator.h>
#include <vespa/vespalib/util/exceptions.h>
#include <cstddef>
+#include <sys/mman.h>
using namespace vespalib;
using namespace vespalib::alloc;
@@ -279,4 +281,30 @@ TEST("auto alloced mmap alloc can not be shrinked below HUGEPAGE_SIZE/2 + 1 ") {
EXPECT_EQUAL(SZ, buf.size());
}
+TEST("mmap file allocator works")
+{
+ MmapFileAllocator allocator("mmap-file-allocator-dir");
+ auto alloc = Alloc::alloc_with_allocator(&allocator);
+ auto buf = alloc.create(0);
+ EXPECT_EQUAL(0u, allocator.get_end_offset());
+ EXPECT_EQUAL(0u, buf.size());
+ EXPECT_TRUE(buf.get() == nullptr);
+ buf = alloc.create(4);
+ EXPECT_LESS_EQUAL(4u, buf.size());
+ EXPECT_TRUE(buf.get() != nullptr);
+ memcpy(buf.get(), "1st", 4);
+ auto buf2 = alloc.create(5);
+ EXPECT_LESS_EQUAL(5u, buf2.size());
+ EXPECT_TRUE(buf2.get() != nullptr);
+ EXPECT_TRUE(buf.get() != buf2.get());
+ memcpy(buf2.get(), "fine", 5);
+ EXPECT_FALSE(buf.resize_inplace(5));
+ EXPECT_FALSE(buf.resize_inplace(3));
+ EXPECT_NOT_EQUAL(0u, allocator.get_end_offset());
+ int result = msync(buf.get(), buf.size(), MS_SYNC);
+ EXPECT_EQUAL(0, result);
+ result = msync(buf2.get(), buf2.size(), MS_SYNC);
+ EXPECT_EQUAL(0, result);
+}
+
TEST_MAIN() { TEST_RUN_ALL(); }