libweave: Remove loading/saving of config and state from libweave

External code should provide this functionality.

BUG=brillo:1257,brillo:1253
TEST=`FEATURES=test emerge-gizmo libweave buffet`

Change-Id: I95dcaf90cfd49dfb307fef4e9df12f12e3403d55
Reviewed-on: https://chromium-review.googlesource.com/293916
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/libweave/src/config_unittest.cc b/libweave/src/config_unittest.cc
index 0ffad43..be24e00 100644
--- a/libweave/src/config_unittest.cc
+++ b/libweave/src/config_unittest.cc
@@ -9,11 +9,12 @@
 #include <base/bind.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
+#include <weave/mock_config_store.h>
 
 #include "libweave/src/commands/unittest_utils.h"
-#include "libweave/src/storage_impls.h"
 
 using testing::_;
+using testing::Invoke;
 
 namespace weave {
 
@@ -22,18 +23,14 @@
   void SetUp() override {
     EXPECT_CALL(*this, OnConfigChanged(_))
         .Times(1);  // Called from AddOnChangedCallback
-
-    std::unique_ptr<StorageInterface> storage{new MemStorage};
-    storage_ = storage.get();
-    config_.reset(new Config{std::move(storage)});
-
+    config_.reset(new Config{&config_store_});
     config_->AddOnChangedCallback(
         base::Bind(&ConfigTest::OnConfigChanged, base::Unretained(this)));
   }
 
   MOCK_METHOD1(OnConfigChanged, void(const Settings&));
 
-  StorageInterface* storage_{nullptr};
+  unittests::MockConfigStore config_store_;
   std::unique_ptr<Config> config_;
   const Config default_{nullptr};
 };
@@ -73,125 +70,28 @@
   EXPECT_EQ("", config_->last_configured_ssid());
 }
 
-TEST_F(ConfigTest, LoadConfig) {
-  chromeos::KeyValueStore config_store;
-  config_store.SetString("client_id", "conf_client_id");
-  config_store.SetString("client_secret", "conf_client_secret");
-  config_store.SetString("api_key", "conf_api_key");
-  config_store.SetString("oauth_url", "conf_oauth_url");
-  config_store.SetString("service_url", "conf_service_url");
-  config_store.SetString("oem_name", "conf_oem_name");
-  config_store.SetString("model_name", "conf_model_name");
-  config_store.SetString("model_id", "ABCDE");
-  config_store.SetString("polling_period_ms", "12345");
-  config_store.SetString("backup_polling_period_ms", "6589");
-  config_store.SetBoolean("wifi_auto_setup_enabled", false);
-  config_store.SetBoolean("ble_setup_enabled", true);
-  config_store.SetString("pairing_modes",
-                         "pinCode,embeddedCode,ultrasound32,audible32");
-  config_store.SetString("embedded_code", "1234");
-  config_store.SetString("name", "conf_name");
-  config_store.SetString("description", "conf_description");
-  config_store.SetString("location", "conf_location");
-  config_store.SetString("local_anonymous_access_role", "user");
-  config_store.SetBoolean("local_pairing_enabled", false);
-  config_store.SetBoolean("local_discovery_enabled", false);
-
-  // Following will be ignored.
-  config_store.SetString("device_kind", "conf_device_kind");
-  config_store.SetString("device_id", "conf_device_id");
-  config_store.SetString("refresh_token", "conf_refresh_token");
-  config_store.SetString("robot_account", "conf_robot_account");
-  config_store.SetString("last_configured_ssid", "conf_last_configured_ssid");
-
-  EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
-  config_->Load(config_store);
-
-  EXPECT_EQ("conf_client_id", config_->client_id());
-  EXPECT_EQ("conf_client_secret", config_->client_secret());
-  EXPECT_EQ("conf_api_key", config_->api_key());
-  EXPECT_EQ("conf_oauth_url", config_->oauth_url());
-  EXPECT_EQ("conf_service_url", config_->service_url());
-  EXPECT_EQ("conf_oem_name", config_->oem_name());
-  EXPECT_EQ("conf_model_name", config_->model_name());
-  EXPECT_EQ("ABCDE", config_->model_id());
-  EXPECT_EQ(base::TimeDelta::FromMilliseconds(12345),
-            config_->polling_period());
-  EXPECT_EQ(base::TimeDelta::FromMilliseconds(6589),
-            config_->backup_polling_period());
-  EXPECT_FALSE(config_->wifi_auto_setup_enabled());
-  EXPECT_TRUE(config_->ble_setup_enabled());
-  std::set<PairingType> pairing_types{
-      PairingType::kPinCode, PairingType::kEmbeddedCode,
-      PairingType::kUltrasound32, PairingType::kAudible32};
-  EXPECT_EQ(pairing_types, config_->pairing_modes());
-  EXPECT_EQ("1234", config_->embedded_code());
-  EXPECT_EQ("conf_name", config_->name());
-  EXPECT_EQ("conf_description", config_->description());
-  EXPECT_EQ("conf_location", config_->location());
-  EXPECT_EQ("user", config_->local_anonymous_access_role());
-  EXPECT_FALSE(config_->local_pairing_enabled());
-  EXPECT_FALSE(config_->local_discovery_enabled());
-
-  // Not from config.
-  EXPECT_EQ(default_.device_id(), config_->device_id());
-  EXPECT_EQ(default_.refresh_token(), config_->refresh_token());
-  EXPECT_EQ(default_.robot_account(), config_->robot_account());
-  EXPECT_EQ(default_.last_configured_ssid(), config_->last_configured_ssid());
-
-  // Nothing should be saved yet.
-  EXPECT_JSON_EQ("{}", *storage_->Load());
-
-  Config::Transaction change{config_.get()};
-  EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
-  change.Commit();
-
-  auto expected = R"({
-    'api_key': 'conf_api_key',
-    'client_id': 'conf_client_id',
-    'client_secret': 'conf_client_secret',
-    'description': 'conf_description',
-    'device_id': '',
-    'local_anonymous_access_role': 'user',
-    'local_discovery_enabled': false,
-    'local_pairing_enabled': false,
-    'location': 'conf_location',
-    'name': 'conf_name',
-    'oauth_url': 'conf_oauth_url',
-    'refresh_token': '',
-    'robot_account': '',
-    'last_configured_ssid': '',
-    'service_url': 'conf_service_url'
-  })";
-  EXPECT_JSON_EQ(expected, *storage_->Load());
-}
-
 TEST_F(ConfigTest, LoadState) {
   auto state = R"({
-    'api_key': 'state_api_key',
-    'client_id': 'state_client_id',
-    'client_secret': 'state_client_secret',
-    'description': 'state_description',
-    'device_id': 'state_device_id',
-    'local_anonymous_access_role': 'user',
-    'local_discovery_enabled': false,
-    'local_pairing_enabled': false,
-    'location': 'state_location',
-    'name': 'state_name',
-    'oauth_url': 'state_oauth_url',
-    'refresh_token': 'state_refresh_token',
-    'robot_account': 'state_robot_account',
-    'last_configured_ssid': 'state_last_configured_ssid',
-    'service_url': 'state_service_url'
+    "api_key": "state_api_key",
+    "client_id": "state_client_id",
+    "client_secret": "state_client_secret",
+    "description": "state_description",
+    "device_id": "state_device_id",
+    "local_anonymous_access_role": "user",
+    "local_discovery_enabled": false,
+    "local_pairing_enabled": false,
+    "location": "state_location",
+    "name": "state_name",
+    "oauth_url": "state_oauth_url",
+    "refresh_token": "state_refresh_token",
+    "robot_account": "state_robot_account",
+    "last_configured_ssid": "state_last_configured_ssid",
+    "service_url": "state_service_url"
   })";
-  storage_->Save(*unittests::CreateDictionaryValue(state));
+  EXPECT_CALL(config_store_, LoadSettings()).WillOnce(Return(state));
 
-  chromeos::KeyValueStore config_store;
   EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
-  config_->Load(config_store);
-
-  // Clear storage.
-  storage_->Save(base::DictionaryValue());
+  config_->Load();
 
   EXPECT_EQ("state_client_id", config_->client_id());
   EXPECT_EQ("state_client_secret", config_->client_secret());
@@ -218,15 +118,6 @@
   EXPECT_EQ("state_refresh_token", config_->refresh_token());
   EXPECT_EQ("state_robot_account", config_->robot_account());
   EXPECT_EQ("state_last_configured_ssid", config_->last_configured_ssid());
-
-  // Nothing should be saved yet.
-  EXPECT_JSON_EQ("{}", *storage_->Load());
-
-  Config::Transaction change{config_.get()};
-  EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
-  change.Commit();
-
-  EXPECT_JSON_EQ(state, *storage_->Load());
 }
 
 TEST_F(ConfigTest, Setters) {
@@ -290,25 +181,31 @@
   EXPECT_EQ("set_last_configured_ssid", config_->last_configured_ssid());
 
   EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
-  change.Commit();
 
-  auto expected = R"({
-    'api_key': 'set_api_key',
-    'client_id': 'set_client_id',
-    'client_secret': 'set_client_secret',
-    'description': 'set_description',
-    'device_id': 'set_id',
-    'local_anonymous_access_role': 'user',
-    'local_discovery_enabled': true,
-    'local_pairing_enabled': true,
-    'location': 'set_location',
-    'name': 'set_name',
-    'oauth_url': 'set_oauth_url',
-    'refresh_token': 'set_token',
-    'robot_account': 'set_account',
-    'last_configured_ssid': 'set_last_configured_ssid',
-    'service_url': 'set_service_url'
-  })";
-  EXPECT_JSON_EQ(expected, *storage_->Load());
+  EXPECT_CALL(config_store_, SaveSettings(_))
+      .WillOnce(Invoke([](const std::string& json) {
+        auto expected = R"({
+          'api_key': 'set_api_key',
+          'client_id': 'set_client_id',
+          'client_secret': 'set_client_secret',
+          'description': 'set_description',
+          'device_id': 'set_id',
+          'local_anonymous_access_role': 'user',
+          'local_discovery_enabled': true,
+          'local_pairing_enabled': true,
+          'location': 'set_location',
+          'name': 'set_name',
+          'oauth_url': 'set_oauth_url',
+          'refresh_token': 'set_token',
+          'robot_account': 'set_account',
+          'last_configured_ssid': 'set_last_configured_ssid',
+          'service_url': 'set_service_url'
+        })";
+        EXPECT_JSON_EQ(expected, *unittests::CreateValue(json));
+      }));
+  EXPECT_CALL(config_store_, OnSettingsChanged(_)).Times(1);
+
+  change.Commit();
 }
+
 }  // namespace weave