buffet: Allow omitting "parameters" and "results" Many commands have neither parameters nor results. Empty schema will be used if if section is omitted in command definition. BUG=brillo:915 TEST=FEATURES=test emerge-gizmo buffet Change-Id: I4df542d889f325223a436bfe032950aa05c35b6e Reviewed-on: https://chromium-review.googlesource.com/268317 Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Tested-by: Vitaly Buka <vitalybuka@chromium.org> Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/commands/command_dictionary.cc b/buffet/commands/command_dictionary.cc index 3ab57a5..cbfd46b 100644 --- a/buffet/commands/command_dictionary.cc +++ b/buffet/commands/command_dictionary.cc
@@ -173,13 +173,7 @@ const base::DictionaryValue* schema_def = nullptr; if (!command_def_json->GetDictionaryWithoutPathExpansion(property_name, &schema_def)) { - chromeos::Error::AddToPrintf( - error, FROM_HERE, errors::commands::kDomain, - errors::commands::kPropertyMissing, - "Command definition '%s' is missing property '%s'", - command_name.c_str(), - property_name); - return {}; + return object_schema; } if (!object_schema->FromJson(schema_def, base_def, error)) {
diff --git a/buffet/commands/command_dictionary_unittest.cc b/buffet/commands/command_dictionary_unittest.cc index c50a2ae..63492cc 100644 --- a/buffet/commands/command_dictionary_unittest.cc +++ b/buffet/commands/command_dictionary_unittest.cc
@@ -36,12 +36,9 @@ json = CreateDictionaryValue(R"({ 'base': { 'reboot': { - 'parameters': {'delay': 'integer'}, - 'results': {} + 'parameters': {'delay': 'integer'} }, 'shutdown': { - 'parameters': {}, - 'results': {} } } })"); @@ -59,24 +56,8 @@ buffet::CommandDictionary dict; chromeos::ErrorPtr error; - // Command definition missing 'parameters' property. - auto json = CreateDictionaryValue("{'robot':{'jump':{'results':{}}}}"); - EXPECT_FALSE(dict.LoadCommands(*json, "robotd", nullptr, &error)); - EXPECT_EQ("parameter_missing", error->GetCode()); - EXPECT_EQ("Command definition 'robot.jump' is missing property 'parameters'", - error->GetMessage()); - error.reset(); - - // Command definition missing 'results' property. - json = CreateDictionaryValue("{'robot':{'jump':{'parameters':{}}}}"); - EXPECT_FALSE(dict.LoadCommands(*json, "robotd", nullptr, &error)); - EXPECT_EQ("parameter_missing", error->GetCode()); - EXPECT_EQ("Command definition 'robot.jump' is missing property 'results'", - error->GetMessage()); - error.reset(); - // Command definition is not an object. - json = CreateDictionaryValue("{'robot':{'jump':0}}"); + auto json = CreateDictionaryValue("{'robot':{'jump':0}}"); EXPECT_FALSE(dict.LoadCommands(*json, "robotd", nullptr, &error)); EXPECT_EQ("type_mismatch", error->GetCode()); EXPECT_EQ("Expecting an object for command 'jump'", error->GetMessage()); @@ -111,8 +92,7 @@ // Redefine commands in different category. buffet::CommandDictionary dict; chromeos::ErrorPtr error; - auto json = CreateDictionaryValue( - "{'robot':{'jump':{'parameters':{},'results':{}}}}"); + auto json = CreateDictionaryValue("{'robot':{'jump':{}}}"); dict.LoadCommands(*json, "category1", nullptr, &error); ASSERT_DEATH(dict.LoadCommands(*json, "category2", nullptr, &error), ".*Definition for command 'robot.jump' overrides an "
diff --git a/buffet/etc/buffet/commands/test.json b/buffet/etc/buffet/commands/test.json index 4d11f82..182192f 100644 --- a/buffet/etc/buffet/commands/test.json +++ b/buffet/etc/buffet/commands/test.json
@@ -3,8 +3,6 @@ "_jump": { "parameters": { "_height":"integer" - }, - "results": { } } }