Skip to content

Commit 4dda385

Browse files
xinhaoyuancopybara-github
authored andcommitted
Add a test for crash deduplication.
PiperOrigin-RevId: 772568849
1 parent 3a04e5c commit 4dda385

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

e2e_tests/corpus_database_test.cc

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
namespace fuzztest::internal {
4040
namespace {
4141

42+
using ::testing::Contains;
4243
using ::testing::ContainsRegex;
4344
using ::testing::Eq;
4445
using ::testing::HasSubstr;
@@ -101,9 +102,9 @@ class UpdateCorpusDatabaseTest
101102

102103
static void TearDownTestSuite() { run_map_->clear(); }
103104

104-
static std::string GetCorpusDatabasePath() {
105+
static std::string UpdateCorpusDatabaseAndGetPath() {
105106
RunUpdateCorpusDatabase();
106-
return (*run_map_)[GetParam()].workspace->path() / "corpus_database";
107+
return GetCorpusDatabasePath();
107108
}
108109

109110
static absl::string_view GetUpdateCorpusDatabaseStdErr() {
@@ -149,6 +150,10 @@ class UpdateCorpusDatabaseTest
149150
}
150151

151152
private:
153+
static std::string GetCorpusDatabasePath() {
154+
return (*run_map_)[GetParam()].workspace->path() / "corpus_database";
155+
}
156+
152157
static absl::NoDestructor<
153158
absl::flat_hash_map<ExecutionModelParam, UpdateCorpusDatabaseRun>>
154159
run_map_;
@@ -184,6 +189,12 @@ TEST_P(UpdateCorpusDatabaseTest, FindsAllCrashes) {
184189
<< std_err;
185190
}
186191

192+
TEST_P(UpdateCorpusDatabaseTest, DeduplicatesCrashes) {
193+
EXPECT_THAT(
194+
ListDirectoryRecursively(UpdateCorpusDatabaseAndGetPath()),
195+
Contains(HasSubstr("FuzzTest.FailsInTwoWays/crashing/")).Times(2));
196+
}
197+
187198
TEST_P(UpdateCorpusDatabaseTest, StartsNewFuzzTestRunsWithoutExecutionIds) {
188199
TempDir corpus_database;
189200

@@ -331,9 +342,10 @@ TEST_P(UpdateCorpusDatabaseTest,
331342

332343
TEST_P(UpdateCorpusDatabaseTest, ReplaysFuzzTestsInParallel) {
333344
RunOptions run_options;
334-
run_options.fuzztest_flags = {{"corpus_database", GetCorpusDatabasePath()},
335-
{"replay_corpus_for", "inf"},
336-
{"jobs", "2"}};
345+
run_options.fuzztest_flags = {
346+
{"corpus_database", UpdateCorpusDatabaseAndGetPath()},
347+
{"replay_corpus_for", "inf"},
348+
{"jobs", "2"}};
337349
run_options.timeout = absl::Seconds(30);
338350
auto [status, std_out, std_err] = RunBinaryMaybeWithCentipede(
339351
GetCorpusDatabaseTestingBinaryPath(), run_options);
@@ -347,8 +359,9 @@ TEST_P(UpdateCorpusDatabaseTest, ReplaysFuzzTestsInParallel) {
347359

348360
TEST_P(UpdateCorpusDatabaseTest, PrintsErrorsWhenBazelTimeoutIsNotEnough) {
349361
RunOptions run_options;
350-
run_options.fuzztest_flags = {{"corpus_database", GetCorpusDatabasePath()},
351-
{"fuzz_for", "20s"}};
362+
run_options.fuzztest_flags = {
363+
{"corpus_database", UpdateCorpusDatabaseAndGetPath()},
364+
{"fuzz_for", "20s"}};
352365
run_options.env = {{"TEST_TIMEOUT", "30"}};
353366
run_options.timeout = absl::Seconds(60);
354367
auto [status, std_out, std_err] = RunBinaryMaybeWithCentipede(

0 commit comments

Comments
 (0)