Add a test for crash deduplication. PiperOrigin-RevId: 772568849
diff --git a/e2e_tests/corpus_database_test.cc b/e2e_tests/corpus_database_test.cc index 8773ae1..98422cd 100644 --- a/e2e_tests/corpus_database_test.cc +++ b/e2e_tests/corpus_database_test.cc
@@ -39,6 +39,7 @@ namespace fuzztest::internal { namespace { +using ::testing::Contains; using ::testing::ContainsRegex; using ::testing::Eq; using ::testing::HasSubstr; @@ -101,9 +102,9 @@ static void TearDownTestSuite() { run_map_->clear(); } - static std::string GetCorpusDatabasePath() { + static std::string UpdateCorpusDatabaseAndGetPath() { RunUpdateCorpusDatabase(); - return (*run_map_)[GetParam()].workspace->path() / "corpus_database"; + return GetCorpusDatabasePath(); } static absl::string_view GetUpdateCorpusDatabaseStdErr() { @@ -149,6 +150,10 @@ } private: + static std::string GetCorpusDatabasePath() { + return (*run_map_)[GetParam()].workspace->path() / "corpus_database"; + } + static absl::NoDestructor< absl::flat_hash_map<ExecutionModelParam, UpdateCorpusDatabaseRun>> run_map_; @@ -184,6 +189,12 @@ << std_err; } +TEST_P(UpdateCorpusDatabaseTest, DeduplicatesCrashes) { + EXPECT_THAT( + ListDirectoryRecursively(UpdateCorpusDatabaseAndGetPath()), + Contains(HasSubstr("FuzzTest.FailsInTwoWays/crashing/")).Times(2)); +} + TEST_P(UpdateCorpusDatabaseTest, StartsNewFuzzTestRunsWithoutExecutionIds) { TempDir corpus_database; @@ -331,9 +342,10 @@ TEST_P(UpdateCorpusDatabaseTest, ReplaysFuzzTestsInParallel) { RunOptions run_options; - run_options.fuzztest_flags = {{"corpus_database", GetCorpusDatabasePath()}, - {"replay_corpus_for", "inf"}, - {"jobs", "2"}}; + run_options.fuzztest_flags = { + {"corpus_database", UpdateCorpusDatabaseAndGetPath()}, + {"replay_corpus_for", "inf"}, + {"jobs", "2"}}; run_options.timeout = absl::Seconds(30); auto [status, std_out, std_err] = RunBinaryMaybeWithCentipede( GetCorpusDatabaseTestingBinaryPath(), run_options); @@ -347,8 +359,9 @@ TEST_P(UpdateCorpusDatabaseTest, PrintsErrorsWhenBazelTimeoutIsNotEnough) { RunOptions run_options; - run_options.fuzztest_flags = {{"corpus_database", GetCorpusDatabasePath()}, - {"fuzz_for", "20s"}}; + run_options.fuzztest_flags = { + {"corpus_database", UpdateCorpusDatabaseAndGetPath()}, + {"fuzz_for", "20s"}}; run_options.env = {{"TEST_TIMEOUT", "30"}}; run_options.timeout = absl::Seconds(60); auto [status, std_out, std_err] = RunBinaryMaybeWithCentipede(