mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-05-16 11:56:34 +02:00
add a test file for regression tests, cmakelist.txt to get it build correctly
This commit is contained in:
parent
2bd56533fa
commit
c027909acc
43
fuzz/CMakeLists.txt
Normal file
43
fuzz/CMakeLists.txt
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
FIND_PACKAGE (GTest REQUIRED)
|
||||||
|
FIND_PACKAGE (ZLIB REQUIRED)
|
||||||
|
FIND_PACKAGE (Boost REQUIRED COMPONENTS system filesystem)
|
||||||
|
|
||||||
|
INCLUDE_DIRECTORIES (
|
||||||
|
${GTEST_INCLUDE_DIRS}
|
||||||
|
${ZLIB_INCLUDE_DIRS}
|
||||||
|
${Boost_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
LIST (APPEND check_PROGRAMS
|
||||||
|
regression_runner.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
LINK_DIRECTORIES (
|
||||||
|
${Boost_LIBRARY_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
FOREACH (source_file ${check_PROGRAMS})
|
||||||
|
GET_FILENAME_COMPONENT (source_file_we ${source_file} NAME_WE)
|
||||||
|
ADD_EXECUTABLE (
|
||||||
|
${source_file_we}
|
||||||
|
${source_file}
|
||||||
|
)
|
||||||
|
TARGET_LINK_LIBRARIES (${source_file_we}
|
||||||
|
msgpackc
|
||||||
|
${GTEST_BOTH_LIBRARIES}
|
||||||
|
${ZLIB_LIBRARIES}
|
||||||
|
${CMAKE_THREAD_LIBS_INIT}
|
||||||
|
${Boost_LIBRARIES}
|
||||||
|
)
|
||||||
|
ADD_TEST (${source_file_we} ${source_file_we})
|
||||||
|
IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
|
SET_PROPERTY (TARGET ${source_file_we} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wall -Wextra -Wno-mismatched-tags -g")
|
||||||
|
IF ("${MSGPACK_SAN}" STREQUAL "ASAN")
|
||||||
|
SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer -fsanitize=address")
|
||||||
|
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=address")
|
||||||
|
ELSEIF ("${MSGPACK_SAN}" STREQUAL "UBSAN")
|
||||||
|
SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined")
|
||||||
|
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
ENDFOREACH ()
|
50
fuzz/regression_runner.cpp
Normal file
50
fuzz/regression_runner.cpp
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#include <boost/filesystem.hpp>
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "unpack_pack_fuzzer.cpp"
|
||||||
|
|
||||||
|
using ::testing::TestWithParam;
|
||||||
|
using ::testing::ValuesIn;
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<std::string> ListDirectory(const std::string& path) {
|
||||||
|
std::vector<std::string> v;
|
||||||
|
|
||||||
|
boost::filesystem::path p(path);
|
||||||
|
boost::filesystem::directory_iterator f{p};
|
||||||
|
|
||||||
|
if(boost::filesystem::is_directory(p)) {
|
||||||
|
while (f != boost::filesystem::directory_iterator{}) {
|
||||||
|
v.push_back((*f++).path().string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
class UnpackPackFuzzerRegressionTest : public ::testing::TestWithParam<std::string> {
|
||||||
|
public:
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST_P(UnpackPackFuzzerRegressionTest, Returns0) {
|
||||||
|
auto fpath = GetParam();
|
||||||
|
std::ifstream in(fpath, std::ifstream::binary);
|
||||||
|
if (!in) {
|
||||||
|
FAIL() << fpath << " not found";
|
||||||
|
}
|
||||||
|
in.seekg(0, in.end);
|
||||||
|
size_t length = in.tellg();
|
||||||
|
in.seekg(0, in.beg);
|
||||||
|
std::vector<char> bytes(length);
|
||||||
|
in.read(bytes.data(), bytes.size());
|
||||||
|
assert(in);
|
||||||
|
EXPECT_EQ(0, LLVMFuzzerTestOneInput(reinterpret_cast<const uint8_t *>(bytes.data()),
|
||||||
|
bytes.size()));
|
||||||
|
}
|
||||||
|
|
||||||
|
INSTANTIATE_TEST_CASE_P(UnpackPackFuzzerRegressions,
|
||||||
|
UnpackPackFuzzerRegressionTest,
|
||||||
|
::testing::ValuesIn(ListDirectory("../../fuzz/unpack_pack_fuzzer_regressions")));
|
Loading…
x
Reference in New Issue
Block a user