base_api_handler_unittest.cc revision 9acf8aa6176c1afaa587deac955acd6a7f9a46f4
172410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka// Copyright 2015 The Chromium OS Authors. All rights reserved.
272410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka// Use of this source code is governed by a BSD-style license that can be
372410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka// found in the LICENSE file.
472410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka
5912b6985096700c4bf7aa83fb01640309a9bb229Vitaly Buka#include "libweave/src/base_api_handler.h"
672410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka
772410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka#include <base/strings/string_number_conversions.h>
872410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka#include <base/values.h>
972410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka#include <gtest/gtest.h>
10c11a17d59330e6356f9da62e5b4a7ecf6a726665Vitaly Buka#include <weave/mock_config_store.h>
111020618923f7bf3066c8d36bbfe0a855eb58a974Vitaly Buka#include <weave/mock_http_client.h>
1272410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka
13912b6985096700c4bf7aa83fb01640309a9bb229Vitaly Buka#include "libweave/src/commands/command_manager.h"
14912b6985096700c4bf7aa83fb01640309a9bb229Vitaly Buka#include "libweave/src/commands/unittest_utils.h"
15c11a17d59330e6356f9da62e5b4a7ecf6a726665Vitaly Buka#include "libweave/src/config.h"
16912b6985096700c4bf7aa83fb01640309a9bb229Vitaly Buka#include "libweave/src/device_registration_info.h"
17912b6985096700c4bf7aa83fb01640309a9bb229Vitaly Buka#include "libweave/src/states/mock_state_change_queue_interface.h"
18912b6985096700c4bf7aa83fb01640309a9bb229Vitaly Buka#include "libweave/src/states/state_manager.h"
1972410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka
206b61e5728bb6b014d16f9606a428deb6cbbbd10cVitaly Bukausing testing::_;
219acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Bukausing testing::Invoke;
226b61e5728bb6b014d16f9606a428deb6cbbbd10cVitaly Bukausing testing::Return;
239acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Bukausing testing::StrictMock;
246b61e5728bb6b014d16f9606a428deb6cbbbd10cVitaly Buka
25b6f015a1ef3caffbc2af53184c0ec5342e42e048Vitaly Bukanamespace weave {
2672410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka
2772410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Bukaclass BaseApiHandlerTest : public ::testing::Test {
2872410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka protected:
2972410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  void SetUp() override {
309acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Buka    EXPECT_CALL(config_store_, LoadDefaults(_))
319acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Buka        .WillOnce(Invoke([](Settings* settings) {
329acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Buka          settings->firmware_version = "123123";
339acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Buka          return true;
349acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Buka        }));
359acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Buka
366b61e5728bb6b014d16f9606a428deb6cbbbd10cVitaly Buka    EXPECT_CALL(mock_state_change_queue_, NotifyPropertiesUpdated(_, _))
376b61e5728bb6b014d16f9606a428deb6cbbbd10cVitaly Buka        .WillRepeatedly(Return(true));
386b61e5728bb6b014d16f9606a428deb6cbbbd10cVitaly Buka
3972410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka    command_manager_ = std::make_shared<CommandManager>();
4072410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka    state_manager_ = std::make_shared<StateManager>(&mock_state_change_queue_);
412f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    auto state_definition = unittests::CreateDictionaryValue(R"({
422f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'base': {
432f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka        'firmwareVersion': 'string',
442f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka        'localDiscoveryEnabled': 'boolean',
452f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka        'localAnonymousAccessMaxRole': [ 'none', 'viewer', 'user' ],
462f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka        'localPairingEnabled': 'boolean',
472f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka        'network': {
482f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka          'properties': {
492f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka            'name': 'string'
502f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka          }
512f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka        }
522f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      }
532f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    })");
542f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    auto state_defaults = unittests::CreateDictionaryValue(R"({
552f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'base': {
562f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka        'firmwareVersion': '123123',
572f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka        'localDiscoveryEnabled': false,
582f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka        'localAnonymousAccessMaxRole': 'none',
592f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka        'localPairingEnabled': false
602f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      }
612f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    })");
622f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    ASSERT_TRUE(state_manager_->LoadStateDefinition(*state_definition, "base",
632f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka                                                    nullptr));
642f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    ASSERT_TRUE(state_manager_->LoadStateDefaults(*state_defaults, nullptr));
659acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Buka    std::unique_ptr<Config> config{new Config{&config_store_}};
669acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Buka    config->Load();
679acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Buka    dev_reg_.reset(new DeviceRegistrationInfo(command_manager_, state_manager_,
689acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Buka                                              std::move(config), nullptr,
699acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Buka                                              &http_client_, true, nullptr));
709acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Buka    handler_.reset(
719acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Buka        new BaseApiHandler{dev_reg_.get(), state_manager_, command_manager_});
7272410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  }
7372410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka
7472410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  void LoadCommands(const std::string& command_definitions) {
7572410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka    auto json = unittests::CreateDictionaryValue(command_definitions.c_str());
7672410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka    EXPECT_TRUE(command_manager_->LoadBaseCommands(*json, nullptr));
7772410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka    EXPECT_TRUE(command_manager_->LoadCommands(*json, "", nullptr));
7872410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  }
7972410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka
8072410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  void AddCommand(const std::string& command) {
81b6f015a1ef3caffbc2af53184c0ec5342e42e048Vitaly Buka    auto command_instance = CommandInstance::FromJson(
8272410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka        unittests::CreateDictionaryValue(command.c_str()).get(),
8315f5909fbedbcb67ef9f70dc10e3b834f8e875fbVitaly Buka        CommandOrigin::kLocal, command_manager_->GetCommandDictionary(),
8415f5909fbedbcb67ef9f70dc10e3b834f8e875fbVitaly Buka        nullptr, nullptr);
8572410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka    EXPECT_TRUE(!!command_instance);
8672410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka
8772410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka    std::string id{base::IntToString(++command_id_)};
8872410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka    command_instance->SetID(id);
8972410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka    command_manager_->AddCommand(std::move(command_instance));
9015f5909fbedbcb67ef9f70dc10e3b834f8e875fbVitaly Buka    EXPECT_EQ(CommandStatus::kDone,
9172410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka              command_manager_->FindCommand(id)->GetStatus());
9272410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  }
9372410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka
94c11a17d59330e6356f9da62e5b4a7ecf6a726665Vitaly Buka  unittests::MockConfigStore config_store_;
951020618923f7bf3066c8d36bbfe0a855eb58a974Vitaly Buka  StrictMock<unittests::MockHttpClient> http_client_;
9672410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  std::unique_ptr<DeviceRegistrationInfo> dev_reg_;
9772410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  std::shared_ptr<CommandManager> command_manager_;
986b61e5728bb6b014d16f9606a428deb6cbbbd10cVitaly Buka  testing::StrictMock<MockStateChangeQueueInterface> mock_state_change_queue_;
9972410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  std::shared_ptr<StateManager> state_manager_;
10072410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  std::unique_ptr<BaseApiHandler> handler_;
10172410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  int command_id_{0};
10272410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka};
10372410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka
1042f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly BukaTEST_F(BaseApiHandlerTest, UpdateBaseConfiguration) {
1052f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  LoadCommands(R"({
1062f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    'base': {
1072f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'updateBaseConfiguration': {
1082f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka        'parameters': {
1092f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka          'localDiscoveryEnabled': 'boolean',
1102f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka          'localAnonymousAccessMaxRole': [ 'none', 'viewer', 'user' ],
1112f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka          'localPairingEnabled': 'boolean'
1122f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka         },
1132f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka         'results': {}
1142f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      }
1152f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    }
1162f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  })");
1172f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka
118c11a17d59330e6356f9da62e5b4a7ecf6a726665Vitaly Buka  Config& config{*dev_reg_->GetMutableConfig()};
1192f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka
1202f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  AddCommand(R"({
1212f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    'name' : 'base.updateBaseConfiguration',
1222f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    'parameters': {
1232f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'localDiscoveryEnabled': false,
1242f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'localAnonymousAccessMaxRole': 'none',
1252f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'localPairingEnabled': false
1262f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    }
1272f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  })");
1282f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  EXPECT_EQ("none", config.local_anonymous_access_role());
1292f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  EXPECT_FALSE(config.local_discovery_enabled());
1302f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  EXPECT_FALSE(config.local_pairing_enabled());
1312f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka
1322f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  auto expected = R"({
1332f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    'base': {
1342f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'firmwareVersion': '123123',
1352f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'localAnonymousAccessMaxRole': 'none',
1362f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'localDiscoveryEnabled': false,
1372f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'localPairingEnabled': false,
1382f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'network': {}
1392f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    }
1402f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  })";
1416942e1f07146f0532200fc56381c04699bb6a30eVitaly Buka  EXPECT_JSON_EQ(expected, *state_manager_->GetStateValuesAsJson());
1422f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka
1432f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  AddCommand(R"({
1442f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    'name' : 'base.updateBaseConfiguration',
1452f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    'parameters': {
1462f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'localDiscoveryEnabled': true,
1472f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'localAnonymousAccessMaxRole': 'user',
1482f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'localPairingEnabled': true
1492f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    }
1502f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  })");
1512f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  EXPECT_EQ("user", config.local_anonymous_access_role());
1522f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  EXPECT_TRUE(config.local_discovery_enabled());
1532f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  EXPECT_TRUE(config.local_pairing_enabled());
1542f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  expected = R"({
1552f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    'base': {
1562f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'firmwareVersion': '123123',
1572f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'localAnonymousAccessMaxRole': 'user',
1582f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'localDiscoveryEnabled': true,
1592f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'localPairingEnabled': true,
1602f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka      'network': {}
1612f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka    }
1622f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka  })";
1636942e1f07146f0532200fc56381c04699bb6a30eVitaly Buka  EXPECT_JSON_EQ(expected, *state_manager_->GetStateValuesAsJson());
1644c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka
1654c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka  {
166c11a17d59330e6356f9da62e5b4a7ecf6a726665Vitaly Buka    Config::Transaction change{&config};
1674c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka    change.set_local_anonymous_access_role("viewer");
1684c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka  }
1694c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka  expected = R"({
1704c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka    'base': {
1714c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka      'firmwareVersion': '123123',
1724c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka      'localAnonymousAccessMaxRole': 'viewer',
1734c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka      'localDiscoveryEnabled': true,
1744c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka      'localPairingEnabled': true,
1754c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka      'network': {}
1764c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka    }
1774c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka  })";
1784c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka  EXPECT_JSON_EQ(expected, *state_manager_->GetStateValuesAsJson());
1792f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka}
1802f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka
18172410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly BukaTEST_F(BaseApiHandlerTest, UpdateDeviceInfo) {
18272410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  LoadCommands(R"({
18372410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka    'base': {
18472410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka      'updateDeviceInfo': {
18572410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka        'parameters': {
18672410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka          'description': 'string',
18772410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka          'name': {
18872410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka            'type': 'string',
18972410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka            'minLength': 1
19072410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka          },
19172410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka          'location': 'string'
19272410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka        },
19372410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka        'results': {}
19472410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka      }
19572410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka    }
19672410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  })");
19772410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka
19872410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  AddCommand(R"({
19972410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka    'name' : 'base.updateDeviceInfo',
20072410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka    'parameters': {
20172410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka      'name': 'testName',
20272410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka      'description': 'testDescription',
20372410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka      'location': 'testLocation'
20472410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka    }
20572410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  })");
20672410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka
207c11a17d59330e6356f9da62e5b4a7ecf6a726665Vitaly Buka  const Config& config{dev_reg_->GetConfig()};
20872410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  EXPECT_EQ("testName", config.name());
20972410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  EXPECT_EQ("testDescription", config.description());
21072410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka  EXPECT_EQ("testLocation", config.location());
2117e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko
2127e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko  AddCommand(R"({
2137e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko    'name' : 'base.updateDeviceInfo',
2147e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko    'parameters': {
2157e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko      'location': 'newLocation'
2167e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko    }
2177e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko  })");
2187e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko
2197e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko  EXPECT_EQ("testName", config.name());
2207e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko  EXPECT_EQ("testDescription", config.description());
2217e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko  EXPECT_EQ("newLocation", config.location());
22272410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka}
22372410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka
224b6f015a1ef3caffbc2af53184c0ec5342e42e048Vitaly Buka}  // namespace weave
225