buffet: Rework buffet configuration

Manufacturer supplied fields will come from the buffet configuration
file with good defaults provided by buffet itself.  This includes
a few default values for user supplied fields.

User supplied and other per device instance state will be stored in
a state file as before.

Keeping these fields separate greatly simplifies reasoning about
adding configuration settings to buffet.

BUG=brillo:658
TEST=unittests, tendo_experimental passes
CQ-DEPEND=CL:262292

Change-Id: Ib74721b9c99d11c189042aa78cc43a076072de32
Reviewed-on: https://chromium-review.googlesource.com/262296
Tested-by: Christopher Wiley <wiley@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: Anton Muhin <antonm@chromium.org>
Commit-Queue: Christopher Wiley <wiley@chromium.org>
diff --git a/buffet/device_registration_info_unittest.cc b/buffet/device_registration_info_unittest.cc
index 0823e77..dfb61cc 100644
--- a/buffet/device_registration_info_unittest.cc
+++ b/buffet/device_registration_info_unittest.cc
@@ -59,20 +59,12 @@
 
 // Fill in the storage with default environment information (URLs, etc).
 void InitDefaultStorage(base::DictionaryValue* data) {
-  data->SetString(storage_keys::kClientId, test_data::kClientId);
-  data->SetString(storage_keys::kClientSecret, test_data::kClientSecret);
-  data->SetString(storage_keys::kApiKey, test_data::kApiKey);
   data->SetString(storage_keys::kRefreshToken, "");
   data->SetString(storage_keys::kDeviceId, "");
-  data->SetString(storage_keys::kOAuthURL, test_data::kOAuthURL);
-  data->SetString(storage_keys::kServiceURL, test_data::kServiceURL);
   data->SetString(storage_keys::kRobotAccount, "");
-  data->SetString(storage_keys::kDeviceKind, "");
-  data->SetString(storage_keys::kName, "");
   data->SetString(storage_keys::kDisplayName, "");
   data->SetString(storage_keys::kDescription, "");
   data->SetString(storage_keys::kLocation, "");
-  data->SetString(storage_keys::kModelId, "");
 }
 
 // Add the test device registration information.
@@ -198,25 +190,26 @@
     transport_ = std::make_shared<chromeos::http::fake::Transport>();
     command_manager_ = std::make_shared<CommandManager>();
     state_manager_ = std::make_shared<StateManager>(&mock_state_change_queue_);
-    std::unique_ptr<chromeos::KeyValueStore> config_store{
-      new chromeos::KeyValueStore};
-    config_store->SetString("client_id", test_data::kClientId);
-    config_store->SetString("client_secret", test_data::kClientSecret);
-    config_store->SetString("api_key", test_data::kApiKey);
-    config_store->SetString("device_kind",  "vendor");
-    config_store->SetString("name",  "coffee_pot");
-    config_store->SetString("display_name",  "Coffee Pot");
-    config_store->SetString("description",  "Easy to clean");
-    config_store->SetString("location",  "Kitchen");
-    config_store->SetString("model_id", "AAA");
-    config_store->SetString("oauth_url", test_data::kOAuthURL);
-    config_store->SetString("service_url", test_data::kServiceURL);
+    chromeos::KeyValueStore config_store;
+    config_store.SetString("client_id", test_data::kClientId);
+    config_store.SetString("client_secret", test_data::kClientSecret);
+    config_store.SetString("api_key", test_data::kApiKey);
+    config_store.SetString("device_kind",  "vendor");
+    config_store.SetString("name",  "coffee_pot");
+    config_store.SetString("default_display_name",  "Coffee Pot");
+    config_store.SetString("default_description",  "Easy to clean");
+    config_store.SetString("default_location",  "Kitchen");
+    config_store.SetString("model_id", "AAA");
+    config_store.SetString("oauth_url", test_data::kOAuthURL);
+    config_store.SetString("service_url", test_data::kServiceURL);
+    std::unique_ptr<BuffetConfig> config{new BuffetConfig};
+    config->Load(config_store);
     auto mock_callback = base::Bind(
         &DeviceRegistrationInfoTest::OnRegistrationStatusChange,
         base::Unretained(this));
     dev_reg_ = std::unique_ptr<DeviceRegistrationInfo>(
         new DeviceRegistrationInfo(command_manager_, state_manager_,
-                                   std::move(config_store),
+                                   std::move(config),
                                    transport_, storage_,
                                    mock_callback));
   }
@@ -253,20 +246,12 @@
 
 TEST_F(DeviceRegistrationInfoTest, VerifySave) {
   base::DictionaryValue data;
-  data.SetString(storage_keys::kClientId, "a");
-  data.SetString(storage_keys::kClientSecret, "b");
-  data.SetString(storage_keys::kApiKey, "c");
   data.SetString(storage_keys::kRefreshToken, "d");
   data.SetString(storage_keys::kDeviceId, "e");
-  data.SetString(storage_keys::kOAuthURL, "f");
-  data.SetString(storage_keys::kServiceURL, "g");
   data.SetString(storage_keys::kRobotAccount, "h");
-  data.SetString(storage_keys::kDeviceKind, "i");
-  data.SetString(storage_keys::kName, "j");
   data.SetString(storage_keys::kDisplayName, "k");
   data.SetString(storage_keys::kDescription, "l");
   data.SetString(storage_keys::kLocation, "m");
-  data.SetString(storage_keys::kModelId, "n");
 
   storage_->Save(&data);
 
@@ -496,22 +481,12 @@
   base::DictionaryValue* dict = nullptr;
   EXPECT_TRUE(storage_data->GetAsDictionary(&dict));
   std::string value;
-  EXPECT_TRUE(dict->GetString(storage_keys::kApiKey, &value));
-  EXPECT_EQ(test_data::kApiKey, value);
-  EXPECT_TRUE(dict->GetString(storage_keys::kClientId, &value));
-  EXPECT_EQ(test_data::kClientId, value);
-  EXPECT_TRUE(dict->GetString(storage_keys::kClientSecret, &value));
-  EXPECT_EQ(test_data::kClientSecret, value);
   EXPECT_TRUE(dict->GetString(storage_keys::kDeviceId, &value));
   EXPECT_EQ(test_data::kDeviceId, value);
-  EXPECT_TRUE(dict->GetString(storage_keys::kOAuthURL, &value));
-  EXPECT_EQ(test_data::kOAuthURL, value);
   EXPECT_TRUE(dict->GetString(storage_keys::kRefreshToken, &value));
   EXPECT_EQ(test_data::kRefreshToken, value);
   EXPECT_TRUE(dict->GetString(storage_keys::kRobotAccount, &value));
   EXPECT_EQ(test_data::kRobotAccountEmail, value);
-  EXPECT_TRUE(dict->GetString(storage_keys::kServiceURL, &value));
-  EXPECT_EQ(test_data::kServiceURL, value);
 }
 
 TEST_F(DeviceRegistrationInfoTest, OOBRegistrationStatus) {