buffet: Added base.updateDeviceInfo handler
base.updateDeviceInfo changes 'name', 'description' and 'location'
properties of the device resource.
BUG=brillo:697
TEST='FEATURES=test emerge-storm buffet'
Change-Id: Id1b349c97d2132117cdf803dda8e39d25c64621a
Reviewed-on: https://chromium-review.googlesource.com/270787
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/base_api_handler_unittest.cc b/buffet/base_api_handler_unittest.cc
new file mode 100644
index 0000000..011f639
--- /dev/null
+++ b/buffet/base_api_handler_unittest.cc
@@ -0,0 +1,99 @@
+// Copyright 2015 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "buffet/base_api_handler.h"
+
+#include <base/strings/string_number_conversions.h>
+#include <base/values.h>
+#include <chromeos/http/http_transport_fake.h>
+#include <gtest/gtest.h>
+
+#include "buffet/buffet_config.h"
+#include "buffet/commands/command_manager.h"
+#include "buffet/commands/unittest_utils.h"
+#include "buffet/device_registration_info.h"
+#include "buffet/states/mock_state_change_queue_interface.h"
+#include "buffet/states/state_manager.h"
+#include "buffet/storage_impls.h"
+
+namespace buffet {
+
+class BaseApiHandlerTest : public ::testing::Test {
+ protected:
+ void SetUp() override {
+ storage_ = std::make_shared<MemStorage>();
+ transport_ = std::make_shared<chromeos::http::fake::Transport>();
+ command_manager_ = std::make_shared<CommandManager>();
+ state_manager_ = std::make_shared<StateManager>(&mock_state_change_queue_);
+ state_manager_->Startup();
+ dev_reg_.reset(new DeviceRegistrationInfo(
+ command_manager_, state_manager_,
+ std::unique_ptr<BuffetConfig>{new BuffetConfig}, transport_, storage_,
+ true, nullptr));
+ handler_.reset(new BaseApiHandler{dev_reg_->AsWeakPtr(), command_manager_});
+ }
+
+ void LoadCommands(const std::string& command_definitions) {
+ auto json = unittests::CreateDictionaryValue(command_definitions.c_str());
+ EXPECT_TRUE(command_manager_->LoadBaseCommands(*json, nullptr));
+ EXPECT_TRUE(command_manager_->LoadCommands(*json, "", nullptr));
+ }
+
+ void AddCommand(const std::string& command) {
+ auto command_instance = buffet::CommandInstance::FromJson(
+ unittests::CreateDictionaryValue(command.c_str()).get(),
+ commands::attributes::kCommand_Visibility_Local,
+ command_manager_->GetCommandDictionary(), nullptr, nullptr);
+ EXPECT_TRUE(!!command_instance);
+
+ std::string id{base::IntToString(++command_id_)};
+ command_instance->SetID(id);
+ command_manager_->AddCommand(std::move(command_instance));
+ EXPECT_EQ(CommandInstance::kStatusDone,
+ command_manager_->FindCommand(id)->GetStatus());
+ }
+
+ std::shared_ptr<MemStorage> storage_;
+ std::shared_ptr<chromeos::http::fake::Transport> transport_;
+ std::unique_ptr<DeviceRegistrationInfo> dev_reg_;
+ std::shared_ptr<CommandManager> command_manager_;
+ testing::NiceMock<MockStateChangeQueueInterface> mock_state_change_queue_;
+ std::shared_ptr<StateManager> state_manager_;
+ std::unique_ptr<BaseApiHandler> handler_;
+ int command_id_{0};
+};
+
+TEST_F(BaseApiHandlerTest, UpdateDeviceInfo) {
+ LoadCommands(R"({
+ 'base': {
+ 'updateDeviceInfo': {
+ 'parameters': {
+ 'description': 'string',
+ 'name': {
+ 'type': 'string',
+ 'minLength': 1
+ },
+ 'location': 'string'
+ },
+ 'results': {}
+ }
+ }
+ })");
+
+ AddCommand(R"({
+ 'name' : 'base.updateDeviceInfo',
+ 'parameters': {
+ 'name': 'testName',
+ 'description': 'testDescription',
+ 'location': 'testLocation'
+ }
+ })");
+
+ const BuffetConfig& config{dev_reg_->GetConfig()};
+ EXPECT_EQ("testName", config.name());
+ EXPECT_EQ("testDescription", config.description());
+ EXPECT_EQ("testLocation", config.location());
+}
+
+} // namespace buffet