Skip to content

Commit

Permalink
[fuzzer] Add a gtest-style test
Browse files Browse the repository at this point in the history
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
  • Loading branch information
kcc committed Jan 30, 2015
1 parent 7792e32 commit 7167255
Show file tree
Hide file tree
Showing 6 changed files with 101 additions and 24 deletions.
8 changes: 5 additions & 3 deletions 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)
Expand Down
33 changes: 25 additions & 8 deletions llvm/lib/Fuzzer/test/CMakeLists.txt
Expand Up @@ -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
)

62 changes: 62 additions & 0 deletions 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);
}
}
13 changes: 0 additions & 13 deletions llvm/lib/Fuzzer/test/TestFuzzerCrossOver.cpp

This file was deleted.

7 changes: 7 additions & 0 deletions 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
2 changes: 2 additions & 0 deletions 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")

0 comments on commit 7167255

Please sign in to comment.