diff options
author | Kostya Serebryany <kcc@google.com> | 2015-01-30 23:26:57 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2015-01-30 23:26:57 +0000 |
commit | 71672552dbe2f1ce80bc77987a6c762aa3c699b6 (patch) | |
tree | 142625a070618fd998d73851c61aec3fb0399b60 /llvm/lib | |
parent | 7792e32b649d6399ffc9d4ebcc700a376a4936e8 (diff) | |
download | bcm5719-llvm-71672552dbe2f1ce80bc77987a6c762aa3c699b6.tar.gz bcm5719-llvm-71672552dbe2f1ce80bc77987a6c762aa3c699b6.zip |
[fuzzer] Add a gtest-style test
Summary: Add one gtest-style test.
Test Plan: run on bot
Reviewers: samsonov
Reviewed By: samsonov
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D7287
llvm-svn: 227639
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Fuzzer/CMakeLists.txt | 8 | ||||
-rw-r--r-- | llvm/lib/Fuzzer/test/CMakeLists.txt | 33 | ||||
-rw-r--r-- | llvm/lib/Fuzzer/test/FuzzerUnittest.cpp | 62 | ||||
-rw-r--r-- | llvm/lib/Fuzzer/test/TestFuzzerCrossOver.cpp | 13 | ||||
-rw-r--r-- | llvm/lib/Fuzzer/test/unit/lit.cfg | 7 | ||||
-rw-r--r-- | llvm/lib/Fuzzer/test/unit/lit.site.cfg.in | 2 |
6 files changed, 101 insertions, 24 deletions
diff --git a/llvm/lib/Fuzzer/CMakeLists.txt b/llvm/lib/Fuzzer/CMakeLists.txt index 499cf98a6b9..a68df7f0feb 100644 --- a/llvm/lib/Fuzzer/CMakeLists.txt +++ b/llvm/lib/Fuzzer/CMakeLists.txt @@ -1,15 +1,17 @@ # Disable the coverage instrumentation for the fuzzer itself. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -fsanitize-coverage=0") if( LLVM_USE_SANITIZE_COVERAGE ) - add_library(LLVMFuzzer STATIC - EXCLUDE_FROM_ALL # Do not build if you are not building fuzzers. + add_library(LLVMFuzzerNoMain OBJECT FuzzerCrossOver.cpp FuzzerIO.cpp FuzzerLoop.cpp - FuzzerMain.cpp FuzzerMutate.cpp FuzzerUtil.cpp ) + add_library(LLVMFuzzer STATIC + FuzzerMain.cpp + $<TARGET_OBJECTS:LLVMFuzzerNoMain> + ) if( LLVM_INCLUDE_TESTS ) add_subdirectory(test) diff --git a/llvm/lib/Fuzzer/test/CMakeLists.txt b/llvm/lib/Fuzzer/test/CMakeLists.txt index 17afd92c3b4..2b94b4b49ae 100644 --- a/llvm/lib/Fuzzer/test/CMakeLists.txt +++ b/llvm/lib/Fuzzer/test/CMakeLists.txt @@ -25,19 +25,36 @@ foreach(Test ${Tests}) set(TestBinaries ${TestBinaries} LLVMFuzzer-${Test}) endforeach() +configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in + ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg + ) + +configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/unit/lit.site.cfg.in + ${CMAKE_CURRENT_BINARY_DIR}/unit/lit.site.cfg + ) + +include_directories(..) +include_directories(${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include) + +add_executable(LLVMFuzzer-Unittest + FuzzerUnittest.cpp + $<TARGET_OBJECTS:LLVMFuzzerNoMain> + ) + +target_link_libraries(LLVMFuzzer-Unittest + gtest + gtest_main + ) + +set(TestBinaries ${TestBinaries} LLVMFuzzer-Unittest) + set_target_properties(${TestBinaries} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) -set(EXCLUDE_FROM_ALL TRUE) add_lit_testsuite(check-fuzzer "Running Fuzzer tests" ${CMAKE_CURRENT_BINARY_DIR} DEPENDS ${TestBinaries} ) -set(EXCLUDE_FROM_ALL FALSE) - -configure_lit_site_cfg( - ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in - ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg - ) - diff --git a/llvm/lib/Fuzzer/test/FuzzerUnittest.cpp b/llvm/lib/Fuzzer/test/FuzzerUnittest.cpp new file mode 100644 index 00000000000..368a0f2bf00 --- /dev/null +++ b/llvm/lib/Fuzzer/test/FuzzerUnittest.cpp @@ -0,0 +1,62 @@ +#include "FuzzerInternal.h" +#include "gtest/gtest.h" +#include <set> + +// For now, have TestOneInput just to make it link. +// Later we may want to make unittests that actually call TestOneInput. +extern "C" void TestOneInput(const uint8_t *Data, size_t Size) { + abort(); +} + +TEST(Fuzzer, CrossOver) { + using namespace fuzzer; + Unit A({0, 1, 2}), B({5, 6, 7}); + Unit C; + Unit Expected[] = { + { 0 }, + { 0, 1 }, + { 0, 5 }, + { 0, 1, 2 }, + { 0, 1, 5 }, + { 0, 5, 1 }, + { 0, 5, 6 }, + { 0, 1, 2, 5 }, + { 0, 1, 5, 2 }, + { 0, 1, 5, 6 }, + { 0, 5, 1, 2 }, + { 0, 5, 1, 6 }, + { 0, 5, 6, 1 }, + { 0, 5, 6, 7 }, + { 0, 1, 2, 5, 6 }, + { 0, 1, 5, 2, 6 }, + { 0, 1, 5, 6, 2 }, + { 0, 1, 5, 6, 7 }, + { 0, 5, 1, 2, 6 }, + { 0, 5, 1, 6, 2 }, + { 0, 5, 1, 6, 7 }, + { 0, 5, 6, 1, 2 }, + { 0, 5, 6, 1, 7 }, + { 0, 5, 6, 7, 1 }, + { 0, 1, 2, 5, 6, 7 }, + { 0, 1, 5, 2, 6, 7 }, + { 0, 1, 5, 6, 2, 7 }, + { 0, 1, 5, 6, 7, 2 }, + { 0, 5, 1, 2, 6, 7 }, + { 0, 5, 1, 6, 2, 7 }, + { 0, 5, 1, 6, 7, 2 }, + { 0, 5, 6, 1, 2, 7 }, + { 0, 5, 6, 1, 7, 2 }, + { 0, 5, 6, 7, 1, 2 } + }; + for (size_t Len = 1; Len < 8; Len++) { + std::set<Unit> FoundUnits, ExpectedUnitsWitThisLength; + for (int Iter = 0; Iter < 3000; Iter++) { + CrossOver(A, B, &C, Len); + FoundUnits.insert(C); + } + for (const Unit &U : Expected) + if (U.size() <= Len) + ExpectedUnitsWitThisLength.insert(U); + EXPECT_EQ(ExpectedUnitsWitThisLength, FoundUnits); + } +} diff --git a/llvm/lib/Fuzzer/test/TestFuzzerCrossOver.cpp b/llvm/lib/Fuzzer/test/TestFuzzerCrossOver.cpp deleted file mode 100644 index 7f7619618ec..00000000000 --- a/llvm/lib/Fuzzer/test/TestFuzzerCrossOver.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "FuzzerInternal.h" - -int main() { - using namespace fuzzer; - Unit A({0, 1, 2, 3, 4}), B({5, 6, 7, 8, 9}); - Unit C; - for (size_t Len = 1; Len < 15; Len++) { - for (int Iter = 0; Iter < 1000; Iter++) { - CrossOver(A, B, &C, Len); - Print(C); - } - } -} diff --git a/llvm/lib/Fuzzer/test/unit/lit.cfg b/llvm/lib/Fuzzer/test/unit/lit.cfg new file mode 100644 index 00000000000..0cc31939c55 --- /dev/null +++ b/llvm/lib/Fuzzer/test/unit/lit.cfg @@ -0,0 +1,7 @@ +import lit.formats + +config.name = "LLVMFuzzer-Unittest" +print config.test_exec_root +config.test_format = lit.formats.GoogleTest(".", "Unittest") +config.suffixes = [] +config.test_source_root = config.test_exec_root diff --git a/llvm/lib/Fuzzer/test/unit/lit.site.cfg.in b/llvm/lib/Fuzzer/test/unit/lit.site.cfg.in new file mode 100644 index 00000000000..114daf474b6 --- /dev/null +++ b/llvm/lib/Fuzzer/test/unit/lit.site.cfg.in @@ -0,0 +1,2 @@ +config.test_exec_root = "@CMAKE_CURRENT_BINARY_DIR@" +lit_config.load_config(config, "@CMAKE_CURRENT_SOURCE_DIR@/unit/lit.cfg") |