buffet: Allow setting command results. Next step in command results support: now there is CommandInstance::SetResults method which allows results modifications. BUG=chromium:435607 TEST=cros_workon_make --test buffet Change-Id: I1f5da9c3613a2996cea3f65f07945cc64bfeda2e Reviewed-on: https://chromium-review.googlesource.com/231337 Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Tested-by: Anton Muhin <antonm@chromium.org> Commit-Queue: Anton Muhin <antonm@chromium.org>
diff --git a/buffet/commands/dbus_command_proxy_unittest.cc b/buffet/commands/dbus_command_proxy_unittest.cc index a810464..eac207b 100644 --- a/buffet/commands/dbus_command_proxy_unittest.cc +++ b/buffet/commands/dbus_command_proxy_unittest.cc
@@ -65,7 +65,14 @@ 'enum': ['_withAirFlip', '_withSpin', '_withKick'] } }, - 'results': {} + 'results': { + 'foo': { + 'type': 'integer' + }, + 'bar': { + 'type': 'string' + } + } } } })"); @@ -129,6 +136,10 @@ return GetCommandProxy()->dbus_adaptor_.GetParameters(); } + VariantDictionary GetResults() const { + return GetCommandProxy()->dbus_adaptor_.GetResults(); + } + std::unique_ptr<dbus::Response> CallMethod( const std::string& method_name, const std::function<void(dbus::MessageWriter*)>& param_callback) { @@ -185,9 +196,12 @@ {"height", int32_t{53}}, {"_jumpType", std::string{"_withKick"}}, }; + VariantDictionary results; + EXPECT_EQ(CommandInstance::kStatusQueued, GetStatus()); EXPECT_EQ(0, GetProgress()); EXPECT_EQ(params, GetParameters()); + EXPECT_EQ(results, GetResults()); EXPECT_EQ("robot.jump", GetPropertyValue<std::string>(dbus_constants::kCommandName)); EXPECT_EQ(kTestCommandCategoty, @@ -200,6 +214,9 @@ EXPECT_EQ(params, GetPropertyValue<VariantDictionary>( dbus_constants::kCommandParameters)); + EXPECT_EQ(results, + GetPropertyValue<VariantDictionary>( + dbus_constants::kCommandResults)); } TEST_F(DBusCommandProxyTest, SetProgress) { @@ -226,6 +243,35 @@ EXPECT_EQ(0, GetProgress()); } +TEST_F(DBusCommandProxyTest, SetResults) { + EXPECT_CALL(*mock_exported_object_command_, SendSignal(_)).Times(1); + const VariantDictionary results = { + {"foo", int32_t{42}}, + {"bar", std::string{"foobar"}}, + }; + auto response = CallMethod(dbus_constants::kCommandSetResults, + [results](dbus::MessageWriter* writer) { + chromeos::dbus_utils::AppendValueToWriter(writer, results); + }); + VerifyResponse(response, {}); + EXPECT_EQ(results, GetResults()); + EXPECT_EQ(results, + GetPropertyValue<VariantDictionary>( + dbus_constants::kCommandResults)); +} + +TEST_F(DBusCommandProxyTest, SetResults_UnknownProperty) { + EXPECT_CALL(*mock_exported_object_command_, SendSignal(_)).Times(0); + const VariantDictionary results = { + {"quux", int32_t{42}}, + }; + auto response = CallMethod(dbus_constants::kCommandSetResults, + [results](dbus::MessageWriter* writer) { + chromeos::dbus_utils::AppendValueToWriter(writer, results); + }); + EXPECT_TRUE(IsResponseError(response)); +} + TEST_F(DBusCommandProxyTest, Abort) { EXPECT_CALL(*mock_exported_object_command_, SendSignal(_)).Times(1); auto response = CallMethod(dbus_constants::kCommandAbort, {});