mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
[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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227639 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0def30471a
commit
05efde62f5
@ -1,15 +1,17 @@
|
|||||||
# Disable the coverage instrumentation for the fuzzer itself.
|
# Disable the coverage instrumentation for the fuzzer itself.
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -fsanitize-coverage=0")
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -fsanitize-coverage=0")
|
||||||
if( LLVM_USE_SANITIZE_COVERAGE )
|
if( LLVM_USE_SANITIZE_COVERAGE )
|
||||||
add_library(LLVMFuzzer STATIC
|
add_library(LLVMFuzzerNoMain OBJECT
|
||||||
EXCLUDE_FROM_ALL # Do not build if you are not building fuzzers.
|
|
||||||
FuzzerCrossOver.cpp
|
FuzzerCrossOver.cpp
|
||||||
FuzzerIO.cpp
|
FuzzerIO.cpp
|
||||||
FuzzerLoop.cpp
|
FuzzerLoop.cpp
|
||||||
FuzzerMain.cpp
|
|
||||||
FuzzerMutate.cpp
|
FuzzerMutate.cpp
|
||||||
FuzzerUtil.cpp
|
FuzzerUtil.cpp
|
||||||
)
|
)
|
||||||
|
add_library(LLVMFuzzer STATIC
|
||||||
|
FuzzerMain.cpp
|
||||||
|
$<TARGET_OBJECTS:LLVMFuzzerNoMain>
|
||||||
|
)
|
||||||
|
|
||||||
if( LLVM_INCLUDE_TESTS )
|
if( LLVM_INCLUDE_TESTS )
|
||||||
add_subdirectory(test)
|
add_subdirectory(test)
|
||||||
|
@ -25,19 +25,36 @@ foreach(Test ${Tests})
|
|||||||
set(TestBinaries ${TestBinaries} LLVMFuzzer-${Test})
|
set(TestBinaries ${TestBinaries} LLVMFuzzer-${Test})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
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(
|
configure_lit_site_cfg(
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
|
${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
|
${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}
|
||||||
|
)
|
||||||
|
|
||||||
|
add_lit_testsuite(check-fuzzer "Running Fuzzer tests"
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
DEPENDS ${TestBinaries}
|
||||||
|
)
|
||||||
|
62
lib/Fuzzer/test/FuzzerUnittest.cpp
Normal file
62
lib/Fuzzer/test/FuzzerUnittest.cpp
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
7
lib/Fuzzer/test/unit/lit.cfg
Normal file
7
lib/Fuzzer/test/unit/lit.cfg
Normal file
@ -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
|
2
lib/Fuzzer/test/unit/lit.site.cfg.in
Normal file
2
lib/Fuzzer/test/unit/lit.site.cfg.in
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
config.test_exec_root = "@CMAKE_CURRENT_BINARY_DIR@"
|
||||||
|
lit_config.load_config(config, "@CMAKE_CURRENT_SOURCE_DIR@/unit/lit.cfg")
|
Loading…
Reference in New Issue
Block a user