blob: e1b4b30f3a637d78682c82347996146168744a2a [file] [log] [blame]
Vitaly Bukaee7a3af2015-05-14 16:57:23 -07001// Copyright 2014 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "buffet/buffet_config.h"
6
7#include <base/bind.h>
8#include <gmock/gmock.h>
9#include <gtest/gtest.h>
10
11#include "buffet/commands/unittest_utils.h"
12#include "buffet/storage_impls.h"
13
14using testing::_;
15
16namespace buffet {
17
18class BuffetConfigTest : public ::testing::Test {
19 protected:
20 void SetUp() override {
21 EXPECT_CALL(*this, OnConfigChanged(_))
22 .Times(1); // Called from AddOnChangedCallback
23
24 std::unique_ptr<StorageInterface> storage{new MemStorage};
25 storage_ = storage.get();
26 config_.reset(new BuffetConfig{std::move(storage)});
27
28 config_->AddOnChangedCallback(
29 base::Bind(&BuffetConfigTest::OnConfigChanged, base::Unretained(this)));
30 }
31
32 MOCK_METHOD1(OnConfigChanged, void(const BuffetConfig&));
33
34 StorageInterface* storage_{nullptr};
35 std::unique_ptr<BuffetConfig> config_;
36 const BuffetConfig default_{nullptr};
37};
38
39TEST_F(BuffetConfigTest, NoStorage) {
40 BuffetConfig config{nullptr};
41 BuffetConfig::Transaction change{&config};
42 change.Commit();
43}
44
45TEST_F(BuffetConfigTest, Defaults) {
46 EXPECT_EQ("58855907228.apps.googleusercontent.com", config_->client_id());
47 EXPECT_EQ("eHSAREAHrIqPsHBxCE9zPPBi", config_->client_secret());
48 EXPECT_EQ("AIzaSyDSq46gG-AxUnC3zoqD9COIPrjolFsMfMA", config_->api_key());
49 EXPECT_EQ("https://accounts.google.com/o/oauth2/", config_->oauth_url());
50 EXPECT_EQ("https://www.googleapis.com/clouddevices/v1/",
51 config_->service_url());
52 EXPECT_EQ("Chromium", config_->oem_name());
53 EXPECT_EQ("Brillo", config_->model_name());
54 EXPECT_EQ("AAAAA", config_->model_id());
55 EXPECT_EQ("vendor", config_->device_kind());
56 EXPECT_EQ(7000, config_->polling_period_ms());
57 EXPECT_EQ("Developer device", config_->name());
58 EXPECT_EQ("", config_->description());
59 EXPECT_EQ("", config_->location());
60 EXPECT_EQ("viewer", config_->local_anonymous_access_role());
61 EXPECT_TRUE(config_->local_pairing_enabled());
62 EXPECT_TRUE(config_->local_discovery_enabled());
63 EXPECT_EQ("", config_->device_id());
64 EXPECT_EQ("", config_->refresh_token());
65 EXPECT_EQ("", config_->robot_account());
66}
67
68TEST_F(BuffetConfigTest, LoadConfig) {
69 chromeos::KeyValueStore config_store;
70 config_store.SetString("client_id", "conf_client_id");
71 config_store.SetString("client_secret", "conf_client_secret");
72 config_store.SetString("api_key", "conf_api_key");
73 config_store.SetString("oauth_url", "conf_oauth_url");
74 config_store.SetString("service_url", "conf_service_url");
75 config_store.SetString("oem_name", "conf_oem_name");
76 config_store.SetString("model_name", "conf_model_name");
77 config_store.SetString("model_id", "ABCDE");
78 config_store.SetString("polling_period_ms", "12345");
79 config_store.SetString("name", "conf_name");
80 config_store.SetString("description", "conf_description");
81 config_store.SetString("location", "conf_location");
82 config_store.SetString("local_anonymous_access_role", "user");
83 config_store.SetBoolean("local_pairing_enabled", false);
84 config_store.SetBoolean("local_discovery_enabled", false);
85
86 // Following will be ignored.
87 config_store.SetString("device_kind", "conf_device_kind");
88 config_store.SetString("device_id", "conf_device_id");
89 config_store.SetString("refresh_token", "conf_refresh_token");
90 config_store.SetString("robot_account", "conf_robot_account");
91
92 EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
93 config_->Load(config_store);
94
95 EXPECT_EQ("conf_client_id", config_->client_id());
96 EXPECT_EQ("conf_client_secret", config_->client_secret());
97 EXPECT_EQ("conf_api_key", config_->api_key());
98 EXPECT_EQ("conf_oauth_url", config_->oauth_url());
99 EXPECT_EQ("conf_service_url", config_->service_url());
100 EXPECT_EQ("conf_oem_name", config_->oem_name());
101 EXPECT_EQ("conf_model_name", config_->model_name());
102 EXPECT_EQ("ABCDE", config_->model_id());
103 EXPECT_EQ("developmentBoard", config_->device_kind());
104 EXPECT_EQ(12345, config_->polling_period_ms());
105 EXPECT_EQ("conf_name", config_->name());
106 EXPECT_EQ("conf_description", config_->description());
107 EXPECT_EQ("conf_location", config_->location());
108 EXPECT_EQ("user", config_->local_anonymous_access_role());
109 EXPECT_FALSE(config_->local_pairing_enabled());
110 EXPECT_FALSE(config_->local_discovery_enabled());
111
112 // Not from config.
113 EXPECT_EQ(default_.device_id(), config_->device_id());
114 EXPECT_EQ(default_.refresh_token(), config_->refresh_token());
115 EXPECT_EQ(default_.robot_account(), config_->robot_account());
116
117 // Nothing should be saved yet.
118 EXPECT_JSON_EQ("{}", *storage_->Load());
119
120 BuffetConfig::Transaction change{config_.get()};
121 EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
122 change.Commit();
123
124 auto expected = R"({
Vitaly Bukaff81db62015-05-14 21:25:45 -0700125 'api_key': 'conf_api_key',
126 'client_id': 'conf_client_id',
127 'client_secret': 'conf_client_secret',
128 'description': 'conf_description',
129 'device_id': '',
130 'local_anonymous_access_role': 'user',
131 'local_discovery_enabled': false,
132 'local_pairing_enabled': false,
133 'location': 'conf_location',
134 'name': 'conf_name',
135 'oauth_url': 'conf_oauth_url',
136 'refresh_token': '',
137 'robot_account': '',
138 'service_url': 'conf_service_url'
Vitaly Bukaee7a3af2015-05-14 16:57:23 -0700139 })";
140 EXPECT_JSON_EQ(expected, *storage_->Load());
141}
142
143TEST_F(BuffetConfigTest, LoadState) {
144 auto state = R"({
Vitaly Bukaff81db62015-05-14 21:25:45 -0700145 'api_key': 'state_api_key',
146 'client_id': 'state_client_id',
147 'client_secret': 'state_client_secret',
148 'description': 'state_description',
149 'device_id': 'state_device_id',
150 'local_anonymous_access_role': 'user',
151 'local_discovery_enabled': false,
152 'local_pairing_enabled': false,
153 'location': 'state_location',
154 'name': 'state_name',
155 'oauth_url': 'state_oauth_url',
156 'refresh_token': 'state_refresh_token',
157 'robot_account': 'state_robot_account',
158 'service_url': 'state_service_url'
Vitaly Bukaee7a3af2015-05-14 16:57:23 -0700159 })";
160 storage_->Save(*buffet::unittests::CreateDictionaryValue(state));
161
162 chromeos::KeyValueStore config_store;
163 EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
164 config_->Load(config_store);
165
166 // Clear storage.
167 storage_->Save(base::DictionaryValue());
168
Vitaly Bukaff81db62015-05-14 21:25:45 -0700169 EXPECT_EQ("state_client_id", config_->client_id());
170 EXPECT_EQ("state_client_secret", config_->client_secret());
171 EXPECT_EQ("state_api_key", config_->api_key());
172 EXPECT_EQ("state_oauth_url", config_->oauth_url());
173 EXPECT_EQ("state_service_url", config_->service_url());
Vitaly Bukaee7a3af2015-05-14 16:57:23 -0700174 EXPECT_EQ(default_.oem_name(), config_->oem_name());
175 EXPECT_EQ(default_.model_name(), config_->model_name());
176 EXPECT_EQ(default_.model_id(), config_->model_id());
177 EXPECT_EQ(default_.device_kind(), config_->device_kind());
178 EXPECT_EQ(default_.polling_period_ms(), config_->polling_period_ms());
179 EXPECT_EQ("state_name", config_->name());
180 EXPECT_EQ("state_description", config_->description());
181 EXPECT_EQ("state_location", config_->location());
182 EXPECT_EQ("user", config_->local_anonymous_access_role());
183 EXPECT_FALSE(config_->local_pairing_enabled());
184 EXPECT_FALSE(config_->local_discovery_enabled());
185 EXPECT_EQ("state_device_id", config_->device_id());
186 EXPECT_EQ("state_refresh_token", config_->refresh_token());
187 EXPECT_EQ("state_robot_account", config_->robot_account());
188
189 // Nothing should be saved yet.
190 EXPECT_JSON_EQ("{}", *storage_->Load());
191
192 BuffetConfig::Transaction change{config_.get()};
193 EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
194 change.Commit();
195
196 EXPECT_JSON_EQ(state, *storage_->Load());
197}
198
199TEST_F(BuffetConfigTest, Setters) {
200 BuffetConfig::Transaction change{config_.get()};
201
Vitaly Bukaff81db62015-05-14 21:25:45 -0700202 change.set_client_id("set_client_id");
203 EXPECT_EQ("set_client_id", config_->client_id());
204
205 change.set_client_secret("set_client_secret");
206 EXPECT_EQ("set_client_secret", config_->client_secret());
207
208 change.set_api_key("set_api_key");
209 EXPECT_EQ("set_api_key", config_->api_key());
210
211 change.set_oauth_url("set_oauth_url");
212 EXPECT_EQ("set_oauth_url", config_->oauth_url());
213
214 change.set_service_url("set_service_url");
215 EXPECT_EQ("set_service_url", config_->service_url());
216
Vitaly Bukaee7a3af2015-05-14 16:57:23 -0700217 change.set_name("set_name");
218 EXPECT_EQ("set_name", config_->name());
219
220 change.set_description("set_description");
221 EXPECT_EQ("set_description", config_->description());
222
223 change.set_location("set_location");
224 EXPECT_EQ("set_location", config_->location());
225
226 change.set_local_anonymous_access_role("viewer");
227 EXPECT_EQ("viewer", config_->local_anonymous_access_role());
228
229 change.set_local_anonymous_access_role("none");
230 EXPECT_EQ("none", config_->local_anonymous_access_role());
231
232 change.set_local_anonymous_access_role("user");
233 EXPECT_EQ("user", config_->local_anonymous_access_role());
234
235 change.set_local_discovery_enabled(false);
236 EXPECT_FALSE(config_->local_discovery_enabled());
237
238 change.set_local_pairing_enabled(false);
239 EXPECT_FALSE(config_->local_pairing_enabled());
240
241 change.set_local_discovery_enabled(true);
242 EXPECT_TRUE(config_->local_discovery_enabled());
243
244 change.set_local_pairing_enabled(true);
245 EXPECT_TRUE(config_->local_pairing_enabled());
246
247 change.set_device_id("set_id");
248 EXPECT_EQ("set_id", config_->device_id());
249
250 change.set_refresh_token("set_token");
251 EXPECT_EQ("set_token", config_->refresh_token());
252
253 change.set_robot_account("set_account");
254 EXPECT_EQ("set_account", config_->robot_account());
255
256 EXPECT_CALL(*this, OnConfigChanged(_)).Times(1);
257 change.Commit();
258
259 auto expected = R"({
Vitaly Bukaff81db62015-05-14 21:25:45 -0700260 'api_key': 'set_api_key',
261 'client_id': 'set_client_id',
262 'client_secret': 'set_client_secret',
Vitaly Bukaee7a3af2015-05-14 16:57:23 -0700263 'description': 'set_description',
264 'device_id': 'set_id',
265 'local_anonymous_access_role': 'user',
266 'local_discovery_enabled': true,
267 'local_pairing_enabled': true,
268 'location': 'set_location',
269 'name': 'set_name',
Vitaly Bukaff81db62015-05-14 21:25:45 -0700270 'oauth_url': 'set_oauth_url',
Vitaly Bukaee7a3af2015-05-14 16:57:23 -0700271 'refresh_token': 'set_token',
Vitaly Bukaff81db62015-05-14 21:25:45 -0700272 'robot_account': 'set_account',
273 'service_url': 'set_service_url'
Vitaly Bukaee7a3af2015-05-14 16:57:23 -0700274 })";
275 EXPECT_JSON_EQ(expected, *storage_->Load());
276}
277} // namespace buffet