blob: bf7fdf4980992d2170858635cb3cce8ce3535c2f [file] [log] [blame]
Avi Drissman4a8573c2022-09-09 19:35:541// Copyright 2020 The Chromium Authors
Adam Norbergc7ab1c52021-01-19 21:05:212// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Sorin Jianu6badd002024-01-11 17:29:025#include "chrome/updater/external_constants_builder.h"
Adam Norbergc7ab1c52021-01-19 21:05:216
Sorin Jianua4b3d382023-11-10 20:08:467#include <optional>
Adam Norbergc7ab1c52021-01-19 21:05:218#include <string>
9#include <vector>
10
11#include "base/files/file_path.h"
Joshua Pawlicki34aacc12021-08-24 21:22:2112#include "base/memory/scoped_refptr.h"
Xiaoling Bao760b128a2024-10-02 23:17:1513#include "base/time/time.h"
S. Ganesh5b7c6a72022-05-21 01:20:5614#include "base/values.h"
Noah Rose Ledesma38b7be12022-09-26 19:15:3415#include "build/build_config.h"
Adam Norbergc7ab1c52021-01-19 21:05:2116#include "chrome/updater/constants.h"
17#include "chrome/updater/external_constants.h"
Joshua Pawlicki58a597ed2021-06-10 17:00:5218#include "chrome/updater/external_constants_default.h"
Adam Norbergc7ab1c52021-01-19 21:05:2119#include "chrome/updater/external_constants_override.h"
Sorin Jianua961b612024-05-02 22:07:5720#include "chrome/updater/test/test_scope.h"
21#include "chrome/updater/test/unit_test_util.h"
Adam Norbergc7ab1c52021-01-19 21:05:2122#include "chrome/updater/updater_branding.h"
Noah Rose Ledesmafc9b3652022-11-12 02:10:4923#include "chrome/updater/util/util.h"
Sorin Jianu6badd002024-01-11 17:29:0224#include "testing/gtest/include/gtest/gtest.h"
Adam Norbergc7ab1c52021-01-19 21:05:2125#include "url/gurl.h"
26
27namespace updater {
Adam Norbergc7ab1c52021-01-19 21:05:2128
29class ExternalConstantsBuilderTests : public ::testing::Test {
30 protected:
Sorin Jianu86d1ef62022-10-06 22:16:0231 void SetUp() override {
32 EXPECT_TRUE(
33 test::DeleteFileAndEmptyParentDirectories(overrides_file_path_));
34 }
35 void TearDown() override {
36 EXPECT_TRUE(
37 test::DeleteFileAndEmptyParentDirectories(overrides_file_path_));
38 }
39
40 private:
41 // This test runs non-elevated.
Sorin Jianua4b3d382023-11-10 20:08:4642 const std::optional<base::FilePath> overrides_file_path_ =
Joshua Pawlicki3185e6a2023-02-07 19:32:3143 GetOverrideFilePath(UpdaterScope::kUser);
Adam Norbergc7ab1c52021-01-19 21:05:2144};
45
Adam Norbergc7ab1c52021-01-19 21:05:2146TEST_F(ExternalConstantsBuilderTests, TestOverridingNothing) {
47 EXPECT_TRUE(ExternalConstantsBuilder().Overwrite());
48
Joshua Pawlicki34aacc12021-08-24 21:22:2149 scoped_refptr<ExternalConstantsOverrider> verifier =
Adam Norbergc7ab1c52021-01-19 21:05:2150 ExternalConstantsOverrider::FromDefaultJSONFile(
Joshua Pawlicki58a597ed2021-06-10 17:00:5251 CreateDefaultExternalConstants());
Adam Norbergc7ab1c52021-01-19 21:05:2152
53 EXPECT_TRUE(verifier->UseCUP());
54
55 std::vector<GURL> urls = verifier->UpdateURL();
56 ASSERT_EQ(urls.size(), 1ul);
57 EXPECT_EQ(urls[0], GURL(UPDATE_CHECK_URL));
58
59 EXPECT_EQ(verifier->InitialDelay(), kInitialDelay);
Noah Rose Ledesmad391ac332022-12-13 21:09:0660 EXPECT_EQ(verifier->ServerKeepAliveTime(), kServerKeepAliveTime);
S. Ganeshf0d3ab02025-01-18 04:02:4261 EXPECT_EQ(verifier->DictPolicies().size(), 0U);
Adam Norbergc7ab1c52021-01-19 21:05:2162}
63
64TEST_F(ExternalConstantsBuilderTests, TestOverridingEverything) {
S. Ganeshf0d3ab02025-01-18 04:02:4265 base::Value::Dict dict_policies;
66 dict_policies.Set("a", 1);
67 dict_policies.Set("b", 2);
S. Ganesh5b7c6a72022-05-21 01:20:5668
Adam Norbergc7ab1c52021-01-19 21:05:2169 ExternalConstantsBuilder builder;
Joshua Pawlicki9154e5f062025-01-31 19:53:2070 builder.SetUpdateURL(std::vector<std::string>{"https://localhost/1/www"})
71 .SetCrashUploadURL("https://localhost/1/crash")
72 .SetDeviceManagementURL("https://localhost/1/dm")
73 .SetAppLogoURL("https://localhost/1/applogo/")
Adam Norbergc7ab1c52021-01-19 21:05:2174 .SetUseCUP(false)
Noah Rose Ledesmad391ac332022-12-13 21:09:0675 .SetInitialDelay(base::Seconds(123))
76 .SetServerKeepAliveTime(base::Seconds(2))
S. Ganeshf0d3ab02025-01-18 04:02:4277 .SetDictPolicies(dict_policies)
Joshua Pawlickie5812592023-06-12 17:24:5478 .SetOverinstallTimeout(base::Seconds(3))
Xiaoling Baobea69462023-08-01 01:59:0379 .SetIdleCheckPeriod(base::Seconds(4))
Sorin Jianua4b3d382023-11-10 20:08:4680 .SetMachineManaged(std::make_optional(true))
Xiaoling Bao760b128a2024-10-02 23:17:1581 .SetEnableDiffUpdates(true)
82 .SetCecaConnectionTimeout(base::Seconds(7));
Adam Norbergc7ab1c52021-01-19 21:05:2183 EXPECT_TRUE(builder.Overwrite());
84
Joshua Pawlicki34aacc12021-08-24 21:22:2185 scoped_refptr<ExternalConstantsOverrider> verifier =
Adam Norbergc7ab1c52021-01-19 21:05:2186 ExternalConstantsOverrider::FromDefaultJSONFile(
Joshua Pawlicki58a597ed2021-06-10 17:00:5287 CreateDefaultExternalConstants());
Adam Norbergc7ab1c52021-01-19 21:05:2188
89 EXPECT_FALSE(verifier->UseCUP());
90
91 std::vector<GURL> urls = verifier->UpdateURL();
92 ASSERT_EQ(urls.size(), 1ul);
Joshua Pawlicki9154e5f062025-01-31 19:53:2093 EXPECT_EQ(urls[0], GURL("https://localhost/1/www"));
Adam Norbergc7ab1c52021-01-19 21:05:2194
Joshua Pawlicki9154e5f062025-01-31 19:53:2095 EXPECT_EQ(verifier->CrashUploadURL(), GURL("https://localhost/1/crash"));
96 EXPECT_EQ(verifier->DeviceManagementURL(), GURL("https://localhost/1/dm"));
97 EXPECT_EQ(verifier->AppLogoURL(), GURL("https://localhost/1/applogo/"));
Noah Rose Ledesmad391ac332022-12-13 21:09:0698 EXPECT_EQ(verifier->InitialDelay(), base::Seconds(123));
99 EXPECT_EQ(verifier->ServerKeepAliveTime(), base::Seconds(2));
S. Ganeshf0d3ab02025-01-18 04:02:42100 EXPECT_EQ(verifier->DictPolicies().size(), 2U);
Joshua Pawlickie5812592023-06-12 17:24:54101 EXPECT_EQ(verifier->OverinstallTimeout(), base::Seconds(3));
102 EXPECT_EQ(verifier->IdleCheckPeriod(), base::Seconds(4));
Xiaoling Baobea69462023-08-01 01:59:03103 EXPECT_TRUE(verifier->IsMachineManaged().has_value());
104 EXPECT_TRUE(verifier->IsMachineManaged().value());
Adam Norberge158b072023-10-19 18:55:43105 EXPECT_TRUE(verifier->EnableDiffUpdates());
Xiaoling Bao760b128a2024-10-02 23:17:15106 EXPECT_EQ(verifier->CecaConnectionTimeout(), base::Seconds(7));
Adam Norbergc7ab1c52021-01-19 21:05:21107}
108
109TEST_F(ExternalConstantsBuilderTests, TestPartialOverrideWithMultipleURLs) {
110 ExternalConstantsBuilder builder;
111 EXPECT_TRUE(builder
112 .SetUpdateURL(std::vector<std::string>{
Joshua Pawlicki9154e5f062025-01-31 19:53:20113 "https://localhost/update", "https://localhost/update2"})
Adam Norbergc7ab1c52021-01-19 21:05:21114 .Overwrite());
115
Joshua Pawlicki34aacc12021-08-24 21:22:21116 scoped_refptr<ExternalConstantsOverrider> verifier =
Adam Norbergc7ab1c52021-01-19 21:05:21117 ExternalConstantsOverrider::FromDefaultJSONFile(
Joshua Pawlicki58a597ed2021-06-10 17:00:52118 CreateDefaultExternalConstants());
Adam Norbergc7ab1c52021-01-19 21:05:21119
120 EXPECT_TRUE(verifier->UseCUP());
121
122 std::vector<GURL> urls = verifier->UpdateURL();
123 ASSERT_EQ(urls.size(), 2ul);
Joshua Pawlicki9154e5f062025-01-31 19:53:20124 EXPECT_EQ(urls[0], GURL("https://localhost/update"));
125 EXPECT_EQ(urls[1], GURL("https://localhost/update2"));
Adam Norbergc7ab1c52021-01-19 21:05:21126
Xiaoling Bao616a5352023-04-03 22:00:58127 EXPECT_EQ(verifier->CrashUploadURL(), GURL(CRASH_UPLOAD_URL));
128 EXPECT_EQ(verifier->DeviceManagementURL(),
129 GURL(DEVICE_MANAGEMENT_SERVER_URL));
S. Ganesh0f34f8b2024-03-13 21:08:44130 EXPECT_EQ(verifier->AppLogoURL(), GURL(APP_LOGO_URL));
Adam Norbergc7ab1c52021-01-19 21:05:21131 EXPECT_EQ(verifier->InitialDelay(), kInitialDelay);
Noah Rose Ledesmad391ac332022-12-13 21:09:06132 EXPECT_EQ(verifier->ServerKeepAliveTime(), kServerKeepAliveTime);
S. Ganeshf0d3ab02025-01-18 04:02:42133 EXPECT_EQ(verifier->DictPolicies().size(), 0U);
Adam Norbergc7ab1c52021-01-19 21:05:21134}
135
136TEST_F(ExternalConstantsBuilderTests, TestClearedEverything) {
137 ExternalConstantsBuilder builder;
138 EXPECT_TRUE(builder
139 .SetUpdateURL(std::vector<std::string>{
Joshua Pawlicki9154e5f062025-01-31 19:53:20140 "https://localhost/1/localhost/update", "https://www"})
141 .SetCrashUploadURL("https://localhost/1/crash")
142 .SetDeviceManagementURL("https://localhost/1/dm")
143 .SetAppLogoURL("https://localhost/1/applogo/")
Adam Norbergc7ab1c52021-01-19 21:05:21144 .SetUseCUP(false)
Noah Rose Ledesmad391ac332022-12-13 21:09:06145 .SetInitialDelay(base::Seconds(123.4))
Adam Norberge158b072023-10-19 18:55:43146 .SetEnableDiffUpdates(true)
Adam Norbergc7ab1c52021-01-19 21:05:21147 .ClearUpdateURL()
Xiaoling Bao616a5352023-04-03 22:00:58148 .ClearCrashUploadURL()
149 .ClearDeviceManagementURL()
S. Ganesh0f34f8b2024-03-13 21:08:44150 .ClearAppLogoURL()
Adam Norbergc7ab1c52021-01-19 21:05:21151 .ClearUseCUP()
152 .ClearInitialDelay()
Mila Green59389f12021-02-03 20:52:32153 .ClearServerKeepAliveSeconds()
S. Ganeshf0d3ab02025-01-18 04:02:42154 .ClearDictPolicies()
Joshua Pawlickie5812592023-06-12 17:24:54155 .ClearOverinstallTimeout()
156 .ClearIdleCheckPeriod()
Xiaoling Baobea69462023-08-01 01:59:03157 .ClearMachineManaged()
Adam Norberge158b072023-10-19 18:55:43158 .ClearEnableDiffUpdates()
Xiaoling Bao760b128a2024-10-02 23:17:15159 .ClearCecaConnectionTimeout()
Adam Norbergc7ab1c52021-01-19 21:05:21160 .Overwrite());
161
Joshua Pawlicki34aacc12021-08-24 21:22:21162 scoped_refptr<ExternalConstantsOverrider> verifier =
Adam Norbergc7ab1c52021-01-19 21:05:21163 ExternalConstantsOverrider::FromDefaultJSONFile(
Joshua Pawlicki58a597ed2021-06-10 17:00:52164 CreateDefaultExternalConstants());
Adam Norbergc7ab1c52021-01-19 21:05:21165 EXPECT_TRUE(verifier->UseCUP());
166
167 std::vector<GURL> urls = verifier->UpdateURL();
168 ASSERT_EQ(urls.size(), 1ul);
169 EXPECT_EQ(urls[0], GURL(UPDATE_CHECK_URL));
170
Xiaoling Bao616a5352023-04-03 22:00:58171 EXPECT_EQ(verifier->CrashUploadURL(), GURL(CRASH_UPLOAD_URL));
172 EXPECT_EQ(verifier->DeviceManagementURL(),
173 GURL(DEVICE_MANAGEMENT_SERVER_URL));
S. Ganesh0f34f8b2024-03-13 21:08:44174 EXPECT_EQ(verifier->AppLogoURL(), GURL(APP_LOGO_URL));
Adam Norbergc7ab1c52021-01-19 21:05:21175 EXPECT_EQ(verifier->InitialDelay(), kInitialDelay);
Noah Rose Ledesmad391ac332022-12-13 21:09:06176 EXPECT_EQ(verifier->ServerKeepAliveTime(), kServerKeepAliveTime);
S. Ganeshf0d3ab02025-01-18 04:02:42177 EXPECT_EQ(verifier->DictPolicies().size(), 0U);
Xiaoling Baobea69462023-08-01 01:59:03178 EXPECT_FALSE(verifier->IsMachineManaged().has_value());
Adam Norberge158b072023-10-19 18:55:43179 EXPECT_FALSE(verifier->EnableDiffUpdates());
Xiaoling Bao760b128a2024-10-02 23:17:15180 EXPECT_EQ(verifier->CecaConnectionTimeout(), kCecaConnectionTimeout);
Adam Norbergc7ab1c52021-01-19 21:05:21181}
182
183TEST_F(ExternalConstantsBuilderTests, TestOverSet) {
S. Ganeshf0d3ab02025-01-18 04:02:42184 base::Value::Dict dict_policies;
185 dict_policies.Set("a", 1);
S. Ganesh5b7c6a72022-05-21 01:20:56186
Adam Norbergc7ab1c52021-01-19 21:05:21187 EXPECT_TRUE(
188 ExternalConstantsBuilder()
Joshua Pawlicki9154e5f062025-01-31 19:53:20189 .SetUpdateURL(std::vector<std::string>{"https://localhost/update"})
190 .SetCrashUploadURL("https://localhost/crash")
191 .SetDeviceManagementURL("https://localhost/dm")
192 .SetAppLogoURL("https://localhost/logo/")
Adam Norbergc7ab1c52021-01-19 21:05:21193 .SetUseCUP(true)
Noah Rose Ledesmad391ac332022-12-13 21:09:06194 .SetInitialDelay(base::Seconds(123.4))
195 .SetServerKeepAliveTime(base::Seconds(2))
Sorin Jianua4b3d382023-11-10 20:08:46196 .SetMachineManaged(std::make_optional(true))
S. Ganeshf0d3ab02025-01-18 04:02:42197 .SetDictPolicies(dict_policies)
Adam Norberge158b072023-10-19 18:55:43198 .SetEnableDiffUpdates(false)
Joshua Pawlicki9154e5f062025-01-31 19:53:20199 .SetUpdateURL(std::vector<std::string>{"https://localhost/1/www"})
200 .SetCrashUploadURL("https://localhost/1/crash")
201 .SetDeviceManagementURL("https://localhost/1/dm")
202 .SetAppLogoURL("https://localhost/1/applogo/")
Adam Norbergc7ab1c52021-01-19 21:05:21203 .SetUseCUP(false)
Noah Rose Ledesmad391ac332022-12-13 21:09:06204 .SetInitialDelay(base::Seconds(937.6))
205 .SetServerKeepAliveTime(base::Seconds(3))
Sorin Jianua4b3d382023-11-10 20:08:46206 .SetMachineManaged(std::make_optional(false))
Adam Norberge158b072023-10-19 18:55:43207 .SetEnableDiffUpdates(true)
Xiaoling Bao760b128a2024-10-02 23:17:15208 .SetCecaConnectionTimeout(base::Seconds(38))
Adam Norbergc7ab1c52021-01-19 21:05:21209 .Overwrite());
210
211 // Only the second set of values should be observed.
Joshua Pawlicki34aacc12021-08-24 21:22:21212 scoped_refptr<ExternalConstantsOverrider> verifier =
Adam Norbergc7ab1c52021-01-19 21:05:21213 ExternalConstantsOverrider::FromDefaultJSONFile(
Joshua Pawlicki58a597ed2021-06-10 17:00:52214 CreateDefaultExternalConstants());
Adam Norbergc7ab1c52021-01-19 21:05:21215 EXPECT_FALSE(verifier->UseCUP());
216
217 std::vector<GURL> urls = verifier->UpdateURL();
218 ASSERT_EQ(urls.size(), 1ul);
Joshua Pawlicki9154e5f062025-01-31 19:53:20219 EXPECT_EQ(urls[0], GURL("https://localhost/1/www"));
Adam Norbergc7ab1c52021-01-19 21:05:21220
Joshua Pawlicki9154e5f062025-01-31 19:53:20221 EXPECT_EQ(verifier->CrashUploadURL(), GURL("https://localhost/1/crash"));
222 EXPECT_EQ(verifier->DeviceManagementURL(), GURL("https://localhost/1/dm"));
223 EXPECT_EQ(verifier->AppLogoURL(), GURL("https://localhost/1/applogo/"));
Noah Rose Ledesmad391ac332022-12-13 21:09:06224 EXPECT_EQ(verifier->InitialDelay(), base::Seconds(937.6));
225 EXPECT_EQ(verifier->ServerKeepAliveTime(), base::Seconds(3));
S. Ganeshf0d3ab02025-01-18 04:02:42226 EXPECT_EQ(verifier->DictPolicies().size(), 1U);
Xiaoling Baobea69462023-08-01 01:59:03227 EXPECT_TRUE(verifier->IsMachineManaged().has_value());
228 EXPECT_FALSE(verifier->IsMachineManaged().value());
Adam Norberge158b072023-10-19 18:55:43229 EXPECT_TRUE(verifier->EnableDiffUpdates());
Xiaoling Bao760b128a2024-10-02 23:17:15230 EXPECT_EQ(verifier->CecaConnectionTimeout(), base::Seconds(38));
Adam Norbergc7ab1c52021-01-19 21:05:21231}
232
233TEST_F(ExternalConstantsBuilderTests, TestReuseBuilder) {
234 ExternalConstantsBuilder builder;
S. Ganesh5b7c6a72022-05-21 01:20:56235
S. Ganeshf0d3ab02025-01-18 04:02:42236 base::Value::Dict dict_policies;
237 dict_policies.Set("a", 1);
238 dict_policies.Set("b", 2);
S. Ganesh5b7c6a72022-05-21 01:20:56239
Adam Norbergc7ab1c52021-01-19 21:05:21240 EXPECT_TRUE(
Joshua Pawlicki9154e5f062025-01-31 19:53:20241 builder.SetUpdateURL(std::vector<std::string>{"https://localhost/update"})
242 .SetCrashUploadURL("https://localhost/crash")
243 .SetDeviceManagementURL("https://localhost/dm")
244 .SetAppLogoURL("https://localhost/logo/")
Adam Norbergc7ab1c52021-01-19 21:05:21245 .SetUseCUP(false)
Noah Rose Ledesmad391ac332022-12-13 21:09:06246 .SetInitialDelay(base::Seconds(123.4))
247 .SetServerKeepAliveTime(base::Seconds(3))
Joshua Pawlicki9154e5f062025-01-31 19:53:20248 .SetUpdateURL(std::vector<std::string>{"https://localhost/1/www"})
S. Ganeshf0d3ab02025-01-18 04:02:42249 .SetDictPolicies(dict_policies)
Sorin Jianua4b3d382023-11-10 20:08:46250 .SetMachineManaged(std::make_optional(true))
Adam Norberge158b072023-10-19 18:55:43251 .SetEnableDiffUpdates(true)
Xiaoling Bao760b128a2024-10-02 23:17:15252 .SetCecaConnectionTimeout(base::Seconds(5))
Adam Norbergc7ab1c52021-01-19 21:05:21253 .Overwrite());
254
Joshua Pawlicki34aacc12021-08-24 21:22:21255 scoped_refptr<ExternalConstantsOverrider> verifier =
Adam Norbergc7ab1c52021-01-19 21:05:21256 ExternalConstantsOverrider::FromDefaultJSONFile(
Joshua Pawlicki58a597ed2021-06-10 17:00:52257 CreateDefaultExternalConstants());
Adam Norbergc7ab1c52021-01-19 21:05:21258
259 EXPECT_FALSE(verifier->UseCUP());
260
261 std::vector<GURL> urls = verifier->UpdateURL();
262 ASSERT_EQ(urls.size(), 1ul);
Joshua Pawlicki9154e5f062025-01-31 19:53:20263 EXPECT_EQ(urls[0], GURL("https://localhost/1/www"));
Adam Norbergc7ab1c52021-01-19 21:05:21264
Joshua Pawlicki9154e5f062025-01-31 19:53:20265 EXPECT_EQ(verifier->CrashUploadURL(), GURL("https://localhost/crash"));
266 EXPECT_EQ(verifier->DeviceManagementURL(), GURL("https://localhost/dm"));
267 EXPECT_EQ(verifier->AppLogoURL(), GURL("https://localhost/logo/"));
Noah Rose Ledesmad391ac332022-12-13 21:09:06268 EXPECT_EQ(verifier->InitialDelay(), base::Seconds(123.4));
269 EXPECT_EQ(verifier->ServerKeepAliveTime(), base::Seconds(3));
S. Ganeshf0d3ab02025-01-18 04:02:42270 EXPECT_EQ(verifier->DictPolicies().size(), 2U);
Xiaoling Baobea69462023-08-01 01:59:03271 EXPECT_TRUE(verifier->IsMachineManaged().has_value());
272 EXPECT_TRUE(verifier->IsMachineManaged().value());
Adam Norberge158b072023-10-19 18:55:43273 EXPECT_TRUE(verifier->EnableDiffUpdates());
Xiaoling Bao760b128a2024-10-02 23:17:15274 EXPECT_EQ(verifier->CecaConnectionTimeout(), base::Seconds(5));
S. Ganesh5b7c6a72022-05-21 01:20:56275
S. Ganeshf0d3ab02025-01-18 04:02:42276 base::Value::Dict dict_policies2;
277 dict_policies2.Set("b", 2);
Adam Norbergc7ab1c52021-01-19 21:05:21278
279 // But now we can use the builder again:
Noah Rose Ledesmad391ac332022-12-13 21:09:06280 EXPECT_TRUE(builder.SetInitialDelay(base::Seconds(92.3))
281 .SetServerKeepAliveTime(base::Seconds(4))
Mila Green59389f12021-02-03 20:52:32282 .ClearUpdateURL()
Xiaoling Bao616a5352023-04-03 22:00:58283 .ClearCrashUploadURL()
284 .ClearDeviceManagementURL()
S. Ganesh0f34f8b2024-03-13 21:08:44285 .ClearAppLogoURL()
S. Ganeshf0d3ab02025-01-18 04:02:42286 .SetDictPolicies(dict_policies2)
Xiaoling Baobea69462023-08-01 01:59:03287 .ClearMachineManaged()
Adam Norberge158b072023-10-19 18:55:43288 .SetEnableDiffUpdates(false)
Xiaoling Bao760b128a2024-10-02 23:17:15289 .ClearCecaConnectionTimeout()
Mila Green59389f12021-02-03 20:52:32290 .Overwrite());
Adam Norbergc7ab1c52021-01-19 21:05:21291
292 // We need a new overrider to verify because it only loads once.
Joshua Pawlicki34aacc12021-08-24 21:22:21293 scoped_refptr<ExternalConstantsOverrider> verifier2 =
Adam Norbergc7ab1c52021-01-19 21:05:21294 ExternalConstantsOverrider::FromDefaultJSONFile(
Joshua Pawlicki58a597ed2021-06-10 17:00:52295 CreateDefaultExternalConstants());
Adam Norbergc7ab1c52021-01-19 21:05:21296
297 EXPECT_FALSE(verifier2->UseCUP()); // Not updated, value should be retained.
298
299 std::vector<GURL> urls2 = verifier2->UpdateURL();
300 ASSERT_EQ(urls2.size(), 1ul);
301 EXPECT_EQ(urls2[0], GURL(UPDATE_CHECK_URL)); // Cleared; should be default.
302
Xiaoling Bao616a5352023-04-03 22:00:58303 EXPECT_EQ(verifier2->CrashUploadURL(), GURL(CRASH_UPLOAD_URL));
304 EXPECT_EQ(verifier2->DeviceManagementURL(),
305 GURL(DEVICE_MANAGEMENT_SERVER_URL));
S. Ganesh0f34f8b2024-03-13 21:08:44306 EXPECT_EQ(verifier2->AppLogoURL(), GURL(APP_LOGO_URL));
Mila Green1cb26962021-01-21 01:00:00307 EXPECT_EQ(verifier2->InitialDelay(),
Noah Rose Ledesmad391ac332022-12-13 21:09:06308 base::Seconds(92.3)); // Updated; update should be seen.
309 EXPECT_EQ(verifier2->ServerKeepAliveTime(), base::Seconds(4));
S. Ganeshf0d3ab02025-01-18 04:02:42310 EXPECT_EQ(verifier2->DictPolicies().size(), 1U);
Xiaoling Baobea69462023-08-01 01:59:03311 EXPECT_FALSE(verifier2->IsMachineManaged().has_value());
Adam Norberge158b072023-10-19 18:55:43312 EXPECT_FALSE(verifier2->EnableDiffUpdates());
Xiaoling Bao760b128a2024-10-02 23:17:15313 EXPECT_EQ(verifier2->CecaConnectionTimeout(), kCecaConnectionTimeout);
S. Ganesh5b7c6a72022-05-21 01:20:56314}
315
316TEST_F(ExternalConstantsBuilderTests, TestModify) {
317 ExternalConstantsBuilder builder;
318
S. Ganeshf0d3ab02025-01-18 04:02:42319 base::Value::Dict dict_policies;
320 dict_policies.Set("a", 1);
321 dict_policies.Set("b", 2);
S. Ganesh5b7c6a72022-05-21 01:20:56322
323 EXPECT_TRUE(
Joshua Pawlicki9154e5f062025-01-31 19:53:20324 builder.SetUpdateURL(std::vector<std::string>{"https://localhost/update"})
325 .SetCrashUploadURL("https://localhost/crash")
326 .SetDeviceManagementURL("https://localhost/dm")
327 .SetAppLogoURL("https://localhost/logo/")
S. Ganesh5b7c6a72022-05-21 01:20:56328 .SetUseCUP(false)
Noah Rose Ledesmad391ac332022-12-13 21:09:06329 .SetInitialDelay(base::Seconds(123.4))
330 .SetServerKeepAliveTime(base::Seconds(3))
Joshua Pawlicki9154e5f062025-01-31 19:53:20331 .SetUpdateURL(std::vector<std::string>{"https://localhost/1/www"})
332 .SetCrashUploadURL("https://localhost/1/crash")
333 .SetDeviceManagementURL("https://localhost/1/dm")
334 .SetAppLogoURL("https://localhost/1/applogo/")
S. Ganeshf0d3ab02025-01-18 04:02:42335 .SetDictPolicies(dict_policies)
Sorin Jianua4b3d382023-11-10 20:08:46336 .SetMachineManaged(std::make_optional(false))
Adam Norberge158b072023-10-19 18:55:43337 .SetEnableDiffUpdates(true)
Xiaoling Bao760b128a2024-10-02 23:17:15338 .SetCecaConnectionTimeout(base::Seconds(55))
S. Ganesh5b7c6a72022-05-21 01:20:56339 .Overwrite());
340
341 scoped_refptr<ExternalConstantsOverrider> verifier =
342 ExternalConstantsOverrider::FromDefaultJSONFile(
343 CreateDefaultExternalConstants());
344
345 EXPECT_FALSE(verifier->UseCUP());
346
347 std::vector<GURL> urls = verifier->UpdateURL();
348 ASSERT_EQ(urls.size(), 1ul);
Joshua Pawlicki9154e5f062025-01-31 19:53:20349 EXPECT_EQ(urls[0], GURL("https://localhost/1/www"));
S. Ganesh5b7c6a72022-05-21 01:20:56350
Joshua Pawlicki9154e5f062025-01-31 19:53:20351 EXPECT_EQ(verifier->CrashUploadURL(), GURL("https://localhost/1/crash"));
352 EXPECT_EQ(verifier->DeviceManagementURL(), GURL("https://localhost/1/dm"));
353 EXPECT_EQ(verifier->AppLogoURL(), GURL("https://localhost/1/applogo/"));
Noah Rose Ledesmad391ac332022-12-13 21:09:06354 EXPECT_EQ(verifier->InitialDelay(), base::Seconds(123.4));
355 EXPECT_EQ(verifier->ServerKeepAliveTime(), base::Seconds(3));
S. Ganeshf0d3ab02025-01-18 04:02:42356 EXPECT_EQ(verifier->DictPolicies().size(), 2U);
Xiaoling Baobea69462023-08-01 01:59:03357 EXPECT_TRUE(verifier->IsMachineManaged().has_value());
358 EXPECT_FALSE(verifier->IsMachineManaged().value());
Adam Norberge158b072023-10-19 18:55:43359 EXPECT_TRUE(verifier->EnableDiffUpdates());
Xiaoling Bao760b128a2024-10-02 23:17:15360 EXPECT_EQ(verifier->CecaConnectionTimeout(), base::Seconds(55));
S. Ganesh5b7c6a72022-05-21 01:20:56361
362 // Now we use a new builder to modify just the group policies.
363 ExternalConstantsBuilder builder2;
364
S. Ganeshf0d3ab02025-01-18 04:02:42365 base::Value::Dict dict_policies2;
366 dict_policies2.Set("b", 2);
S. Ganesh5b7c6a72022-05-21 01:20:56367
S. Ganeshf0d3ab02025-01-18 04:02:42368 EXPECT_TRUE(builder2.SetDictPolicies(dict_policies2).Modify());
S. Ganesh5b7c6a72022-05-21 01:20:56369
370 // We need a new overrider to verify because it only loads once.
371 scoped_refptr<ExternalConstantsOverrider> verifier2 =
372 ExternalConstantsOverrider::FromDefaultJSONFile(
373 CreateDefaultExternalConstants());
374
375 // Only the group policies are different.
S. Ganeshf0d3ab02025-01-18 04:02:42376 EXPECT_EQ(verifier2->DictPolicies().size(), 1U);
S. Ganesh5b7c6a72022-05-21 01:20:56377
378 // All the values below are unchanged.
379 EXPECT_FALSE(verifier2->UseCUP());
380 urls = verifier2->UpdateURL();
381 ASSERT_EQ(urls.size(), 1ul);
Joshua Pawlicki9154e5f062025-01-31 19:53:20382 EXPECT_EQ(urls[0], GURL("https://localhost/1/www"));
383 EXPECT_EQ(verifier2->CrashUploadURL(), GURL("https://localhost/1/crash"));
384 EXPECT_EQ(verifier2->DeviceManagementURL(), GURL("https://localhost/1/dm"));
385 EXPECT_EQ(verifier2->AppLogoURL(), GURL("https://localhost/1/applogo/"));
Noah Rose Ledesmad391ac332022-12-13 21:09:06386 EXPECT_EQ(verifier2->InitialDelay(), base::Seconds(123.4));
387 EXPECT_EQ(verifier2->ServerKeepAliveTime(), base::Seconds(3));
Xiaoling Baobea69462023-08-01 01:59:03388 EXPECT_TRUE(verifier2->IsMachineManaged().has_value());
389 EXPECT_FALSE(verifier2->IsMachineManaged().value());
Adam Norberge158b072023-10-19 18:55:43390 EXPECT_TRUE(verifier2->EnableDiffUpdates());
Xiaoling Bao760b128a2024-10-02 23:17:15391 EXPECT_EQ(verifier2->CecaConnectionTimeout(), base::Seconds(55));
Adam Norbergc7ab1c52021-01-19 21:05:21392}
Adam Norbergc7ab1c52021-01-19 21:05:21393
394} // namespace updater