From: Gabriel Corona Date: Tue, 8 Jul 2014 14:41:35 +0000 (+0200) Subject: [mc] Move page store test from the integration test into the unit test infrastructure X-Git-Tag: v3_12~890^2~1^2~4^2~18 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/2af1bedb3d5efbb393dfaf2908ed5d9ea68e0ca5 [mc] Move page store test from the integration test into the unit test infrastructure --- diff --git a/buildtools/Cmake/UnitTesting.cmake b/buildtools/Cmake/UnitTesting.cmake index 7800769b06..95ee93fba9 100644 --- a/buildtools/Cmake/UnitTesting.cmake +++ b/buildtools/Cmake/UnitTesting.cmake @@ -28,6 +28,13 @@ set(TEST_UNITS ${CMAKE_CURRENT_BINARY_DIR}/src/simgrid_units_main.c ) +if(HAVE_MC) + set(TEST_CFILES ${TEST_CFILES} + src/mc/mc_page_store.cpp) + set(TEST_UNITS ${TEST_UNITS} + ${CMAKE_CURRENT_BINARY_DIR}/src/mc_page_store_unit.cpp) +endif() + ADD_CUSTOM_COMMAND( OUTPUT ${TEST_UNITS} diff --git a/src/mc/mc_page_store.cpp b/src/mc/mc_page_store.cpp index cac7e0f306..f7287465b7 100644 --- a/src/mc/mc_page_store.cpp +++ b/src/mc/mc_page_store.cpp @@ -166,3 +166,78 @@ mc_pages_store_t mc_pages_store_new() } } + +#ifdef SIMGRID_TEST + +#include +#include +#include +#include +#include + +#include + +#include "mc/mc_page_store.h" + +static int value = 0; + +static void new_content(void* data, size_t size) +{ + memset(data, ++value, size); +} + +static void* getpage() +{ + return mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); +} + +extern "C" { + +XBT_TEST_SUITE("mc_page_store", "Page store"); + +XBT_TEST_UNIT("base", test_mc_page_store, "Test adding/removing pages in the store") +{ + xbt_test_add("Init"); + size_t pagesize = (size_t) getpagesize(); + std::auto_ptr store = std::auto_ptr(new s_mc_pages_store(500)); + void* data = getpage(); + xbt_test_assert(store->size()==0, "Bad size"); + + xbt_test_add("Store the page once"); + new_content(data, pagesize); + size_t pageno1 = store->store_page(data); + xbt_test_assert(store->get_ref(pageno1)==1, "Bad refcount"); + const void* copy = store->get_page(pageno1); + xbt_test_assert(memcmp(data, copy, pagesize)==0, "Page data should be the same"); + xbt_test_assert(store->size()==1, "Bad size"); + + xbt_test_add("Store the same page again"); + size_t pageno2 = store->store_page(data); + xbt_test_assert(pageno1==pageno2, "Page should be the same"); + xbt_test_assert(store->get_ref(pageno1)==2, "Bad refcount"); + xbt_test_assert(store->size()==1, "Bad size"); + + xbt_test_add("Store a new page"); + new_content(data, pagesize); + size_t pageno3 = store->store_page(data); + xbt_test_assert(pageno1 != pageno3, "New page should be different"); + xbt_test_assert(store->size()==2, "Bad size"); + + xbt_test_add("Unref pages"); + store->unref_page(pageno1); + xbt_assert(store->get_ref(pageno1)==1, "Bad refcount"); + xbt_assert(store->size()==2, "Bad size"); + store->unref_page(pageno2); + xbt_test_assert(store->size()==1, "Bad size"); + + xbt_test_add("Reallocate page"); + new_content(data, pagesize); + size_t pageno4 = store->store_page(data); + xbt_test_assert(pageno1 == pageno4, "Page was not reused"); + xbt_test_assert(store->get_ref(pageno4)==1, "Bad refcount"); + xbt_test_assert(store->size()==2, "Bad size"); +} + +} + +#endif /* SIMGRID_TEST */ diff --git a/teshsuite/mc/CMakeLists.txt b/teshsuite/mc/CMakeLists.txt index 8e986cf79e..5c2f3d20e1 100644 --- a/teshsuite/mc/CMakeLists.txt +++ b/teshsuite/mc/CMakeLists.txt @@ -2,18 +2,13 @@ cmake_minimum_required(VERSION 2.6) if(HAVE_MC) set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") - - add_executable(page_store page_store.cpp) - target_link_libraries(page_store simgrid) endif() set(tesh_files ${tesh_files} - ${CMAKE_CURRENT_SOURCE_DIR}/page_store.tesh PARENT_SCOPE ) set(testsuite_src ${testsuite_src} - ${CMAKE_CURRENT_SOURCE_DIR}/page_store.cpp PARENT_SCOPE ) diff --git a/teshsuite/mc/page_store.cpp b/teshsuite/mc/page_store.cpp deleted file mode 100644 index 592b9babac..0000000000 --- a/teshsuite/mc/page_store.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include -#include -#include -#include - -#include "mc/mc_page_store.h" - -static int value = 0; - -static void new_content(void* data, size_t size) -{ - memset(data, ++value, size); -} - -static void* getpage() -{ - return mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); -} - -int main(int argc, char** argv) -{ - // Init - size_t pagesize = (size_t) getpagesize(); - mc_pages_store_t store = new s_mc_pages_store(500); - void* data = getpage(); - - // Init: - xbt_assert(store->size()==0, "Bad size"); - - // Store the page once: - new_content(data, pagesize); - size_t pageno1 = store->store_page(data); - xbt_assert(store->get_ref(pageno1)==1, "Bad refcount"); - const void* copy = store->get_page(pageno1); - xbt_assert(memcmp(data, copy, pagesize)==0, "Page data should be the same"); - xbt_assert(store->size()==1, "Bad size"); - - // Store the same page again: - size_t pageno2 = store->store_page(data); - xbt_assert(pageno1==pageno2, "Page should be the same"); - xbt_assert(store->get_ref(pageno1)==2, "Bad refcount"); - xbt_assert(store->size()==1, "Bad size"); - - // Store a new page: - new_content(data, pagesize); - size_t pageno3 = store->store_page(data); - xbt_assert(pageno1 != pageno3, "New page should be different"); - xbt_assert(store->size()==2, "Bad size"); - - // Unref pages: - store->unref_page(pageno1); - xbt_assert(store->get_ref(pageno1)==1, "Bad refcount"); - xbt_assert(store->size()==2, "Bad size"); - store->unref_page(pageno2); - xbt_assert(store->size()==1, "Bad size"); - - // Reallocate page: - new_content(data, pagesize); - size_t pageno4 = store->store_page(data); - xbt_assert(pageno1 == pageno4, "Page was not reused"); - xbt_assert(store->get_ref(pageno4)==1, "Bad refcount"); - xbt_assert(store->size()==2, "Bad size"); - - return 0; -}