X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0c4e18a2413d28c7f0d8e5fc66c4ad7f6b5aa8e8..1ffd336de7f3917df1d0cbbacc0e077b4b5c1363:/src/mc/sosp/mc_snapshot_test.cpp diff --git a/src/mc/sosp/mc_snapshot_test.cpp b/src/mc/sosp/mc_snapshot_test.cpp index 8d8d6d0731..64fb6edb7f 100644 --- a/src/mc/sosp/mc_snapshot_test.cpp +++ b/src/mc/sosp/mc_snapshot_test.cpp @@ -7,6 +7,7 @@ #include #include +#include #include @@ -25,8 +26,8 @@ public: size_t size; void* src; void* dstn; - RegionSnapshot region0; - RegionSnapshot region; + RegionSnapshot* region0; + RegionSnapshot* region; } prologue_return; static prologue_return prologue(int n); // common to the below 5 fxs static void read_whole_region(); @@ -41,11 +42,13 @@ public: mc_model_checker = nullptr; } + static std::default_random_engine rnd_engine; static bool sparse_checkpoint; static std::unique_ptr process; }; // static member variables init. +std::default_random_engine snap_test_helper::rnd_engine; bool snap_test_helper::sparse_checkpoint = 0; std::unique_ptr snap_test_helper::process = nullptr; @@ -53,7 +56,7 @@ void snap_test_helper::init_memory(void* mem, size_t size) { char* dest = (char*)mem; for (size_t i = 0; i < size; ++i) { - dest[i] = rand() & 255; + dest[i] = rnd_engine() & 255; } } @@ -63,7 +66,7 @@ void snap_test_helper::Init(bool sparse_ckpt) REQUIRE(xbt_pagesize == getpagesize()); REQUIRE(1 << xbt_pagebits == xbt_pagesize); - process = std::unique_ptr(new simgrid::mc::RemoteClient(getpid(), -1)); + process.reset(new simgrid::mc::RemoteClient(getpid(), -1)); process->init(); mc_model_checker = new ::simgrid::mc::ModelChecker(std::move(process)); } @@ -78,13 +81,13 @@ snap_test_helper::prologue_return snap_test_helper::prologue(int n) // Init memory and take snapshots: init_memory(source, byte_size); - simgrid::mc::RegionSnapshot region0 = - simgrid::mc::sparse_region(simgrid::mc::RegionType::Unknown, source, source, byte_size); + simgrid::mc::RegionSnapshot* region0 = + new simgrid::mc::RegionSparse(simgrid::mc::RegionType::Unknown, source, source, byte_size); for (int i = 0; i < n; i += 2) { init_memory((char*)source + i * xbt_pagesize, xbt_pagesize); } - simgrid::mc::RegionSnapshot region = - simgrid::mc::sparse_region(simgrid::mc::RegionType::Unknown, source, source, byte_size); + simgrid::mc::RegionSnapshot* region = + new simgrid::mc::RegionSparse(simgrid::mc::RegionType::Unknown, source, source, byte_size); void* destination = mmap(nullptr, byte_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); INFO("Could not allocate destination memory"); @@ -102,12 +105,14 @@ void snap_test_helper::read_whole_region() for (int n = 1; n != 32; ++n) { prologue_return ret = prologue(n); - const void* read = MC_region_read(&(ret.region), ret.dstn, ret.src, ret.size); + const void* read = MC_region_read(ret.region, ret.dstn, ret.src, ret.size); INFO("Mismatch in MC_region_read()"); REQUIRE(not memcmp(ret.src, read, ret.size)); munmap(ret.dstn, ret.size); munmap(ret.src, ret.size); + delete ret.region0; + delete ret.region; } } @@ -118,14 +123,16 @@ void snap_test_helper::read_region_parts() prologue_return ret = prologue(n); for (int j = 0; j != 100; ++j) { - size_t offset = rand() % ret.size; - size_t size = rand() % (ret.size - offset); - const void* read = MC_region_read(&(ret.region), ret.dstn, (const char*)ret.src + offset, size); + size_t offset = rnd_engine() % ret.size; + size_t size = rnd_engine() % (ret.size - offset); + const void* read = MC_region_read(ret.region, ret.dstn, (const char*)ret.src + offset, size); INFO("Mismatch in MC_region_read()"); REQUIRE(not memcmp((char*)ret.src + offset, read, size)); } munmap(ret.dstn, ret.size); munmap(ret.src, ret.size); + delete ret.region0; + delete ret.region; } } @@ -136,10 +143,12 @@ void snap_test_helper::compare_whole_region() prologue_return ret = prologue(n); INFO("Unexpected match in MC_snapshot_region_memcmp() with previous snapshot"); - REQUIRE(MC_snapshot_region_memcmp(ret.src, &(ret.region0), ret.src, &(ret.region), ret.size)); + REQUIRE(MC_snapshot_region_memcmp(ret.src, ret.region0, ret.src, ret.region, ret.size)); munmap(ret.dstn, ret.size); munmap(ret.src, ret.size); + delete ret.region0; + delete ret.region; } } @@ -150,15 +159,17 @@ void snap_test_helper::compare_region_parts() prologue_return ret = prologue(n); for (int j = 0; j != 100; ++j) { - size_t offset = rand() % ret.size; - size_t size = rand() % (ret.size - offset); + size_t offset = rnd_engine() % ret.size; + size_t size = rnd_engine() % (ret.size - offset); INFO("Mismatch in MC_snapshot_region_memcmp()"); - REQUIRE(not MC_snapshot_region_memcmp((char*)ret.src + offset, &(ret.region), (char*)ret.src + offset, - &(ret.region), size)); + REQUIRE(not MC_snapshot_region_memcmp((char*)ret.src + offset, ret.region, (char*)ret.src + offset, ret.region, + size)); } munmap(ret.dstn, ret.size); munmap(ret.src, ret.size); + delete ret.region0; + delete ret.region; } } @@ -167,16 +178,19 @@ void snap_test_helper::read_pointer() prologue_return ret = prologue(1); memcpy(ret.src, &mc_model_checker, sizeof(void*)); - simgrid::mc::RegionSnapshot region2 = - simgrid::mc::sparse_region(simgrid::mc::RegionType::Unknown, ret.src, ret.src, ret.size); + simgrid::mc::RegionSnapshot* region2 = + new simgrid::mc::RegionSparse(simgrid::mc::RegionType::Unknown, ret.src, ret.src, ret.size); INFO("Mismtach in MC_region_read_pointer()"); - REQUIRE(MC_region_read_pointer(®ion2, ret.src) == mc_model_checker); + REQUIRE(MC_region_read_pointer(region2, ret.src) == mc_model_checker); munmap(ret.dstn, ret.size); munmap(ret.src, ret.size); + delete ret.region0; + delete ret.region; } -/*************** End: class BOOST_tests *****************************/ +/*************** End: class snap_test_helper *****************************/ + TEST_CASE("MC::Snapshot: A copy/snapshot of a given memory region", "MC::Snapshot") { auto sparse = GENERATE(false, true);