Define updateBaseConfiguration and updateDeviceInfo in BaseApiHandler

BUG:24267885
Change-Id: I8c885a2910eb152559ba59e51cc7df2ab85b3c58
Reviewed-on: https://weave-review.googlesource.com/1253
Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/libweave/examples/ubuntu/build.sh b/libweave/examples/ubuntu/build.sh
index ea7499f..ae8148c 100755
--- a/libweave/examples/ubuntu/build.sh
+++ b/libweave/examples/ubuntu/build.sh
@@ -23,6 +23,6 @@
 ninja -j $CORES -C out/${BUILD_CONFIG} $BUILD_TARGET || exit 1
 
 if [[ $BUILD_TARGET == *"libweave_testrunner"* ]]; then
-  out/${BUILD_CONFIG}/libweave_testrunner || exit 1
-  out/${BUILD_CONFIG}/libweave_exports_testrunner || exit 1
+  out/${BUILD_CONFIG}/libweave_testrunner --gtest_break_on_failure || exit 1
+  out/${BUILD_CONFIG}/libweave_exports_testrunner --gtest_break_on_failure || exit 1
 fi
diff --git a/libweave/examples/ubuntu/main.cc b/libweave/examples/ubuntu/main.cc
index b53e6c5..12a00d7 100644
--- a/libweave/examples/ubuntu/main.cc
+++ b/libweave/examples/ubuntu/main.cc
@@ -34,12 +34,7 @@
 class CommandHandler {
  public:
   explicit CommandHandler(weave::Device* device) : device_{device} {
-    device->AddCommandDefinitions(R"({
-      "base": {
-        "updateBaseConfiguration": {},
-        "identify": {},
-        "updateDeviceInfo": {}
-      },
+    device->AddCommandDefinitionsFromJson(R"({
       "_greeter": {
         "_greet": {
           "minimalRole": "user",
@@ -62,16 +57,16 @@
       }
     })");
 
-    device->AddStateDefinitions(R"({
+    device->AddStateDefinitionsFromJson(R"({
       "_greeter": {"_greetings_counter":"integer"},
       "_ledflasher": {"_leds": {"items": "boolean"}}
     })");
 
-    device->SetState(R"({
+    device->SetStateFromJson(R"({
       "_greeter": {"_greetings_counter": 0},
     "_ledflasher":{"_leds": [false, false, false]}
     })",
-                     nullptr);
+                             nullptr);
 
     device->AddCommandHandler("_greeter._greet",
                               base::Bind(&CommandHandler::OnGreetCommand,
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index c673fcb..eacd959 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -48,7 +48,7 @@
   // Adds provided commands definitions. Can be called multiple times with
   // condition that definitions do not conflict.
   // Invalid value is fatal.
-  virtual void AddCommandDefinitions(const std::string& json) = 0;
+  virtual void AddCommandDefinitionsFromJson(const std::string& json) = 0;
   virtual void AddCommandDefinitions(const base::DictionaryValue& dict) = 0;
 
   // Callback type for AddCommandHandler.
@@ -78,13 +78,13 @@
   // Adds provided state definitions. Can be called multiple times with
   // condition that definitions do not conflict.
   // Invalid value is fatal.
-  virtual void AddStateDefinitions(const std::string& json) = 0;
+  virtual void AddStateDefinitionsFromJson(const std::string& json) = 0;
   virtual void AddStateDefinitions(const base::DictionaryValue& dict) = 0;
 
   // Updates multiple properties of the state.
   // It's recommended to call this to initialize state defined by
   // AddStateDefinitions.
-  virtual bool SetState(const std::string& json, ErrorPtr* error) = 0;
+  virtual bool SetStateFromJson(const std::string& json, ErrorPtr* error) = 0;
   virtual bool SetState(const base::DictionaryValue& dict, ErrorPtr* error) = 0;
 
   // Returns value of the single property.
diff --git a/libweave/include/weave/test/mock_device.h b/libweave/include/weave/test/mock_device.h
index de6f01c..98fc6c2 100644
--- a/libweave/include/weave/test/mock_device.h
+++ b/libweave/include/weave/test/mock_device.h
@@ -21,7 +21,7 @@
   MOCK_CONST_METHOD0(GetSettings, const Settings&());
   MOCK_METHOD1(AddSettingsChangedCallback,
                void(const SettingsChangedCallback& callback));
-  MOCK_METHOD1(AddCommandDefinitions, void(const std::string&));
+  MOCK_METHOD1(AddCommandDefinitionsFromJson, void(const std::string&));
   MOCK_METHOD1(AddCommandDefinitions, void(const base::DictionaryValue&));
   MOCK_METHOD2(AddCommandHandler,
                void(const std::string&, const CommandHandlerCallback&));
@@ -29,9 +29,9 @@
                bool(const base::DictionaryValue&, std::string*, ErrorPtr*));
   MOCK_METHOD1(FindCommand, Command*(const std::string&));
   MOCK_METHOD1(AddStateChangedCallback, void(const base::Closure& callback));
-  MOCK_METHOD1(AddStateDefinitions, void(const std::string&));
+  MOCK_METHOD1(AddStateDefinitionsFromJson, void(const std::string&));
   MOCK_METHOD1(AddStateDefinitions, void(const base::DictionaryValue&));
-  MOCK_METHOD2(SetState, bool(const std::string&, ErrorPtr*));
+  MOCK_METHOD2(SetStateFromJson, bool(const std::string&, ErrorPtr*));
   MOCK_METHOD2(SetState, bool(const base::DictionaryValue&, ErrorPtr*));
   MOCK_CONST_METHOD1(MockGetStateProperty,
                      base::Value*(const std::string& name));
diff --git a/libweave/src/base_api_handler.cc b/libweave/src/base_api_handler.cc
index e63d8cb..8b6bf05 100644
--- a/libweave/src/base_api_handler.cc
+++ b/libweave/src/base_api_handler.cc
@@ -30,6 +30,13 @@
                                       settings.firmware_version);
   CHECK(device_->SetStateProperties(state, nullptr));
 
+  device->AddCommandDefinitionsFromJson(R"({
+    "base": {
+      "updateBaseConfiguration": {},
+      "updateDeviceInfo": {}
+    }
+  })");
+
   device_->AddCommandHandler(
       "base.updateBaseConfiguration",
       base::Bind(&BaseApiHandler::UpdateBaseConfiguration,
diff --git a/libweave/src/base_api_handler_unittest.cc b/libweave/src/base_api_handler_unittest.cc
index 8d30619..8de1169 100644
--- a/libweave/src/base_api_handler_unittest.cc
+++ b/libweave/src/base_api_handler_unittest.cc
@@ -34,75 +34,25 @@
         .WillRepeatedly(Return(true));
 
     command_manager_ = std::make_shared<CommandManager>();
+    command_manager_->Startup();
+
     state_manager_ = std::make_shared<StateManager>(&mock_state_change_queue_);
+    state_manager_->Startup();
 
     EXPECT_CALL(device_, SetStateProperties(_, _))
         .WillRepeatedly(
             Invoke(state_manager_.get(), &StateManager::SetProperties));
+    EXPECT_CALL(device_, AddCommandDefinitionsFromJson(_))
+        .WillRepeatedly(Invoke([this](const std::string& json) {
+          EXPECT_TRUE(command_manager_->LoadCommands(json, nullptr));
+        }));
+
     EXPECT_CALL(device_, AddCommandHandler(AnyOf("base.updateBaseConfiguration",
                                                  "base.updateDeviceInfo"),
                                            _))
         .WillRepeatedly(
             Invoke(command_manager_.get(), &CommandManager::AddCommandHandler));
 
-    auto state_definition = test::CreateDictionaryValue(R"({
-      'base': {
-        'firmwareVersion': 'string',
-        'localDiscoveryEnabled': 'boolean',
-        'localAnonymousAccessMaxRole': [ 'none', 'viewer', 'user' ],
-        'localPairingEnabled': 'boolean',
-        'network': {
-          'properties': {
-            'name': 'string'
-          }
-        }
-      }
-    })");
-    auto state_defaults = test::CreateDictionaryValue(R"({
-      'base': {
-        'firmwareVersion': '123123',
-        'localDiscoveryEnabled': false,
-        'localAnonymousAccessMaxRole': 'none',
-        'localPairingEnabled': false
-      }
-    })");
-    ASSERT_TRUE(
-        state_manager_->LoadStateDefinition(*state_definition, nullptr));
-    ASSERT_TRUE(state_manager_->LoadStateDefaults(*state_defaults, nullptr));
-
-    auto base_commands = test::CreateDictionaryValue(R"({
-      'base': {
-        'updateBaseConfiguration': {
-          'parameters': {
-            'localDiscoveryEnabled': 'boolean',
-            'localAnonymousAccessMaxRole': [ 'none', 'viewer', 'user' ],
-            'localPairingEnabled': 'boolean'
-           },
-           'results': {}
-        },
-        'updateDeviceInfo': {
-          'parameters': {
-            'description': 'string',
-            'name': {
-              'type': 'string',
-              'minLength': 1
-            },
-            'location': 'string'
-          },
-          'results': {}
-        }
-      }
-    })");
-    EXPECT_TRUE(command_manager_->LoadBaseCommands(*base_commands, nullptr));
-
-    auto handled_commands = test::CreateDictionaryValue(R"({
-      'base': {
-        'updateBaseConfiguration': {},
-        'updateDeviceInfo': {}
-      }
-    })");
-    EXPECT_TRUE(command_manager_->LoadCommands(*handled_commands, nullptr));
-
     std::unique_ptr<Config> config{new Config{&config_store_}};
     config->Load();
     dev_reg_.reset(new DeviceRegistrationInfo(command_manager_, state_manager_,
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index 865825f..0f81a2e 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -92,7 +92,7 @@
   device_info_->AddGcdStateChangedCallback(callback);
 }
 
-void DeviceManager::AddCommandDefinitions(const std::string& json) {
+void DeviceManager::AddCommandDefinitionsFromJson(const std::string& json) {
   CHECK(command_manager_->LoadCommands(json, nullptr));
 }
 
@@ -119,7 +119,7 @@
   state_manager_->AddChangedCallback(callback);
 }
 
-void DeviceManager::AddStateDefinitions(const std::string& json) {
+void DeviceManager::AddStateDefinitionsFromJson(const std::string& json) {
   CHECK(state_manager_->LoadStateDefinition(json, nullptr));
 }
 
@@ -127,7 +127,7 @@
   CHECK(state_manager_->LoadStateDefinition(dict, nullptr));
 }
 
-bool DeviceManager::SetState(const std::string& json, ErrorPtr* error) {
+bool DeviceManager::SetStateFromJson(const std::string& json, ErrorPtr* error) {
   return state_manager_->LoadStateDefaults(json, error);
 }
 
diff --git a/libweave/src/device_manager.h b/libweave/src/device_manager.h
index 516e5a4..7161dc5 100644
--- a/libweave/src/device_manager.h
+++ b/libweave/src/device_manager.h
@@ -37,7 +37,7 @@
   const Settings& GetSettings() const override;
   void AddSettingsChangedCallback(
       const SettingsChangedCallback& callback) override;
-  void AddCommandDefinitions(const std::string& json) override;
+  void AddCommandDefinitionsFromJson(const std::string& json) override;
   void AddCommandDefinitions(const base::DictionaryValue& dict) override;
   bool AddCommand(const base::DictionaryValue& command,
                   std::string* id,
@@ -46,9 +46,9 @@
   void AddCommandHandler(const std::string& command_name,
                          const CommandHandlerCallback& callback) override;
   void AddStateChangedCallback(const base::Closure& callback) override;
-  void AddStateDefinitions(const std::string& json) override;
+  void AddStateDefinitionsFromJson(const std::string& json) override;
   void AddStateDefinitions(const base::DictionaryValue& dict) override;
-  bool SetState(const std::string& json, ErrorPtr* error) override;
+  bool SetStateFromJson(const std::string& json, ErrorPtr* error) override;
   bool SetState(const base::DictionaryValue& dict, ErrorPtr* error) override;
   bool SetStateProperties(const base::DictionaryValue& property_set,
                           ErrorPtr* error) override;
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index b794fd6..1b926f6 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -227,9 +227,9 @@
                                     &http_client_, &network_, &dns_sd_,
                                     &http_server_, &wifi_, &bluetooth_);
 
-    device_->AddCommandDefinitions(kCommandDefs);
-    device_->AddStateDefinitions(kStateDefs);
-    device_->SetState(kStateDefaults, nullptr);
+    device_->AddCommandDefinitionsFromJson(kCommandDefs);
+    device_->AddStateDefinitionsFromJson(kStateDefs);
+    device_->SetStateFromJson(kStateDefaults, nullptr);
 
     for (const auto& cb : http_server_changed_cb_)
       cb.Run(http_server_);
@@ -285,7 +285,7 @@
   device_ = weave::Device::Create(&config_store_, &task_runner_, &http_client_,
                                   &network_, &dns_sd_, &http_server_, nullptr,
                                   &bluetooth_);
-  device_->AddCommandDefinitions(kCommandDefs);
+  device_->AddCommandDefinitionsFromJson(kCommandDefs);
 
   for (const auto& cb : http_server_changed_cb_)
     cb.Run(http_server_);