Files
email-tracker/external/duckdb/test/ossfuzz/test_ossfuzz.cpp
2025-10-24 19:21:19 -05:00

51 lines
1.5 KiB
C++

#include "catch.hpp"
#include "duckdb/common/file_system.hpp"
#include "test_helpers.hpp"
#include <fstream>
#include <streambuf>
#include <sstream>
#include <string>
using namespace duckdb;
using namespace std;
constexpr const char *QUERY_DIRECTORY = "test/ossfuzz/cases";
static void test_runner() {
duckdb::unique_ptr<FileSystem> fs = FileSystem::CreateLocal();
auto file_name = Catch::getResultCapture().getCurrentTestName();
duckdb::unique_ptr<QueryResult> result;
DuckDB db(nullptr);
Connection con(db);
std::ifstream t(file_name);
duckdb::stringstream buffer;
buffer << t.rdbuf();
auto query = buffer.str();
result = con.Query(query.c_str());
unordered_set<string> internal_error_messages = {"Unoptimized Result differs from original result!", "INTERNAL"};
if (result->HasError()) {
if (TestIsInternalError(internal_error_messages, result->GetError())) {
result->Print();
REQUIRE(!result->GetErrorObject().HasError());
}
}
// we don't know whether the query fails or not and we don't know the
// correct result we just don't want it to crash
REQUIRE(1 == 1);
}
struct RegisterOssfuzzTests {
RegisterOssfuzzTests() {
// register a separate test for each file in the QUERY_DIRECTORY
duckdb::unique_ptr<FileSystem> fs = FileSystem::CreateLocal();
fs->ListFiles(QUERY_DIRECTORY, [&](string path, bool) {
REGISTER_TEST_CASE(test_runner, string(QUERY_DIRECTORY) + "/" + path, "[ossfuzz][.]");
});
}
};
RegisterOssfuzzTests register_ossfuzz_test;