ShippingManagerTest: Switch from ASCII proto to YAML for test config.

Change-Id: I1e4b8057b2dec796898147ad16c1e9898d7d1460
diff --git a/encoder/BUILD.gn b/encoder/BUILD.gn
index 70ed2af..7d16356 100644
--- a/encoder/BUILD.gn
+++ b/encoder/BUILD.gn
@@ -66,6 +66,14 @@
   output_file = "envelope_maker_test_config.h"
 }
 
+# Generate shipping_manager_test_config.h from
+# shipping_manager_test_config.yaml.
+cobalt_config_header("generate_shipping_manager_test_config") {
+  input_yaml = "shipping_manager_test_config.yaml"
+  output_file = "shipping_manager_test_config.h"
+}
+
+
 source_set("unittests") {
   testonly = true
 
@@ -74,9 +82,10 @@
     "encoder_test.cc",
     "encoder_test_config.h",
     "envelope_maker_test.cc",
-    "envelope_maker_test_config.h"
+    "envelope_maker_test_config.h",
     "send_retryer_test.cc",
     "shipping_manager_test.cc",
+    "shipping_manager_test_config.h",
     "shuffler_client_test.cc",
     "system_data_test.cc",
   ]
@@ -85,6 +94,7 @@
     ":encoder",
     ":generate_encoder_test_config",
     ":generate_envelope_maker_test_config",
+    ":generate_shipping_manager_test_config",
     "//third_party/gflags",
     "//third_party/gtest",
 
diff --git a/encoder/CMakeLists.txt b/encoder/CMakeLists.txt
index 66e2cfe..899008e 100644
--- a/encoder/CMakeLists.txt
+++ b/encoder/CMakeLists.txt
@@ -23,6 +23,10 @@
 generate_test_config_h(${CMAKE_CURRENT_SOURCE_DIR}/envelope_maker_test_config.yaml
       ${ENVELOPE_MAKER_TEST_CONFIG_H} 1 1 "cobalt_config_base64")
 
+set(SHIPPING_MANAGER_TEST_CONFIG_H "${CMAKE_CURRENT_BINARY_DIR}/shipping_manager_test_config.h")
+generate_test_config_h(${CMAKE_CURRENT_SOURCE_DIR}/shipping_manager_test_config.yaml
+      ${SHIPPING_MANAGER_TEST_CONFIG_H} 1 1 "cobalt_config_base64")
+
 # client_secret library
 add_library(client_secret client_secret.cc)
 target_link_libraries(client_secret cobalt_crypto)
@@ -53,7 +57,9 @@
                ${ENCODER_TEST_CONFIG_H}
                envelope_maker_test.cc
                ${ENVELOPE_MAKER_TEST_CONFIG_H}
-               send_retryer_test.cc shipping_manager_test.cc
+               send_retryer_test.cc
+               shipping_manager_test.cc
+               ${SHIPPING_MANAGER_TEST_CONFIG_H}
                shuffler_client_test.cc system_data_test.cc)
 target_link_libraries(encoder_tests
                       client_secret
diff --git a/encoder/shipping_manager_test.cc b/encoder/shipping_manager_test.cc
index 768833f..a678edf 100644
--- a/encoder/shipping_manager_test.cc
+++ b/encoder/shipping_manager_test.cc
@@ -12,26 +12,32 @@
 
 #include "./gtest.h"
 #include "./logging.h"
-#include "config/config_text_parser.h"
+#include "config/client_config.h"
 #include "encoder/client_secret.h"
 #include "encoder/encoder.h"
 #include "encoder/project_context.h"
+// Generated from shipping_manager_test_config.yaml
+#include "encoder/shipping_manager_test_config.h"
 #include "third_party/gflags/include/gflags/gflags.h"
 
 namespace cobalt {
 namespace encoder {
 
-using config::EncodingRegistry;
-using config::MetricRegistry;
+using config::ClientConfig;
 using send_retryer::CancelHandle;
 using send_retryer::SendRetryer;
 
 namespace {
 
+// These values must match the values specified in the invocation of
+// generate_test_config_h() in CMakeLists.txt. and in the invocation of
+// cobalt_config_header("generate_shipping_manager_test_config") in BUILD.gn.
 const uint32_t kCustomerId = 1;
 const uint32_t kProjectId = 1;
+
 const uint32_t kMetricId = 1;
 const uint32_t kEncodingConfigId = 1;
+
 const size_t kNoOpEncodingByteOverhead = 30;
 const size_t kMaxBytesPerObservation = 50;
 const size_t kMaxBytesPerEnvelope = 200;
@@ -45,52 +51,21 @@
 const std::chrono::seconds kDeadlinePerSendAttempt(60);
 const std::chrono::seconds kMaxSeconds = ShippingManager::kMaxSeconds;
 
-const char* kMetricConfigText = R"(
-# Metric 1 has one string part.
-element {
-  customer_id: 1
-  project_id: 1
-  id: 1
-  time_zone_policy: UTC
-  parts {
-    key: "Part1"
-    value {
-    }
-  }
-}
-)";
-
-const char* kEncodingConfigText = R"(
-# EncodingConfig 2 is NoOp.
-element {
-  customer_id: 1
-  project_id: 1
-  id: 1
-  no_op_encoding {
-  }
-}
-
-)";
-
-// Returns a ProjectContext obtained by parsing the above configuration
-// text strings.
+// Returns a ProjectContext obtained by parsing the configuration specified
+// in shipping_manager_test_config.yaml
 std::shared_ptr<ProjectContext> GetTestProject() {
-  // Parse the metric config string
-  auto metric_parse_result =
-      config::FromString<RegisteredMetrics>(kMetricConfigText, nullptr);
-  EXPECT_EQ(config::kOK, metric_parse_result.second);
-  std::shared_ptr<MetricRegistry> metric_registry(
-      metric_parse_result.first.release());
-
-  // Parse the encoding config string
-  auto encoding_parse_result =
-      config::FromString<RegisteredEncodings>(kEncodingConfigText, nullptr);
-  EXPECT_EQ(config::kOK, encoding_parse_result.second);
-  std::shared_ptr<EncodingRegistry> encoding_registry(
-      encoding_parse_result.first.release());
+  // Parse the base64-encoded, serialized CobaltConfig in
+  // shipping_manager_test_config.h. This is generated from
+  // shipping_manager_test_config.yaml. Edit that yaml file to make changes. The
+  // variable name below, |cobalt_config_base64|, must match what is
+  // specified in the build files.
+  std::unique_ptr<ClientConfig> client_config =
+      ClientConfig::CreateFromCobaltConfigBase64(cobalt_config_base64);
+  EXPECT_NE(nullptr, client_config);
 
   return std::shared_ptr<ProjectContext>(new ProjectContext(
-      kCustomerId, kProjectId, metric_registry, encoding_registry));
+      kCustomerId, kProjectId,
+      std::shared_ptr<ClientConfig>(client_config.release())));
 }
 
 class FakeSystemData : public SystemDataInterface {
diff --git a/encoder/shipping_manager_test_config.yaml b/encoder/shipping_manager_test_config.yaml
new file mode 100644
index 0000000..0281e44
--- /dev/null
+++ b/encoder/shipping_manager_test_config.yaml
@@ -0,0 +1,30 @@
+# Copyright 2018 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+################################################################################
+# This file contains the Metrics and EncodingConfigs used in
+# shipping_manager_test.cc
+#
+# It is compiled into shipping_manager_test_config.h which is included into the
+# test.
+################################################################################
+
+################################################################################
+#  Metrics
+################################################################################
+metric_configs:
+# Metric 1 has one string part, and local time_zone_policy.
+- id: 1
+  time_zone_policy: UTC
+  parts:
+    "Part1":
+
+################################################################################
+#  EncodingConfigs
+################################################################################
+encoding_configs:
+
+# EncodingConfig 1 is the NoOp encoding.
+- id: 1
+  no_op_encoding: