Add lit-style tests for the Fuzzer library
authorKostya Serebryany <kcc@google.com>
Wed, 28 Jan 2015 22:49:25 +0000 (22:49 +0000)
committerKostya Serebryany <kcc@google.com>
Wed, 28 Jan 2015 22:49:25 +0000 (22:49 +0000)
Summary: Add test targets and the lit-style runner.

Test Plan: Run the tests on bot.

Reviewers: samsonov

Reviewed By: samsonov

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D7217

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227389 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Fuzzer/CMakeLists.txt
lib/Fuzzer/FuzzerLoop.cpp
lib/Fuzzer/test/CMakeLists.txt [new file with mode: 0644]
lib/Fuzzer/test/fuzzer.test [new file with mode: 0644]
lib/Fuzzer/test/lit.cfg [new file with mode: 0644]
lib/Fuzzer/test/lit.site.cfg.in [new file with mode: 0644]

index 62207abb7d61a9e03d0af64bc49ba09f3a1b256b..e1ff65848cc84f3da168530bf4f8f22659b2f791 100644 (file)
@@ -7,3 +7,7 @@ add_library(LLVMFuzzer STATIC
   FuzzerMutate.cpp
   FuzzerUtil.cpp
   )
+
+if( LLVM_INCLUDE_TESTS )
+  add_subdirectory(test)
+endif()
index 9ad2bd729aa3dbea276edf169bb8e1e66d1fc4cc..b0bfce73ffd0fe47c5d7dff9b4133f936da798fc 100644 (file)
@@ -41,12 +41,12 @@ void Fuzzer::AlarmCallback() {
       duration_cast<seconds>(system_clock::now() - UnitStartTime).count();
   std::cerr << "ALARM: working on the last Unit for " << Seconds << " seconds"
             << std::endl;
-  if (Seconds > 60) {
+  if (Seconds >= 3) {
     Print(CurrentUnit, "\n");
     PrintASCII(CurrentUnit, "\n");
     WriteToCrash(CurrentUnit, "timeout-");
   }
-  abort();
+  exit(1);
 }
 
 void Fuzzer::ShuffleAndMinimize() {
diff --git a/lib/Fuzzer/test/CMakeLists.txt b/lib/Fuzzer/test/CMakeLists.txt
new file mode 100644 (file)
index 0000000..0c2118f
--- /dev/null
@@ -0,0 +1,37 @@
+set(Tests
+  ExactTest
+  InfiniteTest
+  NullDerefTest
+  SimpleTest
+  TimeoutTest
+  )
+
+set(TestBinaries)
+
+foreach(Test ${Tests})
+  add_executable(LLVMFuzzer-${Test}
+    EXCLUDE_FROM_ALL
+    ${Test}.cpp
+    )
+  target_link_libraries(LLVMFuzzer-${Test}
+    LLVMFuzzer
+    )
+  set(TestBinaries ${TestBinaries} LLVMFuzzer-${Test})
+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(
+  ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
+  ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
+  )
+
diff --git a/lib/Fuzzer/test/fuzzer.test b/lib/Fuzzer/test/fuzzer.test
new file mode 100644 (file)
index 0000000..5f01310
--- /dev/null
@@ -0,0 +1,13 @@
+RUN: ./LLVMFuzzer-SimpleTest 2>&1 | FileCheck %s --check-prefix=SimpleTest
+SimpleTest: Found the target, exiting
+
+RUN: not ./LLVMFuzzer-InfiniteTest -timeout=2 2>&1 | FileCheck %s --check-prefix=InfiniteTest
+InfiniteTest: ALARM: working on the last Unit for
+InfiniteTest-NOT: CRASHED; file written to timeout
+
+RUN: not ./LLVMFuzzer-TimeoutTest -timeout=5 2>&1 | FileCheck %s --check-prefix=TimeoutTest
+TimeoutTest: ALARM: working on the last Unit for
+TimeoutTest: CRASHED; file written to timeout
+
+RUN: not ./LLVMFuzzer-NullDerefTest 2>&1 | FileCheck %s --check-prefix=NullDerefTest
+NullDerefTest: CRASHED; file written to crash-
diff --git a/lib/Fuzzer/test/lit.cfg b/lib/Fuzzer/test/lit.cfg
new file mode 100644 (file)
index 0000000..d1c8505
--- /dev/null
@@ -0,0 +1,6 @@
+import lit.formats
+
+config.name = "LLVMFuzzer"
+config.test_format = lit.formats.ShTest(True)
+config.suffixes = ['.test']
+config.test_source_root = os.path.dirname(__file__)
diff --git a/lib/Fuzzer/test/lit.site.cfg.in b/lib/Fuzzer/test/lit.site.cfg.in
new file mode 100644 (file)
index 0000000..5fedc1d
--- /dev/null
@@ -0,0 +1,2 @@
+config.test_exec_root = "@CMAKE_CURRENT_BINARY_DIR@"
+lit_config.load_config(config, "@CMAKE_CURRENT_SOURCE_DIR@/lit.cfg")