14615e0d5aa416ab1a8596bde68f71f7ebe431b86Vitaly Buka// Copyright 2015 The Weave 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 52d16dfa768282b29f3fd5a905b52e3393a083e0dStefan Sauer#include "src/base_api_handler.h" 672410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka 772410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka#include <base/strings/string_number_conversions.h> 8ece713e1f51b6d9e7afda725ae258dc7e12f8c90Vitaly Buka#include <base/time/default_clock.h> 972410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka#include <base/values.h> 1072410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka#include <gtest/gtest.h> 1198d1fee994302f5e2ad7a7b60de2f2d74f35408bAlex Vakulenko#include <weave/provider/test/fake_task_runner.h> 121e3636732171afb8cceb9e5cb835ec6a93787dbaVitaly Buka#include <weave/provider/test/mock_config_store.h> 131e3636732171afb8cceb9e5cb835ec6a93787dbaVitaly Buka#include <weave/provider/test/mock_http_client.h> 14266e88b46c03657e0c55db7cd62596be88526400Vitaly Buka#include <weave/test/mock_device.h> 158a05bebb95f5f3f9bf6b72bd9e58b6ba6b8c9bddAlex Vakulenko#include <weave/test/unittest_utils.h> 1672410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka 17d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko#include "src/component_manager_impl.h" 182d16dfa768282b29f3fd5a905b52e3393a083e0dStefan Sauer#include "src/config.h" 192d16dfa768282b29f3fd5a905b52e3393a083e0dStefan Sauer#include "src/device_registration_info.h" 2072410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka 216b61e5728bb6b014d16f9606a428deb6cbbbd10cVitaly Bukausing testing::_; 22695a5fb8b11519ae4c70e3c1a457824727974b93Vitaly Bukausing testing::AnyOf; 23695a5fb8b11519ae4c70e3c1a457824727974b93Vitaly Bukausing testing::Eq; 249acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Bukausing testing::Invoke; 256b61e5728bb6b014d16f9606a428deb6cbbbd10cVitaly Bukausing testing::Return; 2668af3873b48442656a359a95ac218a5d9939c06eVitaly Bukausing testing::ReturnRef; 279acf8aa6176c1afaa587deac955acd6a7f9a46f4Vitaly Bukausing testing::StrictMock; 286b61e5728bb6b014d16f9606a428deb6cbbbd10cVitaly Buka 29b6f015a1ef3caffbc2af53184c0ec5342e42e048Vitaly Bukanamespace weave { 3072410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka 3172410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Bukaclass BaseApiHandlerTest : public ::testing::Test { 3272410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka protected: 3372410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka void SetUp() override { 34d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko EXPECT_CALL(device_, AddTraitDefinitionsFromJson(_)) 3568af3873b48442656a359a95ac218a5d9939c06eVitaly Buka .WillRepeatedly(Invoke([this](const std::string& json) { 36d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko EXPECT_TRUE(component_manager_.LoadTraits(json, nullptr)); 3768af3873b48442656a359a95ac218a5d9939c06eVitaly Buka })); 38d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko EXPECT_CALL(device_, SetStateProperties(_, _, _)) 3934668e731bb194b443bc0e6029d6d3583f08de28Vitaly Buka .WillRepeatedly( 4034668e731bb194b443bc0e6029d6d3583f08de28Vitaly Buka Invoke(&component_manager_, &ComponentManager::SetStateProperties)); 41d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko EXPECT_CALL(device_, SetStateProperty(_, _, _, _)) 4234668e731bb194b443bc0e6029d6d3583f08de28Vitaly Buka .WillRepeatedly( 4334668e731bb194b443bc0e6029d6d3583f08de28Vitaly Buka Invoke(&component_manager_, &ComponentManager::SetStateProperty)); 44d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko EXPECT_CALL(device_, AddComponent(_, _, _)) 45d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko .WillRepeatedly(Invoke([this](const std::string& name, 46d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko const std::vector<std::string>& traits, 47d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko ErrorPtr* error) { 48d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko return component_manager_.AddComponent("", name, traits, error); 493110deb4d4e3e2cc0f38f23990ef68cdcf3d8301Vitaly Buka })); 503110deb4d4e3e2cc0f38f23990ef68cdcf3d8301Vitaly Buka 5134668e731bb194b443bc0e6029d6d3583f08de28Vitaly Buka EXPECT_CALL(device_, 5234668e731bb194b443bc0e6029d6d3583f08de28Vitaly Buka AddCommandHandler(_, AnyOf("base.updateBaseConfiguration", 5334668e731bb194b443bc0e6029d6d3583f08de28Vitaly Buka "base.updateDeviceInfo"), 5434668e731bb194b443bc0e6029d6d3583f08de28Vitaly Buka _)) 5534668e731bb194b443bc0e6029d6d3583f08de28Vitaly Buka .WillRepeatedly( 5634668e731bb194b443bc0e6029d6d3583f08de28Vitaly Buka Invoke(&component_manager_, &ComponentManager::AddCommandHandler)); 57266e88b46c03657e0c55db7cd62596be88526400Vitaly Buka 58666b43e92729fa170bc53eab9040a4dfe58b8062Vitaly Buka dev_reg_.reset(new DeviceRegistrationInfo(&config_, &component_manager_, 59666b43e92729fa170bc53eab9040a4dfe58b8062Vitaly Buka nullptr, &http_client_, nullptr, 60666b43e92729fa170bc53eab9040a4dfe58b8062Vitaly Buka nullptr)); 6168af3873b48442656a359a95ac218a5d9939c06eVitaly Buka 6268af3873b48442656a359a95ac218a5d9939c06eVitaly Buka EXPECT_CALL(device_, GetSettings()) 6368af3873b48442656a359a95ac218a5d9939c06eVitaly Buka .WillRepeatedly(ReturnRef(dev_reg_->GetSettings())); 6468af3873b48442656a359a95ac218a5d9939c06eVitaly Buka 65266e88b46c03657e0c55db7cd62596be88526400Vitaly Buka handler_.reset(new BaseApiHandler{dev_reg_.get(), &device_}); 6672410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka } 6772410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka 6872410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka void AddCommand(const std::string& command) { 69d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko std::string id; 70d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko auto command_instance = component_manager_.ParseCommandInstance( 71d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko *test::CreateDictionaryValue(command.c_str()), Command::Origin::kLocal, 72d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko UserRole::kOwner, &id, nullptr); 73d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko ASSERT_NE(nullptr, command_instance.get()); 74d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko component_manager_.AddCommand(std::move(command_instance)); 750209da4821a019d2805d417b513b2743b2e750caVitaly Buka EXPECT_EQ(Command::State::kDone, 76d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko component_manager_.FindCommand(id)->GetState()); 7772410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka } 7872410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka 7968af3873b48442656a359a95ac218a5d9939c06eVitaly Buka std::unique_ptr<base::DictionaryValue> GetBaseState() { 80d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko std::unique_ptr<base::DictionaryValue> state; 81d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko std::string path = component_manager_.FindComponentWithTrait("base"); 82d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko EXPECT_FALSE(path.empty()); 83d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko const auto* component = component_manager_.FindComponent(path, nullptr); 84d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko CHECK(component); 85d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko const base::DictionaryValue* base_state = nullptr; 86d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko if (component->GetDictionary("state.base", &base_state)) 87d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko state.reset(base_state->DeepCopy()); 88d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko else 89d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko state.reset(new base::DictionaryValue); 9068af3873b48442656a359a95ac218a5d9939c06eVitaly Buka return state; 9168af3873b48442656a359a95ac218a5d9939c06eVitaly Buka } 9268af3873b48442656a359a95ac218a5d9939c06eVitaly Buka 931e3636732171afb8cceb9e5cb835ec6a93787dbaVitaly Buka provider::test::MockConfigStore config_store_; 94666b43e92729fa170bc53eab9040a4dfe58b8062Vitaly Buka Config config_{&config_store_}; 951e3636732171afb8cceb9e5cb835ec6a93787dbaVitaly Buka StrictMock<provider::test::MockHttpClient> http_client_; 9672410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka std::unique_ptr<DeviceRegistrationInfo> dev_reg_; 9798d1fee994302f5e2ad7a7b60de2f2d74f35408bAlex Vakulenko StrictMock<provider::test::FakeTaskRunner> task_runner_; 9898d1fee994302f5e2ad7a7b60de2f2d74f35408bAlex Vakulenko ComponentManagerImpl component_manager_{&task_runner_}; 9972410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka std::unique_ptr<BaseApiHandler> handler_; 100266e88b46c03657e0c55db7cd62596be88526400Vitaly Buka StrictMock<test::MockDevice> device_; 10172410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka}; 10272410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka 10380d66538455628c8389592a94252c34485ef3db6Vitaly BukaTEST_F(BaseApiHandlerTest, Initialization) { 104d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko const base::DictionaryValue* trait = nullptr; 105d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko ASSERT_TRUE(component_manager_.GetTraits().GetDictionary("base", &trait)); 10680d66538455628c8389592a94252c34485ef3db6Vitaly Buka 10780d66538455628c8389592a94252c34485ef3db6Vitaly Buka auto expected = R"({ 108d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko "commands": { 10980d66538455628c8389592a94252c34485ef3db6Vitaly Buka "updateBaseConfiguration": { 1107e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "minimalRole": "manager", 1117e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "parameters": { 1127e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "localAnonymousAccessMaxRole": { 1137e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "enum": [ "none", "viewer", "user" ], 1147e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "type": "string" 1157e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko }, 1167e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "localDiscoveryEnabled": { 1177e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "type": "boolean" 1187e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko }, 1197e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "localPairingEnabled": { 1207e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "type": "boolean" 1217e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko } 1227e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko } 12380d66538455628c8389592a94252c34485ef3db6Vitaly Buka }, 12480d66538455628c8389592a94252c34485ef3db6Vitaly Buka "updateDeviceInfo": { 1257e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "minimalRole": "manager", 1267e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "parameters": { 1277e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "description": { 1287e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "type": "string" 1297e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko }, 1307e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "location": { 1317e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "type": "string" 1327e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko }, 1337e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "name": { 1347e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko "type": "string" 1357e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko } 1367e894da1c5fcc4fafa6cc69b612c9c14f78aed51Alex Vakulenko } 1378d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko }, 1388d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "reboot": { 1398d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "minimalRole": "user", 1408d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "parameters": {}, 1418d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "errors": ["notEnoughBattery"] 1428d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko }, 1438d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "identify": { 1448d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "minimalRole": "user", 1458d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "parameters": {} 14680d66538455628c8389592a94252c34485ef3db6Vitaly Buka } 147d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko }, 1488d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "state": { 1498d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "firmwareVersion": { 1508d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "type": "string", 1518d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "isRequired": true 1528d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko }, 1538d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "localDiscoveryEnabled": { 1548d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "type": "boolean", 1558d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "isRequired": true 1568d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko }, 1578d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "localAnonymousAccessMaxRole": { 1588d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "type": "string", 1598d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "enum": [ "none", "viewer", "user" ], 1608d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "isRequired": true 1618d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko }, 1628d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "localPairingEnabled": { 1638d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "type": "boolean", 1648d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "isRequired": true 1658d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko }, 1668d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "connectionStatus": { 1678d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "type": "string" 1688d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko }, 1698d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "network": { 1708d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "type": "object", 1718d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "additionalProperties": false, 1728d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "properties": { 1738d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko "name": { "type": "string" } 1748d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko } 1758d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko } 1768d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko } 17780d66538455628c8389592a94252c34485ef3db6Vitaly Buka })"; 178d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko EXPECT_JSON_EQ(expected, *trait); 17980d66538455628c8389592a94252c34485ef3db6Vitaly Buka} 18080d66538455628c8389592a94252c34485ef3db6Vitaly Buka 1812f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly BukaTEST_F(BaseApiHandlerTest, UpdateBaseConfiguration) { 1825cf12a3e1f9e8e01f9fdb5322277c34096afde8bVitaly Buka const Settings& settings = dev_reg_->GetSettings(); 1832f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka 1842f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka AddCommand(R"({ 1852f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka 'name' : 'base.updateBaseConfiguration', 1868d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko 'component': 'base', 1872f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka 'parameters': { 1882f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka 'localDiscoveryEnabled': false, 1892f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka 'localAnonymousAccessMaxRole': 'none', 1902f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka 'localPairingEnabled': false 1912f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka } 1922f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka })"); 193b624bc47fb70294185478e4c758657a54b859cb1Vitaly Buka EXPECT_EQ(AuthScope::kNone, settings.local_anonymous_access_role); 1945cf12a3e1f9e8e01f9fdb5322277c34096afde8bVitaly Buka EXPECT_FALSE(settings.local_discovery_enabled); 1955cf12a3e1f9e8e01f9fdb5322277c34096afde8bVitaly Buka EXPECT_FALSE(settings.local_pairing_enabled); 1962f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka 1972f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka auto expected = R"({ 198d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko 'firmwareVersion': 'TEST_FIRMWARE', 199d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko 'localAnonymousAccessMaxRole': 'none', 200d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko 'localDiscoveryEnabled': false, 201d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko 'localPairingEnabled': false 2022f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka })"; 20368af3873b48442656a359a95ac218a5d9939c06eVitaly Buka EXPECT_JSON_EQ(expected, *GetBaseState()); 2042f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka 2052f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka AddCommand(R"({ 2062f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka 'name' : 'base.updateBaseConfiguration', 2078d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko 'component': 'base', 2082f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka 'parameters': { 2092f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka 'localDiscoveryEnabled': true, 2102f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka 'localAnonymousAccessMaxRole': 'user', 2112f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka 'localPairingEnabled': true 2122f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka } 2132f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka })"); 214b624bc47fb70294185478e4c758657a54b859cb1Vitaly Buka EXPECT_EQ(AuthScope::kUser, settings.local_anonymous_access_role); 2155cf12a3e1f9e8e01f9fdb5322277c34096afde8bVitaly Buka EXPECT_TRUE(settings.local_discovery_enabled); 2165cf12a3e1f9e8e01f9fdb5322277c34096afde8bVitaly Buka EXPECT_TRUE(settings.local_pairing_enabled); 2172f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka expected = R"({ 218d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko 'firmwareVersion': 'TEST_FIRMWARE', 219d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko 'localAnonymousAccessMaxRole': 'user', 220d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko 'localDiscoveryEnabled': true, 221d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko 'localPairingEnabled': true 2222f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka })"; 22368af3873b48442656a359a95ac218a5d9939c06eVitaly Buka EXPECT_JSON_EQ(expected, *GetBaseState()); 2244c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka 2254c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka { 2265cf12a3e1f9e8e01f9fdb5322277c34096afde8bVitaly Buka Config::Transaction change{dev_reg_->GetMutableConfig()}; 227b624bc47fb70294185478e4c758657a54b859cb1Vitaly Buka change.set_local_anonymous_access_role(AuthScope::kViewer); 2284c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka } 2294c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka expected = R"({ 230d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko 'firmwareVersion': 'TEST_FIRMWARE', 231d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko 'localAnonymousAccessMaxRole': 'viewer', 232d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko 'localDiscoveryEnabled': true, 233d91d625f29b752be035c5fb49bb29d7ee85fcb90Alex Vakulenko 'localPairingEnabled': true 2344c808b2cc7c83fc0468a803d9933d1629a007a29Vitaly Buka })"; 23568af3873b48442656a359a95ac218a5d9939c06eVitaly Buka EXPECT_JSON_EQ(expected, *GetBaseState()); 2362f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka} 2372f7efdb7a0f3ad0923d61290534b37c6c8351cc8Vitaly Buka 23872410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly BukaTEST_F(BaseApiHandlerTest, UpdateDeviceInfo) { 23972410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka AddCommand(R"({ 24072410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka 'name' : 'base.updateDeviceInfo', 2418d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko 'component': 'base', 24272410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka 'parameters': { 24372410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka 'name': 'testName', 24472410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka 'description': 'testDescription', 24572410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka 'location': 'testLocation' 24672410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka } 24772410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka })"); 24872410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka 2495cf12a3e1f9e8e01f9fdb5322277c34096afde8bVitaly Buka const Settings& config = dev_reg_->GetSettings(); 2505cf12a3e1f9e8e01f9fdb5322277c34096afde8bVitaly Buka EXPECT_EQ("testName", config.name); 2515cf12a3e1f9e8e01f9fdb5322277c34096afde8bVitaly Buka EXPECT_EQ("testDescription", config.description); 2525cf12a3e1f9e8e01f9fdb5322277c34096afde8bVitaly Buka EXPECT_EQ("testLocation", config.location); 2537e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko 2547e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko AddCommand(R"({ 2557e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko 'name' : 'base.updateDeviceInfo', 2568d0cfefae24985025a934ea5461a51472c59cfc0Alex Vakulenko 'component': 'base', 2577e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko 'parameters': { 2587e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko 'location': 'newLocation' 2597e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko } 2607e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko })"); 2617e8df46a6608bd9b398f160caf4b626d8717e437Alex Vakulenko 2625cf12a3e1f9e8e01f9fdb5322277c34096afde8bVitaly Buka EXPECT_EQ("testName", config.name); 2635cf12a3e1f9e8e01f9fdb5322277c34096afde8bVitaly Buka EXPECT_EQ("testDescription", config.description); 2645cf12a3e1f9e8e01f9fdb5322277c34096afde8bVitaly Buka EXPECT_EQ("newLocation", config.location); 26572410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka} 26672410b2cd9056ac69c35db55eea6bb5b6cc8e342Vitaly Buka 267b6f015a1ef3caffbc2af53184c0ec5342e42e048Vitaly Buka} // namespace weave 268