Remove category from Commands definitions BUG:24267885 Change-Id: If60064eaf7620a32156edf572d8ce887f9abad04 Reviewed-on: https://weave-review.googlesource.com/1234 Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/libweave/examples/ubuntu/file_config_store.cc b/libweave/examples/ubuntu/file_config_store.cc index d28f817..d3b3b43 100644 --- a/libweave/examples/ubuntu/file_config_store.cc +++ b/libweave/examples/ubuntu/file_config_store.cc
@@ -60,8 +60,8 @@ str << settings; } -std::map<std::string, std::string> FileConfigStore::LoadCommandDefs() { - return {{kCategory, R"({ +std::vector<std::string> FileConfigStore::LoadCommandDefs() { + return {R"({ "base": { "updateBaseConfiguration": {}, "identify": {}, @@ -74,7 +74,7 @@ "results": { "_greeting": "string" } } } - })"}}; + })"}; } std::vector<std::string> FileConfigStore::LoadStateDefs() {
diff --git a/libweave/examples/ubuntu/file_config_store.h b/libweave/examples/ubuntu/file_config_store.h index 53e56f1..926576f 100644 --- a/libweave/examples/ubuntu/file_config_store.h +++ b/libweave/examples/ubuntu/file_config_store.h
@@ -21,7 +21,7 @@ bool LoadDefaults(Settings* settings) override; std::string LoadSettings() override; void SaveSettings(const std::string& settings) override; - std::map<std::string, std::string> LoadCommandDefs() override; + std::vector<std::string> LoadCommandDefs() override; std::vector<std::string> LoadStateDefs() override; std::vector<std::string> LoadStateDefaults() override;
diff --git a/libweave/include/weave/command.h b/libweave/include/weave/command.h index e3d35a7..911da1e 100644 --- a/libweave/include/weave/command.h +++ b/libweave/include/weave/command.h
@@ -52,9 +52,6 @@ // Returns the full name of the command. virtual const std::string& GetName() const = 0; - // Returns the command category. - virtual const std::string& GetCategory() const = 0; - // Returns the command status. virtual CommandStatus GetStatus() const = 0;
diff --git a/libweave/include/weave/provider/config_store.h b/libweave/include/weave/provider/config_store.h index 64975a7..aa7c5e5 100644 --- a/libweave/include/weave/provider/config_store.h +++ b/libweave/include/weave/provider/config_store.h
@@ -35,11 +35,8 @@ // recommended to protect data, e.g. using encryption. virtual void SaveSettings(const std::string& settings) = 0; - // Returns command definitions as JSON. - // Key is unique string which will be used to assign single command handler - // later. - // Value is JSON with command definition. - virtual std::map<std::string, std::string> LoadCommandDefs() = 0; + // Returns command definitions as array of JSONs. + virtual std::vector<std::string> LoadCommandDefs() = 0; // Returns device state definitions as array of JSONs. virtual std::vector<std::string> LoadStateDefs() = 0;
diff --git a/libweave/include/weave/provider/test/mock_config_store.h b/libweave/include/weave/provider/test/mock_config_store.h index 30027f3..6eab802 100644 --- a/libweave/include/weave/provider/test/mock_config_store.h +++ b/libweave/include/weave/provider/test/mock_config_store.h
@@ -42,7 +42,7 @@ MOCK_METHOD0(LoadSettings, std::string()); MOCK_METHOD1(SaveSettings, void(const std::string&)); - MOCK_METHOD0(LoadCommandDefs, std::map<std::string, std::string>()); + MOCK_METHOD0(LoadCommandDefs, std::vector<std::string>()); MOCK_METHOD0(LoadStateDefs, std::vector<std::string>()); MOCK_METHOD0(LoadStateDefaults, std::vector<std::string>()); };
diff --git a/libweave/src/base_api_handler_unittest.cc b/libweave/src/base_api_handler_unittest.cc index 25a07f6..a583dc3 100644 --- a/libweave/src/base_api_handler_unittest.cc +++ b/libweave/src/base_api_handler_unittest.cc
@@ -68,7 +68,7 @@ void LoadCommands(const std::string& command_definitions) { auto json = test::CreateDictionaryValue(command_definitions.c_str()); EXPECT_TRUE(command_manager_->LoadBaseCommands(*json, nullptr)); - EXPECT_TRUE(command_manager_->LoadCommands(*json, "", nullptr)); + EXPECT_TRUE(command_manager_->LoadCommands(*json, nullptr)); } void AddCommand(const std::string& command) {
diff --git a/libweave/src/commands/cloud_command_proxy_unittest.cc b/libweave/src/commands/cloud_command_proxy_unittest.cc index b462439..e1d96b0 100644 --- a/libweave/src/commands/cloud_command_proxy_unittest.cc +++ b/libweave/src/commands/cloud_command_proxy_unittest.cc
@@ -94,7 +94,7 @@ } })"); CHECK(json.get()); - CHECK(command_dictionary_.LoadCommands(*json, "calcd", nullptr, nullptr)) + CHECK(command_dictionary_.LoadCommands(*json, nullptr, nullptr)) << "Failed to parse test command dictionary"; CreateCommandInstance();
diff --git a/libweave/src/commands/command_definition.cc b/libweave/src/commands/command_definition.cc index 1deb594..21e186a 100644 --- a/libweave/src/commands/command_definition.cc +++ b/libweave/src/commands/command_definition.cc
@@ -71,12 +71,10 @@ } CommandDefinition::CommandDefinition( - const std::string& category, std::unique_ptr<const ObjectSchema> parameters, std::unique_ptr<const ObjectSchema> progress, std::unique_ptr<const ObjectSchema> results) - : category_{category}, - parameters_{std::move(parameters)}, + : parameters_{std::move(parameters)}, progress_{std::move(progress)}, results_{std::move(results)} { // Set to be available to all clients by default.
diff --git a/libweave/src/commands/command_definition.h b/libweave/src/commands/command_definition.h index a6a17f8..305e8f5 100644 --- a/libweave/src/commands/command_definition.h +++ b/libweave/src/commands/command_definition.h
@@ -22,11 +22,8 @@ kOwner, }; -// A simple GCD command definition. This class contains the command category -// and a full object schema describing the command parameter types and -// constraints. See comments for CommandDefinitions::LoadCommands for the -// detailed description of what command categories are and what they are used -// for. +// A simple GCD command definition. This class contains the full object schema +// describing the command parameter types and constraints. class CommandDefinition final { public: struct Visibility { @@ -52,13 +49,10 @@ bool cloud{false}; // Command is available to cloud clients. }; - CommandDefinition(const std::string& category, - std::unique_ptr<const ObjectSchema> parameters, + CommandDefinition(std::unique_ptr<const ObjectSchema> parameters, std::unique_ptr<const ObjectSchema> progress, std::unique_ptr<const ObjectSchema> results); - // Gets the category this command belongs to. - const std::string& GetCategory() const { return category_; } // Gets the object schema for command parameters. const ObjectSchema* GetParameters() const { return parameters_.get(); } // Gets the object schema for command progress. @@ -75,7 +69,6 @@ void SetMinimalRole(UserRole minimal_role) { minimal_role_ = minimal_role; } private: - std::string category_; // Cmd category. Could be "powerd" for "base.reboot". std::unique_ptr<const ObjectSchema> parameters_; // Command parameters def. std::unique_ptr<const ObjectSchema> progress_; // Command progress def. std::unique_ptr<const ObjectSchema> results_; // Command results def.
diff --git a/libweave/src/commands/command_definition_unittest.cc b/libweave/src/commands/command_definition_unittest.cc index f3e5de8..dda2385 100644 --- a/libweave/src/commands/command_definition_unittest.cc +++ b/libweave/src/commands/command_definition_unittest.cc
@@ -78,9 +78,8 @@ const ObjectSchema* param_ptr = params.get(); const ObjectSchema* progress_ptr = progress.get(); const ObjectSchema* results_ptr = results.get(); - CommandDefinition def{"powerd", std::move(params), std::move(progress), + CommandDefinition def{std::move(params), std::move(progress), std::move(results)}; - EXPECT_EQ("powerd", def.GetCategory()); EXPECT_EQ(param_ptr, def.GetParameters()); EXPECT_EQ(progress_ptr, def.GetProgress()); EXPECT_EQ(results_ptr, def.GetResults());
diff --git a/libweave/src/commands/command_dictionary.cc b/libweave/src/commands/command_dictionary.cc index 0dcb441..f03e92d 100644 --- a/libweave/src/commands/command_dictionary.cc +++ b/libweave/src/commands/command_dictionary.cc
@@ -13,18 +13,7 @@ namespace weave { -std::vector<std::string> CommandDictionary::GetCommandNamesByCategory( - const std::string& category) const { - std::vector<std::string> names; - for (const auto& pair : definitions_) { - if (pair.second->GetCategory() == category) - names.push_back(pair.first); - } - return names; -} - bool CommandDictionary::LoadCommands(const base::DictionaryValue& json, - const std::string& category, const CommandDictionary* base_commands, ErrorPtr* error) { CommandMap new_defs; @@ -142,7 +131,7 @@ } std::unique_ptr<CommandDefinition> command_def{new CommandDefinition{ - category, std::move(parameters_schema), std::move(progress_schema), + std::move(parameters_schema), std::move(progress_schema), std::move(results_schema)}}; command_def->SetVisibility(visibility); command_def->SetMinimalRole(minimal_role); @@ -159,18 +148,11 @@ // daemon on the same device. for (const auto& pair : new_defs) { auto iter = definitions_.find(pair.first); - CHECK(iter == definitions_.end()) - << "Definition for command '" << pair.first - << "' overrides an earlier definition in category '" - << iter->second->GetCategory().c_str() << "'"; + CHECK(iter == definitions_.end()) << "Definition for command '" + << pair.first + << "' overrides an earlier definition"; } - // Now that we successfully loaded all the command definitions, - // remove previous definitions of commands from the same category. - std::vector<std::string> names = GetCommandNamesByCategory(category); - for (const std::string& name : names) - definitions_.erase(name); - // Insert new definitions into the global map. for (auto& pair : new_defs) definitions_.emplace(pair.first, std::move(pair.second));
diff --git a/libweave/src/commands/command_dictionary.h b/libweave/src/commands/command_dictionary.h index f0f3bbd..389d419 100644 --- a/libweave/src/commands/command_dictionary.h +++ b/libweave/src/commands/command_dictionary.h
@@ -34,27 +34,14 @@ public: CommandDictionary() = default; - // Gets the list of names of commands that belong to the given category. - std::vector<std::string> GetCommandNamesByCategory( - const std::string& category) const; - // Loads command definitions from a JSON object. This is done at the daemon // startup and whenever a device daemon decides to update its command list. - // |json| is a JSON dictionary that describes the complete commands contained - // in a particular |category|. Usually, |categories| are 1:1 with daemons on - // a device. For instance, the power manager daemon might provide a category - // "power_man" that provides the "base.reboot" and "base.shutdown" commands. - // However, nothing prohibits a daemon providing commands in two categories. - // When LoadCommands is called, all previous definitions of commands from the - // same category are removed, effectively replacing all the commands in the - // given category. - // Optional |base_commands| parameter specifies the definition of standard - // GCD commands for parameter schema validation. Can be set to nullptr if - // no validation is needed. - // Returns false on failure and |error| provides additional error information - // when provided. + // |json| is a JSON dictionary that describes the complete commands. Optional + // |base_commands| parameter specifies the definition of standard GCD commands + // for parameter schema validation. Can be set to nullptr if no validation is + // needed. Returns false on failure and |error| provides additional error + // information when provided. bool LoadCommands(const base::DictionaryValue& json, - const std::string& category, const CommandDictionary* base_commands, ErrorPtr* error); // Converts all the command definitions to a JSON object for CDD/Device
diff --git a/libweave/src/commands/command_dictionary_unittest.cc b/libweave/src/commands/command_dictionary_unittest.cc index ac9e261..531a561 100644 --- a/libweave/src/commands/command_dictionary_unittest.cc +++ b/libweave/src/commands/command_dictionary_unittest.cc
@@ -17,7 +17,6 @@ CommandDictionary dict; EXPECT_TRUE(dict.IsEmpty()); EXPECT_EQ(nullptr, dict.FindCommand("robot.jump")); - EXPECT_TRUE(dict.GetCommandNamesByCategory("robotd").empty()); } TEST(CommandDictionary, LoadCommands) { @@ -36,7 +35,7 @@ } })"); CommandDictionary dict; - EXPECT_TRUE(dict.LoadCommands(*json, "robotd", nullptr, nullptr)); + EXPECT_TRUE(dict.LoadCommands(*json, nullptr, nullptr)); EXPECT_EQ(1, dict.GetSize()); EXPECT_NE(nullptr, dict.FindCommand("robot.jump")); json = CreateDictionaryValue(R"({ @@ -48,14 +47,12 @@ } } })"); - EXPECT_TRUE(dict.LoadCommands(*json, "powerd", nullptr, nullptr)); + EXPECT_TRUE(dict.LoadCommands(*json, nullptr, nullptr)); EXPECT_EQ(3, dict.GetSize()); EXPECT_NE(nullptr, dict.FindCommand("robot.jump")); EXPECT_NE(nullptr, dict.FindCommand("base.reboot")); EXPECT_NE(nullptr, dict.FindCommand("base.shutdown")); EXPECT_EQ(nullptr, dict.FindCommand("foo.bar")); - std::vector<std::string> expected_commands{"base.reboot", "base.shutdown"}; - EXPECT_EQ(expected_commands, dict.GetCommandNamesByCategory("powerd")); } TEST(CommandDictionary, LoadWithInheritance) { @@ -77,12 +74,12 @@ } })"); CommandDictionary base_dict; - EXPECT_TRUE(base_dict.LoadCommands(*json, "test1", nullptr, nullptr)); + EXPECT_TRUE(base_dict.LoadCommands(*json, nullptr, nullptr)); EXPECT_EQ(1, base_dict.GetSize()); json = CreateDictionaryValue(R"({'robot': {'jump': {}}})"); CommandDictionary dict; - EXPECT_TRUE(dict.LoadCommands(*json, "test2", &base_dict, nullptr)); + EXPECT_TRUE(dict.LoadCommands(*json, &base_dict, nullptr)); EXPECT_EQ(1, dict.GetSize()); auto cmd = dict.FindCommand("robot.jump"); @@ -105,27 +102,27 @@ // Command definition is not an object. auto json = CreateDictionaryValue("{'robot':{'jump':0}}"); - EXPECT_FALSE(dict.LoadCommands(*json, "robotd", nullptr, &error)); + EXPECT_FALSE(dict.LoadCommands(*json, nullptr, &error)); EXPECT_EQ("type_mismatch", error->GetCode()); error.reset(); // Package definition is not an object. json = CreateDictionaryValue("{'robot':'blah'}"); - EXPECT_FALSE(dict.LoadCommands(*json, "robotd", nullptr, &error)); + EXPECT_FALSE(dict.LoadCommands(*json, nullptr, &error)); EXPECT_EQ("type_mismatch", error->GetCode()); error.reset(); // Invalid command definition is not an object. json = CreateDictionaryValue( "{'robot':{'jump':{'parameters':{'flip':0},'results':{}}}}"); - EXPECT_FALSE(dict.LoadCommands(*json, "robotd", nullptr, &error)); + EXPECT_FALSE(dict.LoadCommands(*json, nullptr, &error)); EXPECT_EQ("invalid_object_schema", error->GetCode()); EXPECT_NE(nullptr, error->GetInnerError()); // Must have additional info. error.reset(); // Empty command name. json = CreateDictionaryValue("{'robot':{'':{'parameters':{},'results':{}}}}"); - EXPECT_FALSE(dict.LoadCommands(*json, "robotd", nullptr, &error)); + EXPECT_FALSE(dict.LoadCommands(*json, nullptr, &error)); EXPECT_EQ("invalid_command_name", error->GetCode()); error.reset(); } @@ -135,10 +132,10 @@ CommandDictionary dict; ErrorPtr error; auto json = CreateDictionaryValue("{'robot':{'jump':{}}}"); - dict.LoadCommands(*json, "category1", nullptr, &error); - ASSERT_DEATH(dict.LoadCommands(*json, "category2", nullptr, &error), + dict.LoadCommands(*json, nullptr, &error); + ASSERT_DEATH(dict.LoadCommands(*json, nullptr, &error), ".*Definition for command 'robot.jump' overrides an " - "earlier definition in category 'category1'"); + "earlier definition"); } TEST(CommandDictionary, LoadCommands_CustomCommandNaming) { @@ -154,18 +151,18 @@ } } })"); - base_dict.LoadCommands(*json, "", nullptr, &error); - EXPECT_TRUE(dict.LoadCommands(*json, "robotd", &base_dict, &error)); + base_dict.LoadCommands(*json, nullptr, &error); + EXPECT_TRUE(dict.LoadCommands(*json, &base_dict, &error)); auto json2 = CreateDictionaryValue("{'base':{'jump':{'parameters':{},'results':{}}}}"); - EXPECT_FALSE(dict.LoadCommands(*json2, "robotd", &base_dict, &error)); + EXPECT_FALSE(dict.LoadCommands(*json2, &base_dict, &error)); EXPECT_EQ("invalid_command_name", error->GetCode()); error.reset(); // If the command starts with "_", then it's Ok. json2 = CreateDictionaryValue( "{'base':{'_jump':{'parameters':{},'results':{}}}}"); - EXPECT_TRUE(dict.LoadCommands(*json2, "robotd", &base_dict, nullptr)); + EXPECT_TRUE(dict.LoadCommands(*json2, &base_dict, nullptr)); } TEST(CommandDictionary, LoadCommands_RedefineStdCommand) { @@ -181,7 +178,7 @@ } } })"); - base_dict.LoadCommands(*json, "", nullptr, &error); + base_dict.LoadCommands(*json, nullptr, &error); auto json2 = CreateDictionaryValue(R"({ 'base': { @@ -191,7 +188,7 @@ } } })"); - EXPECT_FALSE(dict.LoadCommands(*json2, "robotd", &base_dict, &error)); + EXPECT_FALSE(dict.LoadCommands(*json2, &base_dict, &error)); EXPECT_EQ("invalid_object_schema", error->GetCode()); EXPECT_EQ("invalid_parameter_definition", error->GetInnerError()->GetCode()); EXPECT_EQ("param_type_changed", error->GetFirstError()->GetCode()); @@ -205,7 +202,7 @@ } } })"); - EXPECT_FALSE(dict.LoadCommands(*json3, "robotd", &base_dict, &error)); + EXPECT_FALSE(dict.LoadCommands(*json3, &base_dict, &error)); EXPECT_EQ("invalid_object_schema", error->GetCode()); // TODO(antonm): remove parameter from error below and use some generic. EXPECT_EQ("invalid_parameter_definition", error->GetInnerError()->GetCode()); @@ -227,7 +224,7 @@ } })"); CommandDictionary base_dict; - base_dict.LoadCommands(*json_base, "base", nullptr, nullptr); + base_dict.LoadCommands(*json_base, nullptr, nullptr); auto json = CreateDictionaryValue(R"({ 'base': { @@ -244,7 +241,7 @@ } })"); CommandDictionary dict; - dict.LoadCommands(*json, "device", &base_dict, nullptr); + dict.LoadCommands(*json, &base_dict, nullptr); json = dict.GetCommandsAsJson( [](const CommandDefinition* def) { return true; }, false, nullptr); @@ -341,7 +338,7 @@ } })"); CommandDictionary dict; - ASSERT_TRUE(dict.LoadCommands(*json, "test", nullptr, nullptr)); + ASSERT_TRUE(dict.LoadCommands(*json, nullptr, nullptr)); json = dict.GetCommandsAsJson( [](const CommandDefinition* def) { return true; }, false, nullptr); @@ -438,7 +435,7 @@ } } })"); - EXPECT_TRUE(base_dict.LoadCommands(*json, "testd", nullptr, nullptr)); + EXPECT_TRUE(base_dict.LoadCommands(*json, nullptr, nullptr)); auto cmd = base_dict.FindCommand("base.command1"); ASSERT_NE(nullptr, cmd); @@ -494,7 +491,7 @@ } } })"); - EXPECT_TRUE(dict.LoadCommands(*json, "testd", &base_dict, nullptr)); + EXPECT_TRUE(dict.LoadCommands(*json, &base_dict, nullptr)); cmd = dict.FindCommand("base.command1"); ASSERT_NE(nullptr, cmd); @@ -540,7 +537,7 @@ } } })"); - EXPECT_FALSE(dict.LoadCommands(*json, "testd", nullptr, &error)); + EXPECT_FALSE(dict.LoadCommands(*json, nullptr, &error)); EXPECT_EQ("invalid_command_visibility", error->GetCode()); EXPECT_EQ("invalid_parameter_value", error->GetInnerError()->GetCode()); error.reset(); @@ -560,7 +557,7 @@ } } })"); - EXPECT_FALSE(dict.LoadCommands(*json, "testd", nullptr, &error)); + EXPECT_FALSE(dict.LoadCommands(*json, nullptr, &error)); EXPECT_EQ("invalid_minimal_role", error->GetCode()); EXPECT_EQ("invalid_parameter_value", error->GetInnerError()->GetCode()); error.reset();
diff --git a/libweave/src/commands/command_instance.cc b/libweave/src/commands/command_instance.cc index ea2c773..a8891f7 100644 --- a/libweave/src/commands/command_instance.cc +++ b/libweave/src/commands/command_instance.cc
@@ -70,10 +70,6 @@ return name_; } -const std::string& CommandInstance::GetCategory() const { - return command_definition_->GetCategory(); -} - CommandStatus CommandInstance::GetStatus() const { return status_; }
diff --git a/libweave/src/commands/command_instance.h b/libweave/src/commands/command_instance.h index 0b82a81..8a54b05 100644 --- a/libweave/src/commands/command_instance.h +++ b/libweave/src/commands/command_instance.h
@@ -46,7 +46,6 @@ void RemoveObserver(Observer* observer) override; const std::string& GetID() const override; const std::string& GetName() const override; - const std::string& GetCategory() const override; CommandStatus GetStatus() const override; CommandOrigin GetOrigin() const override; std::unique_ptr<base::DictionaryValue> GetParameters() const override;
diff --git a/libweave/src/commands/command_instance_unittest.cc b/libweave/src/commands/command_instance_unittest.cc index 811d9bb..865ba6e 100644 --- a/libweave/src/commands/command_instance_unittest.cc +++ b/libweave/src/commands/command_instance_unittest.cc
@@ -61,7 +61,7 @@ } } })"); - CHECK(dict_.LoadCommands(*json, "robotd", nullptr, nullptr)) + CHECK(dict_.LoadCommands(*json, nullptr, nullptr)) << "Failed to parse test command dictionary"; } CommandDictionary dict_; @@ -84,7 +84,6 @@ EXPECT_EQ("", instance.GetID()); EXPECT_EQ("robot.speak", instance.GetName()); - EXPECT_EQ("robotd", instance.GetCategory()); EXPECT_EQ(CommandOrigin::kCloud, instance.GetOrigin()); EXPECT_JSON_EQ("{'phrase': 'iPityDaFool', 'volume': 5}", *instance.GetParameters()); @@ -122,7 +121,6 @@ EXPECT_EQ("abcd", id); EXPECT_EQ("abcd", instance->GetID()); EXPECT_EQ("robot.jump", instance->GetName()); - EXPECT_EQ("robotd", instance->GetCategory()); EXPECT_JSON_EQ("{'height': 53, '_jumpType': '_withKick'}", *instance->GetParameters()); } @@ -132,7 +130,6 @@ auto instance = CommandInstance::FromJson(json.get(), CommandOrigin::kCloud, dict_, nullptr, nullptr); EXPECT_EQ("base.reboot", instance->GetName()); - EXPECT_EQ("robotd", instance->GetCategory()); EXPECT_JSON_EQ("{}", *instance->GetParameters()); }
diff --git a/libweave/src/commands/command_manager.cc b/libweave/src/commands/command_manager.cc index bd7d02c..2add19e 100644 --- a/libweave/src/commands/command_manager.cc +++ b/libweave/src/commands/command_manager.cc
@@ -66,7 +66,7 @@ bool CommandManager::LoadBaseCommands(const base::DictionaryValue& dict, ErrorPtr* error) { - return base_dictionary_.LoadCommands(dict, "", nullptr, error); + return base_dictionary_.LoadCommands(dict, nullptr, error); } bool CommandManager::LoadBaseCommands(const std::string& json, @@ -78,22 +78,19 @@ } bool CommandManager::LoadCommands(const base::DictionaryValue& dict, - const std::string& category, ErrorPtr* error) { - bool result = - dictionary_.LoadCommands(dict, category, &base_dictionary_, error); + bool result = dictionary_.LoadCommands(dict, &base_dictionary_, error); for (const auto& cb : on_command_changed_) cb.Run(); return result; } bool CommandManager::LoadCommands(const std::string& json, - const std::string& category, ErrorPtr* error) { std::unique_ptr<const base::DictionaryValue> dict = LoadJsonDict(json, error); if (!dict) return false; - return LoadCommands(*dict, category, error); + return LoadCommands(*dict, error); } void CommandManager::Startup(provider::ConfigStore* config_store) { @@ -104,7 +101,7 @@ // Loading the rest of commands. for (const auto& defs : config_store->LoadCommandDefs()) - CHECK(this->LoadCommands(defs.second, defs.first, nullptr)); + CHECK(this->LoadCommands(defs, nullptr)); } void CommandManager::AddCommand(
diff --git a/libweave/src/commands/command_manager.h b/libweave/src/commands/command_manager.h index ea1392c..2485233 100644 --- a/libweave/src/commands/command_manager.h +++ b/libweave/src/commands/command_manager.h
@@ -61,19 +61,13 @@ // the base command definitions from. bool LoadBaseCommands(const std::string& json, ErrorPtr* error); - // Loads device command schema for particular category. - // See CommandDictionary::LoadCommands for detailed description of the - // parameters. + // Loads device command schema. bool LoadCommands(const base::DictionaryValue& dict, - const std::string& category, ErrorPtr* error); // Same as the overload above, but takes a path to a json file to read - // the base command definitions from. Also, the command category is - // derived from file name (without extension). So, if the path points to - // "power_manager.json", the command category used will be "power_manager". + // the base command definitions from. bool LoadCommands(const std::string& json, - const std::string& category, ErrorPtr* error); // Startup method to be called by buffet daemon at startup.
diff --git a/libweave/src/commands/command_manager_unittest.cc b/libweave/src/commands/command_manager_unittest.cc index 8d64650..ef77f4b 100644 --- a/libweave/src/commands/command_manager_unittest.cc +++ b/libweave/src/commands/command_manager_unittest.cc
@@ -72,7 +72,7 @@ TEST(CommandManager, LoadCommandsDict) { CommandManager manager; auto json = CreateDictionaryValue(kTestVendorCommands); - EXPECT_TRUE(manager.LoadCommands(*json, "category", nullptr)); + EXPECT_TRUE(manager.LoadCommands(*json, nullptr)); } TEST(CommandManager, LoadCommandsJson) { @@ -107,7 +107,7 @@ } } })"; - EXPECT_TRUE(manager.LoadCommands(json_str, "test", nullptr)); + EXPECT_TRUE(manager.LoadCommands(json_str, nullptr)); EXPECT_EQ(2, manager.GetCommandDictionary().GetSize()); EXPECT_NE(nullptr, manager.GetCommandDictionary().FindCommand("base.reboot")); EXPECT_NE(nullptr, manager.GetCommandDictionary().FindCommand("robot._jump")); @@ -117,8 +117,8 @@ CommandManager manager; provider::test::MockConfigStore config_store; EXPECT_CALL(config_store, LoadCommandDefs()) - .WillOnce(Return(std::map<std::string, std::string>{ - {"category", kTestVendorCommands}, {"test", kTestTestCommands}})); + .WillOnce(Return( + std::vector<std::string>{kTestVendorCommands, kTestTestCommands})); manager.Startup(&config_store); EXPECT_EQ(3, manager.GetCommandDictionary().GetSize()); EXPECT_NE(nullptr, manager.GetCommandDictionary().FindCommand("robot._jump")); @@ -152,7 +152,7 @@ } } })"); - ASSERT_TRUE(manager.LoadCommands(*json, "test", nullptr)); + ASSERT_TRUE(manager.LoadCommands(*json, nullptr)); EXPECT_EQ(2, update_count); const CommandDictionary& dict = manager.GetCommandDictionary(); EXPECT_TRUE(manager.SetCommandVisibility(
diff --git a/libweave/src/commands/command_queue_unittest.cc b/libweave/src/commands/command_queue_unittest.cc index f88a74e..dc02d9c 100644 --- a/libweave/src/commands/command_queue_unittest.cc +++ b/libweave/src/commands/command_queue_unittest.cc
@@ -39,9 +39,8 @@ CommandQueue queue_; private: - CommandDefinition command_definition_{"powerd", ObjectSchema::Create(), - ObjectSchema::Create(), - ObjectSchema::Create()}; + CommandDefinition command_definition_{ + ObjectSchema::Create(), ObjectSchema::Create(), ObjectSchema::Create()}; }; // Keeps track of commands being added to and removed from the queue_.
diff --git a/libweave/src/device_registration_info_unittest.cc b/libweave/src/device_registration_info_unittest.cc index 34ea31a..f5c53fa 100644 --- a/libweave/src/device_registration_info_unittest.cc +++ b/libweave/src/device_registration_info_unittest.cc
@@ -367,7 +367,7 @@ } } })"); - EXPECT_TRUE(command_manager_->LoadCommands(*json_cmds, "", nullptr)); + EXPECT_TRUE(command_manager_->LoadCommands(*json_cmds, nullptr)); std::string ticket_url = dev_reg_->GetServiceURL("registrationTickets/") + test_data::kClaimTicketId; @@ -516,7 +516,7 @@ } } })"); - EXPECT_TRUE(command_manager_->LoadCommands(*json_cmds, "", nullptr)); + EXPECT_TRUE(command_manager_->LoadCommands(*json_cmds, nullptr)); const std::string command_url = dev_reg_->GetServiceURL("commands/1234");
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc index e731803..9ab0a2a 100644 --- a/libweave/src/weave_unittest.cc +++ b/libweave/src/weave_unittest.cc
@@ -161,14 +161,13 @@ EXPECT_CALL(config_store_, SaveSettings("")).WillRepeatedly(Return()); EXPECT_CALL(config_store_, LoadCommandDefs()) - .WillOnce(Return( - std::map<std::string, std::string>{{kCategory, kCommandDefs}})); + .WillOnce(Return(std::vector<std::string>{kCommandDefs})); EXPECT_CALL(config_store_, LoadStateDefs()) - .WillOnce(Return(std::vector<std::string>{{kStateDefs}})); + .WillOnce(Return(std::vector<std::string>{kStateDefs})); EXPECT_CALL(config_store_, LoadStateDefaults()) - .WillOnce(Return(std::vector<std::string>{{kStateDefaults}})); + .WillOnce(Return(std::vector<std::string>{kStateDefaults})); } void InitNetwork() {