Index: components/metrics/file_metrics_provider_unittest.cc |
diff --git a/components/metrics/file_metrics_provider_unittest.cc b/components/metrics/file_metrics_provider_unittest.cc |
index 42e38bc75af998df0e55f6fb67e8363fdfe5045c..a62ff63273449fc4e514aba4334197b921ace2e4 100644 |
--- a/components/metrics/file_metrics_provider_unittest.cc |
+++ b/components/metrics/file_metrics_provider_unittest.cc |
@@ -597,4 +597,58 @@ TEST_P(FileMetricsProviderTest, AccessEmbeddedFallbackMetricsWithProfile) { |
EXPECT_FALSE(base::PathExists(metrics_file())); |
} |
+TEST_P(FileMetricsProviderTest, AccessEmbeddedProfileMetricsFromDir) { |
+ const int file_count = 3; |
+ base::Time file_base_time = base::Time::Now(); |
+ std::vector<base::FilePath> file_names; |
+ for (int i = 0; i < file_count; ++i) { |
+ CreateMetricsFileWithHistograms( |
+ 2, [](base::PersistentHistogramAllocator* allocator) { |
+ SystemProfileProto profile_proto; |
+ SystemProfileProto::FieldTrial* trial = |
+ profile_proto.add_field_trial(); |
+ trial->set_name_id(123); |
+ trial->set_group_id(456); |
+ |
+ PersistentSystemProfile persistent_profile; |
+ persistent_profile.RegisterPersistentAllocator( |
+ allocator->memory_allocator()); |
+ persistent_profile.SetSystemProfile(profile_proto, true); |
+ }); |
+ ASSERT_TRUE(PathExists(metrics_file())); |
+ char new_name[] = "hX"; |
+ new_name[1] = '1' + i; |
+ base::FilePath file_name = temp_dir().AppendASCII(new_name).AddExtension( |
+ base::PersistentMemoryAllocator::kFileExtension); |
+ base::Time file_time = |
+ file_base_time - base::TimeDelta::FromMinutes(file_count - i); |
+ base::TouchFile(metrics_file(), file_time, file_time); |
+ base::Move(metrics_file(), file_name); |
+ file_names.push_back(std::move(file_name)); |
+ } |
+ |
+ // Register the file and allow the "checker" task to run. |
+ provider()->RegisterSource( |
+ temp_dir(), FileMetricsProvider::SOURCE_HISTOGRAMS_ATOMIC_DIR, |
+ FileMetricsProvider::ASSOCIATE_INTERNAL_PROFILE, ""); |
+ |
+ OnDidCreateMetricsLog(); |
+ RunTasks(); |
+ |
+ // A read of metrics with internal profiles should return one result. |
+ HistogramFlattenerDeltaRecorder flattener; |
+ base::HistogramSnapshotManager snapshot_manager(&flattener); |
+ SystemProfileProto profile; |
+ for (int i = 0; i < file_count; ++i) { |
+ EXPECT_TRUE(ProvideIndependentMetrics(&profile, &snapshot_manager)) << i; |
+ RunTasks(); |
+ } |
+ EXPECT_FALSE(ProvideIndependentMetrics(&profile, &snapshot_manager)); |
+ |
+ OnDidCreateMetricsLog(); |
+ RunTasks(); |
+ for (const auto& file_name : file_names) |
+ EXPECT_FALSE(base::PathExists(file_name)); |
+} |
+ |
} // namespace metrics |