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(