diff --git a/centipede/seed_corpus_maker_lib_test.cc b/centipede/seed_corpus_maker_lib_test.cc index 4064c3e3..43b22c9f 100644 --- a/centipede/seed_corpus_maker_lib_test.cc +++ b/centipede/seed_corpus_maker_lib_test.cc @@ -117,10 +117,10 @@ TEST(SeedCorpusMakerLibTest, RoundTripWriteReadWrite) { { constexpr size_t kNumShards = 2; const SeedCorpusDestination destination = { - .dir_path = std::string(kRelDir1), - .shard_rel_glob = absl::StrCat("distilled-", kCovBin, ".*"), - .shard_index_digits = kIdxDigits, - .num_shards = kNumShards, + /*dir_path=*/std::string(kRelDir1), + /*shard_rel_glob=*/absl::StrCat("distilled-", kCovBin, ".*"), + /*shard_index_digits=*/kIdxDigits, + /*num_shards=*/kNumShards, }; ASSERT_OK(WriteSeedCorpusElementsToDestination( // kElements, kCovBin, kCovHash, destination)); @@ -133,13 +133,12 @@ TEST(SeedCorpusMakerLibTest, RoundTripWriteReadWrite) { // subsample of elements from the seed source created by the previous step. { for (const float fraction : {1.0, 0.5, 0.2}) { - const SeedCorpusSource source = { - .dir_glob = std::string(kRelDir1), - .num_recent_dirs = - 2, // Intentionally specify more than we actually have - .shard_rel_glob = absl::StrCat("distilled-", kCovBin, ".*"), - .sampled_fraction_or_count = fraction, - }; + SeedCorpusSource source; + source.dir_glob = std::string(kRelDir1); + source.num_recent_dirs = 2; + source.shard_rel_glob = absl::StrCat("distilled-", kCovBin, ".*"); + source.sampled_fraction_or_count = fraction; + InputAndFeaturesVec elements; ASSERT_OK(SampleSeedCorpusElementsFromSource( // source, kCovBin, kCovHash, elements)); @@ -154,23 +153,21 @@ TEST(SeedCorpusMakerLibTest, RoundTripWriteReadWrite) { // from the source and writes expected shards to the destination. { constexpr size_t kNumShards = 3; + + SeedCorpusSource source; + source.dir_glob = std::string(kRelDir1); + source.num_recent_dirs = 1; + source.shard_rel_glob = absl::StrCat("distilled-", kCovBin, ".*"); + source.sampled_fraction_or_count = 1.0f; const SeedCorpusConfig config = { - .sources = - { - { - .dir_glob = std::string(kRelDir1), - .num_recent_dirs = 1, - .shard_rel_glob = absl::StrCat("distilled-", kCovBin, ".*"), - .sampled_fraction_or_count = 1.0f, - }, - }, - .destination = - { - .dir_path = std::string(kRelDir2), - .shard_rel_glob = "corpus.*", - .shard_index_digits = kIdxDigits, - .num_shards = kNumShards, - }, + /*sources=*/{{source}}, + /*destination=*/ + { + /*dir_path=*/std::string(kRelDir2), + /*shard_rel_glob=*/"corpus.*", + /*shard_index_digits=*/kIdxDigits, + /*num_shards=*/kNumShards, + }, }; { @@ -205,10 +202,10 @@ TEST(SeedCorpusMakerLibTest, LoadsBothIndividualInputsAndShardsFromSource) { { constexpr size_t kNumShards = 2; const SeedCorpusDestination destination = { - .dir_path = std::string(kRelDir), - .shard_rel_glob = absl::StrCat("distilled-", kCovBin, ".*"), - .shard_index_digits = kIdxDigits, - .num_shards = kNumShards, + /*dir_path=*/std::string(kRelDir), + /*shard_rel_glob=*/absl::StrCat("distilled-", kCovBin, ".*"), + /*shard_index_digits=*/kIdxDigits, + /*num_shards=*/kNumShards, }; CHECK_OK(WriteSeedCorpusElementsToDestination( // kShardedInputs, kCovBin, kCovHash, destination)); @@ -229,13 +226,13 @@ TEST(SeedCorpusMakerLibTest, LoadsBothIndividualInputsAndShardsFromSource) { InputAndFeaturesVec elements; ASSERT_OK(SampleSeedCorpusElementsFromSource( // SeedCorpusSource{ - .dir_glob = std::string(kRelDir), - .num_recent_dirs = 1, - .shard_rel_glob = absl::StrCat("distilled-", kCovBin, ".*"), + /*dir_glob=*/std::string(kRelDir), + /*num_recent_dirs=*/1, + /*shard_rel_glob=*/absl::StrCat("distilled-", kCovBin, ".*"), // Intentionally try to match the shard files and test if they will // be read as individual inputs. - .individual_input_rel_glob = "*", - .sampled_fraction_or_count = 1.0f, + /*individual_input_rel_glob=*/"*", + /*sampled_fraction_or_count=*/1.0f, }, kCovBin, kCovHash, elements)); EXPECT_EQ(elements.size(), 5); // Non-empty inputs diff --git a/centipede/seed_corpus_maker_proto_lib_test.cc b/centipede/seed_corpus_maker_proto_lib_test.cc index 64b27eeb..6d0c1239 100644 --- a/centipede/seed_corpus_maker_proto_lib_test.cc +++ b/centipede/seed_corpus_maker_proto_lib_test.cc @@ -109,10 +109,10 @@ TEST(SeedCorpusMakerProtoLibTest, MakesSeedUsingConfigProto) { // Prepare a seed source for tests. { const SeedCorpusDestination destination = { - .dir_path = std::string(kRelDir1), - .shard_rel_glob = absl::StrCat("distilled-", kCovBin, ".*"), - .shard_index_digits = kIdxDigits, - .num_shards = 2, + /*dir_path=*/std::string(kRelDir1), + /*shard_rel_glob=*/absl::StrCat("distilled-", kCovBin, ".*"), + /*shard_index_digits=*/kIdxDigits, + /*num_shards=*/2, }; ASSERT_OK(WriteSeedCorpusElementsToDestination( // kElements, kCovBin, kCovHash, destination)); diff --git a/centipede/stats_test.cc b/centipede/stats_test.cc index 354fbccb..45f99127 100644 --- a/centipede/stats_test.cc +++ b/centipede/stats_test.cc @@ -32,6 +32,7 @@ #include "absl/strings/str_cat.h" #include "absl/strings/str_join.h" #include "absl/strings/str_split.h" +#include "absl/strings/string_view.h" #include "absl/time/civil_time.h" #include "absl/time/time.h" #include "./centipede/environment.h" @@ -68,58 +69,73 @@ uint64_t CivilTimeToUnixMicros( // absl::CivilSecond{y, m, d, hh, mm, ss}, absl::LocalTimeZone())); } +Environment CreateEnv(std::string_view workdir, + std::string_view experiment_name = "", + std::string_view experiment_flags = "") { + Environment env; + env.workdir = std::string(workdir); + env.experiment_name = std::string(experiment_name); + env.experiment_flags = std::string(experiment_flags); + return env; +} + } // namespace TEST(Stats, PrintStatsToLog) { std::vector> stats_vec(4); for (uint64_t i = 0; i < stats_vec.size(); ++i) { const uint64_t j = i + 1; + + CovStats cov_stats = {/*num_covered_pcs=*/21 * j, + /*num_8bit_counter_features=*/22 * j, + /*num_data_flow_features=*/23 * j, + /*num_cmp_features=*/24 * j, + /*num_call_stack_features=*/25 * j, + /*num_bounded_path_features=*/26 * j, + /*num_pc_pair_features=*/27 * j, + /*num_user_features=*/28 * j}; + // NOTE: These two don't add up to `num_user_features`, but that's + // ok for the purposes of this test. + cov_stats.num_user0_features = 28 * j + 1; + cov_stats.num_user10_features = 28 * j + 2; + cov_stats.num_unknown_features = 29 * j; + cov_stats.num_funcs_in_frontier = 31 * j; + stats_vec[i].store(Stats{ - StatsMeta{ - .timestamp_unix_micros = CivilTimeToUnixMicros(1970, 1, 1, 0, 0, i), - }, + StatsMeta{/*timestamp_unix_micros=*/CivilTimeToUnixMicros(1970, 1, 1, 0, + 0, i)}, ExecStats{ - .fuzz_time_sec = 10 * j, - .num_executions = 12 * j, - .num_target_crashes = 13 * j, - }, - CovStats{ - .num_covered_pcs = 21 * j, - .num_8bit_counter_features = 22 * j, - .num_data_flow_features = 23 * j, - .num_cmp_features = 24 * j, - .num_call_stack_features = 25 * j, - .num_bounded_path_features = 26 * j, - .num_pc_pair_features = 27 * j, - .num_user_features = 28 * j, - // NOTE: These two don't add up to `num_user_features`, but that's - // ok for the purposes of this test. - .num_user0_features = 28 * j + 1, - .num_user10_features = 28 * j + 2, - .num_unknown_features = 29 * j, - .num_funcs_in_frontier = 31 * j, + /*fuzz_time_sec=*/10 * j, + /*num_executions=*/12 * j, + /*num_target_crashes=*/13 * j, }, + cov_stats, CorpusStats{ - .active_corpus_size = 101 * j, - .total_corpus_size = 102 * j, - .max_corpus_element_size = 103 * j, - .avg_corpus_element_size = 104 * j, + /*active_corpus_size=*/101 * j, + /*total_corpus_size=*/102 * j, + /*max_corpus_element_size=*/103 * j, + /*avg_corpus_element_size=*/104 * j, }, RusageStats{ - .engine_rusage_avg_millicores = 201 * j, - .engine_rusage_cpu_percent = 202 * j, - .engine_rusage_rss_mb = 203 * j, - .engine_rusage_vsize_mb = 204 * j, + /*engine_rusage_avg_millicores=*/201 * j, + /*engine_rusage_cpu_percent=*/202 * j, + /*engine_rusage_rss_mb=*/203 * j, + /*engine_rusage_vsize_mb=*/204 * j, }, }); } const std::vector env_vec = { - {.experiment_name = "Experiment A", .experiment_flags = "AAA"}, - {.experiment_name = "Experiment B", .experiment_flags = "BBB"}, - {.experiment_name = "Experiment A", .experiment_flags = "AAA"}, - {.experiment_name = "Experiment B", .experiment_flags = "BBB"}, - }; + CreateEnv( + /*workdir=*/"", /*experiment_name=*/"Experiment A", + /*experiment_flags=*/"AAA"), + CreateEnv(/*workdir=*/"", /*experiment_name=*/"Experiment B", + /*experiment_flags=*/"BBB"), + CreateEnv( + /*workdir=*/"", /*experiment_name=*/"Experiment A", + /*experiment_flags=*/"AAA"), + CreateEnv(/*workdir=*/"", /*experiment_name=*/"Experiment B", + /*experiment_flags=*/"BBB")}; StatsLogger stats_logger{stats_vec, env_vec}; @@ -395,68 +411,55 @@ TEST(Stats, DumpStatsToCsvFile) { std::vector> stats_vec(4); for (uint64_t i = 0; i < stats_vec.size(); ++i) { const uint64_t j = i + 1; + + CovStats cov_stats{/*num_covered_pcs=*/ + 21 * j, + /*num_8bit_counter_features=*/22 * j, + /*num_data_flow_features=*/23 * j, + /*num_cmp_features=*/24 * j, + /*num_call_stack_features=*/25 * j, + /*num_bounded_path_features=*/26 * j, + /*num_pc_pair_features=*/27 * j, + /*num_user_features=*/28 * j}; + // NOTE: These two don't add up to `num_user_features`, but that's + // ok for the purposes of this test. + cov_stats.num_user0_features = 28 * j + 1; + cov_stats.num_user10_features = 28 * j + 2; + cov_stats.num_unknown_features = 29 * j; + cov_stats.num_funcs_in_frontier = 31 * j; + stats_vec[i].store(Stats{ - StatsMeta{ - .timestamp_unix_micros = 1000000 * j, - }, + StatsMeta{/*timestamp_unix_micros=*/1000000 * j}, ExecStats{ - .fuzz_time_sec = 10 * j, - .num_executions = 12 * j, - .num_target_crashes = 13 * j, - }, - CovStats{ - .num_covered_pcs = 21 * j, - .num_8bit_counter_features = 22 * j, - .num_data_flow_features = 23 * j, - .num_cmp_features = 24 * j, - .num_call_stack_features = 25 * j, - .num_bounded_path_features = 26 * j, - .num_pc_pair_features = 27 * j, - .num_user_features = 28 * j, - // NOTE: These two don't add up to `num_user_features`, but that's - // ok for the purposes of this test. - .num_user0_features = 28 * j + 1, - .num_user10_features = 28 * j + 2, - .num_unknown_features = 29 * j, - .num_funcs_in_frontier = 31 * j, + /*fuzz_time_sec=*/10 * j, + /*.num_executions=*/12 * j, + /*.num_target_crashes=*/13 * j, }, + cov_stats, CorpusStats{ - .active_corpus_size = 101 * j, - .total_corpus_size = 102 * j, - .max_corpus_element_size = 103 * j, - .avg_corpus_element_size = 104 * j, + /*active_corpus_size=*/101 * j, + /*total_corpus_size=*/102 * j, + /*max_corpus_element_size=*/103 * j, + /*avg_corpus_element_size=*/104 * j, }, RusageStats{ - .engine_rusage_avg_millicores = 201 * j, - .engine_rusage_cpu_percent = 202 * j, - .engine_rusage_rss_mb = 203 * j, - .engine_rusage_vsize_mb = 204 * j, + /*engine_rusage_avg_millicores=*/201 * j, + /*engine_rusage_cpu_percent=*/202 * j, + /*engine_rusage_rss_mb=*/203 * j, + /*engine_rusage_vsize_mb=*/204 * j, }, }); } const std::vector env_vec = { - { - .workdir = workdir, - .experiment_name = "ExperimentA", - .experiment_flags = "AAA", - }, - { - .workdir = workdir, - .experiment_name = "ExperimentB", - .experiment_flags = "BBB", - }, - { - .workdir = workdir, - .experiment_name = "ExperimentA", - .experiment_flags = "AAA", - }, - { - .workdir = workdir, - .experiment_name = "ExperimentB", - .experiment_flags = "BBB", - }, - }; + CreateEnv(workdir.c_str(), /*experiment_name=*/"ExperimentA", + /*experiment_flags=*/"AAA"), + CreateEnv(workdir.c_str(), /*experiment_name=*/"ExperimentB", + /*experiment_flags=*/"BBB"), + CreateEnv(workdir.c_str(), /*experiment_name=*/"ExperimentA", + /*experiment_flags=*/"AAA"), + CreateEnv(workdir.c_str(), /*experiment_name=*/"ExperimentB", + /*experiment_flags=*/"BBB")}; { StatsCsvFileAppender stats_csv_appender{stats_vec, env_vec}; @@ -769,15 +772,12 @@ TEST(Stats, DumpStatsToExistingCsvFile) { }; const std::filesystem::path workdir = GetTestTempDir(test_info_->name()); - - const std::vector env_vec = { - {.workdir = workdir}, - {.workdir = workdir}, - }; + const std::vector env_vec = {CreateEnv(workdir.c_str()), + CreateEnv(workdir.c_str())}; std::vector> stats_vec(2); - stats_vec[0].store({StatsMeta{.timestamp_unix_micros = 1000000}}); - stats_vec[1].store({StatsMeta{.timestamp_unix_micros = 2000000}}); + stats_vec[0].store({StatsMeta{/*timestamp_unix_micros=*/1000000}}); + stats_vec[1].store({StatsMeta{/*timestamp_unix_micros=*/2000000}}); const std::string kExpectedCsv = workdir / "fuzzing-stats-.000000.csv"; const std::string kExpectedCsvBak = workdir / "fuzzing-stats-.000000.csv.bak"; @@ -801,8 +801,8 @@ TEST(Stats, DumpStatsToExistingCsvFile) { // `StatsCsvFileAppender` finds an existing file with a CSV header matching // the current version and appends a 2nd stats line to it. { - stats_vec[0].store({StatsMeta{.timestamp_unix_micros = 3000000}}); - stats_vec[1].store({StatsMeta{.timestamp_unix_micros = 4000000}}); + stats_vec[0].store({StatsMeta{/*timestamp_unix_micros=*/3000000}}); + stats_vec[1].store({StatsMeta{/*timestamp_unix_micros=*/4000000}}); TestStatsCsvFileAppender stats_csv_appender{stats_vec, env_vec}; stats_csv_appender.ReportCurrStats(); @@ -828,8 +828,8 @@ TEST(Stats, DumpStatsToExistingCsvFile) { }; WriteToLocalFile(kExpectedCsv, absl::StrJoin(kFakeOldCsvLines, "\n")); - stats_vec[0].store({StatsMeta{.timestamp_unix_micros = 5000000}}); - stats_vec[1].store({StatsMeta{.timestamp_unix_micros = 6000000}}); + stats_vec[0].store({StatsMeta{/*timestamp_unix_micros=*/5000000}}); + stats_vec[1].store({StatsMeta{/*timestamp_unix_micros=*/6000000}}); TestStatsCsvFileAppender stats_csv_appender{stats_vec, env_vec}; stats_csv_appender.ReportCurrStats(); @@ -856,13 +856,13 @@ TEST(Stats, PrintRewardValues) { std::stringstream ss; std::vector> stats_vec(4); stats_vec[0].store( - {StatsMeta{}, ExecStats{}, CovStats{.num_covered_pcs = 15}}); + {StatsMeta{}, ExecStats{}, CovStats{/*num_covered_pcs=*/15}}); stats_vec[1].store( - {StatsMeta{}, ExecStats{}, CovStats{.num_covered_pcs = 10}}); + {StatsMeta{}, ExecStats{}, CovStats{/*num_covered_pcs=*/10}}); stats_vec[2].store( - {StatsMeta{}, ExecStats{}, CovStats{.num_covered_pcs = 40}}); + {StatsMeta{}, ExecStats{}, CovStats{/*num_covered_pcs=*/40}}); stats_vec[3].store( - {StatsMeta{}, ExecStats{}, CovStats{.num_covered_pcs = 25}}); + {StatsMeta{}, ExecStats{}, CovStats{/*num_covered_pcs=*/25}}); PrintRewardValues(stats_vec, ss); const char *expected = "REWARD_MAX 40\n" diff --git a/centipede/test_coverage_util.cc b/centipede/test_coverage_util.cc index 9c1819ce..5247c409 100644 --- a/centipede/test_coverage_util.cc +++ b/centipede/test_coverage_util.cc @@ -50,8 +50,8 @@ std::vector RunInputsAndCollectCorpusRecords( corpus_records.reserve(byte_array_inputs.size()); for (int i = 0; i < byte_array_inputs.size(); ++i) { - corpus_records.push_back({.data = byte_array_inputs[i], - .features = execution_results[i].features()}); + corpus_records.push_back({/*data=*/byte_array_inputs[i], + /*features=*/execution_results[i].features()}); } return corpus_records; } diff --git a/centipede/workdir_test.cc b/centipede/workdir_test.cc index ce20e425..4a9f455e 100644 --- a/centipede/workdir_test.cc +++ b/centipede/workdir_test.cc @@ -29,14 +29,14 @@ TEST(WorkDirTest, Ctors) { /*binary_hash=*/"hash", /*my_shard_index=*/3, }; - Environment kEnv{ - .workdir = "/dir", - .my_shard_index = 3, - .binary_name = "bin", - .binary_hash = "hash", - }; + Environment env; + env.workdir = "/dir"; + env.my_shard_index = 3; + env.binary_name = "bin"; + env.binary_hash = "hash"; + const std::array other_wds = { - WorkDir{/*env=*/kEnv}, + WorkDir{env}, WorkDir::FromCorpusShardPath( // /*corpus_shard_path=*/"/dir/corpus.000003", // /*binary_name=*/"bin", //