[Cobalt 1.1 privacy] Finish implementing MakePrivateObservations for FleetwideMeans

Also adds a test to check that this method is implemented
for all of the expected report types.

Change-Id: I0c973ac7a6b4ae708863bb516362ae1e6386d3cb
Reviewed-on: https://fuchsia-review.googlesource.com/c/cobalt/+/442902
Reviewed-by: Alexandre Zani <azani@google.com>
Commit-Queue: Laura Peskin <pesk@google.com>
diff --git a/src/logger/privacy_encoder.cc b/src/logger/privacy_encoder.cc
index 603e901..3374e7f 100644
--- a/src/logger/privacy_encoder.cc
+++ b/src/logger/privacy_encoder.cc
@@ -93,6 +93,11 @@
                                        observation, metric_def, report_def));
       break;
     }
+    case ReportDefinition::FLEETWIDE_MEANS: {
+      CB_ASSIGN_OR_RETURN(
+          indices, PrepareIndexVectorForFleetwideMeansReport(observation, metric_def, report_def));
+      break;
+    }
 
     default:
       return util::Status(util::UNIMPLEMENTED, "this is not yet implemented");
diff --git a/src/logger/privacy_encoder_test.cc b/src/logger/privacy_encoder_test.cc
index 1279111..129fdf8 100644
--- a/src/logger/privacy_encoder_test.cc
+++ b/src/logger/privacy_encoder_test.cc
@@ -96,15 +96,44 @@
   EXPECT_EQ(status_or.status().error_code(), util::INVALID_ARGUMENT);
 }
 
-TEST_F(PrivacyEncoderTest, MakePrivateObservationsUnimplementedReportType) {
+TEST_F(PrivacyEncoderTest, MakePrivateObservationsImplemented) {
+  std::vector<ReportDefinition::ReportType> implemented_report_types = {
+      ReportDefinition::UNIQUE_DEVICE_COUNTS,
+      ReportDefinition::FLEETWIDE_OCCURRENCE_COUNTS,
+      ReportDefinition::HOURLY_VALUE_NUMERIC_STATS,
+      ReportDefinition::UNIQUE_DEVICE_NUMERIC_STATS,
+      ReportDefinition::FLEETWIDE_MEANS,
+      ReportDefinition::HOURLY_VALUE_HISTOGRAMS,
+      ReportDefinition::UNIQUE_DEVICE_HISTOGRAMS};
+
   MetricDefinition metric_def;
   ReportDefinition report_def;
   report_def.set_privacy_level(ReportDefinition::LOW_PRIVACY);
-  report_def.set_report_type(ReportDefinition::CUSTOM_RAW_DUMP);
   Observation observation;
-  auto status_or = MakePrivateObservations(&observation, metric_def, report_def);
-  ASSERT_FALSE(status_or.ok());
-  EXPECT_EQ(status_or.status().error_code(), util::UNIMPLEMENTED);
+
+  for (const ReportDefinition::ReportType report_type : implemented_report_types) {
+    report_def.set_report_type(report_type);
+    EXPECT_NE(MakePrivateObservations(&observation, metric_def, report_def).status().error_code(),
+              util::UNIMPLEMENTED);
+  }
+}
+
+// MakePrivateObservations() is not implemented yet for these report types. Move report types to the
+// MakePrivateObservationsImplemented test as they are implemented.
+TEST_F(PrivacyEncoderTest, MakePrivateObservationsUnimplemented) {
+  std::vector<ReportDefinition::ReportType> unimplemented_report_types = {
+      ReportDefinition::FLEETWIDE_HISTOGRAMS, ReportDefinition::STRING_COUNTS};
+
+  MetricDefinition metric_def;
+  ReportDefinition report_def;
+  report_def.set_privacy_level(ReportDefinition::LOW_PRIVACY);
+
+  Observation observation;
+  for (const ReportDefinition::ReportType report_type : unimplemented_report_types) {
+    report_def.set_report_type(report_type);
+    EXPECT_EQ(MakePrivateObservations(&observation, metric_def, report_def).status().error_code(),
+              util::UNIMPLEMENTED);
+  }
 }
 
 TEST_F(PrivacyEncoderTest, MakePrivateObservationsNullObservation) {