From 808ffbcbdf558415700ae8fa1f0cd34aa64cd393 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Tue, 30 Jan 2024 11:46:49 -0800 Subject: [PATCH] Add blackbox, valgrind tests --- CMakeLists.txt | 28 ++++++++++++++++++++++------ TestDriver.cpp | 9 +++++---- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a712c2c..f20b89b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -101,15 +101,31 @@ endif() file(GLOB CORPUS_TESTS ${CMAKE_SOURCE_DIR}/corpus/*) -add_executable(conflict_set_test_driver ConflictSet.cpp TestDriver.cpp) -target_compile_options(conflict_set_test_driver PRIVATE ${TEST_FLAGS}) -target_compile_definitions(conflict_set_test_driver PRIVATE ENABLE_FUZZ) -target_include_directories(conflict_set_test_driver +add_executable(fuzz_driver ConflictSet.cpp FuzzTestDriver.cpp) +target_compile_options(fuzz_driver PRIVATE ${TEST_FLAGS}) +target_compile_definitions(fuzz_driver PRIVATE ENABLE_FUZZ) +target_include_directories(fuzz_driver PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) foreach(TEST ${CORPUS_TESTS}) get_filename_component(hash ${TEST} NAME) - add_test(NAME conflict_set_corpus_${hash} COMMAND conflict_set_test_driver - ${TEST}) + add_test(NAME conflict_set_fuzz_${hash} COMMAND fuzz_driver ${TEST}) +endforeach() + +add_executable(driver TestDriver.cpp) +target_link_libraries(driver PRIVATE ${PROJECT_NAME}) +find_program(VALGRIND_EXE valgrind) + +if(VALGRIND_EXE) + add_test(NAME conflict_set_blackbox_valgrind + COMMAND ${VALGRIND_EXE} --error-exitcode=99 -- $ + ${CORPUS_TESTS}) +else() + +endif() + +foreach(TEST ${CORPUS_TESTS}) + get_filename_component(hash ${TEST} NAME) + add_test(NAME conflict_set_blackbox_${hash} COMMAND driver ${TEST}) endforeach() # api smoke tests diff --git a/TestDriver.cpp b/TestDriver.cpp index a05c364..1ee7d8b 100644 --- a/TestDriver.cpp +++ b/TestDriver.cpp @@ -1,16 +1,17 @@ -#include +#include "Internal.h" #include #include #include -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); - int main(int argc, char **argv) { for (int i = 1; i < argc; ++i) { + printf("Running: %s\n", argv[i]); std::ifstream t(argv[i], std::ios::binary); std::stringstream buffer; buffer << t.rdbuf(); auto str = buffer.str(); - LLVMFuzzerTestOneInput((const uint8_t *)str.data(), str.size()); + TestDriver driver{(const uint8_t *)str.data(), str.size()}; + while (!driver.next()) + ; } }