blob: c2eb0b0abd36713896beb031afe094aca9dcb229 [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")
Joshua Pawlicki9154e5f062025-01-31 19:53:2072 .SetAppLogoURL("https://localhost/1/applogo/")
Adam Norbergc7ab1c52021-01-19 21:05:2173 .SetUseCUP(false)
Noah Rose Ledesmad391ac332022-12-13 21:09:0674 .SetInitialDelay(base::Seconds(123))
75 .SetServerKeepAliveTime(base::Seconds(2))
S. Ganeshf0d3ab02025-01-18 04:02:4276 .SetDictPolicies(dict_policies)
Joshua Pawlickie5812592023-06-12 17:24:5477 .SetOverinstallTimeout(base::Seconds(3))
Xiaoling Baobea69462023-08-01 01:59:0378 .SetIdleCheckPeriod(base::Seconds(4))
Sorin Jianua4b3d382023-11-10 20:08:4679 .SetMachineManaged(std::make_optional(true))
Xiaoling Bao760b128a2024-10-02 23:17:1580 .SetCecaConnectionTimeout(base::Seconds(7));
Adam Norbergc7ab1c52021-01-19 21:05:2181 EXPECT_TRUE(builder.Overwrite());
82
Joshua Pawlicki34aacc12021-08-24 21:22:2183 scoped_refptr<ExternalConstantsOverrider> verifier =
Adam Norbergc7ab1c52021-01-19 21:05:2184 ExternalConstantsOverrider::FromDefaultJSONFile(
Joshua Pawlicki58a597ed2021-06-10 17:00:5285 CreateDefaultExternalConstants());
Adam Norbergc7ab1c52021-01-19 21:05:2186
87 EXPECT_FALSE(verifier->UseCUP());
88
89 std::vector<GURL> urls = verifier->UpdateURL();
90 ASSERT_EQ(urls.size(), 1ul);
Joshua Pawlicki9154e5f062025-01-31 19:53:2091 EXPECT_EQ(urls[0], GURL("https://localhost/1/www"));
Adam Norbergc7ab1c52021-01-19 21:05:2192
Joshua Pawlicki9154e5f062025-01-31 19:53:2093 EXPECT_EQ(verifier->CrashUploadURL(), GURL("https://localhost/1/crash"));
Joshua Pawlicki9154e5f062025-01-31 19:53:2094 EXPECT_EQ(verifier->AppLogoURL(), GURL("https://localhost/1/applogo/"));
Noah Rose Ledesmad391ac332022-12-13 21:09:0695 EXPECT_EQ(verifier->InitialDelay(), base::Seconds(123));
96 EXPECT_EQ(verifier->ServerKeepAliveTime(), base::Seconds(2));
S. Ganeshf0d3ab02025-01-18 04:02:4297 EXPECT_EQ(verifier->DictPolicies().size(), 2U);
Joshua Pawlickie5812592023-06-12 17:24:5498 EXPECT_EQ(verifier->OverinstallTimeout(), base::Seconds(3));
99 EXPECT_EQ(verifier->IdleCheckPeriod(), base::Seconds(4));
Xiaoling Baobea69462023-08-01 01:59:03100 EXPECT_TRUE(verifier->IsMachineManaged().has_value());
101 EXPECT_TRUE(verifier->IsMachineManaged().value());
Xiaoling Bao760b128a2024-10-02 23:17:15102 EXPECT_EQ(verifier->CecaConnectionTimeout(), base::Seconds(7));
Adam Norbergc7ab1c52021-01-19 21:05:21103}
104
105TEST_F(ExternalConstantsBuilderTests, TestPartialOverrideWithMultipleURLs) {
106 ExternalConstantsBuilder builder;
107 EXPECT_TRUE(builder
108 .SetUpdateURL(std::vector<std::string>{
Joshua Pawlicki9154e5f062025-01-31 19:53:20109 "https://localhost/update", "https://localhost/update2"})
Adam Norbergc7ab1c52021-01-19 21:05:21110 .Overwrite());
111
Joshua Pawlicki34aacc12021-08-24 21:22:21112 scoped_refptr<ExternalConstantsOverrider> verifier =
Adam Norbergc7ab1c52021-01-19 21:05:21113 ExternalConstantsOverrider::FromDefaultJSONFile(
Joshua Pawlicki58a597ed2021-06-10 17:00:52114 CreateDefaultExternalConstants());
Adam Norbergc7ab1c52021-01-19 21:05:21115
116 EXPECT_TRUE(verifier->UseCUP());
117
118 std::vector<GURL> urls = verifier->UpdateURL();
119 ASSERT_EQ(urls.size(), 2ul);
Joshua Pawlicki9154e5f062025-01-31 19:53:20120 EXPECT_EQ(urls[0], GURL("https://localhost/update"));
121 EXPECT_EQ(urls[1], GURL("https://localhost/update2"));
Adam Norbergc7ab1c52021-01-19 21:05:21122
Xiaoling Bao616a5352023-04-03 22:00:58123 EXPECT_EQ(verifier->CrashUploadURL(), GURL(CRASH_UPLOAD_URL));
S. Ganesh0f34f8b2024-03-13 21:08:44124 EXPECT_EQ(verifier->AppLogoURL(), GURL(APP_LOGO_URL));
Adam Norbergc7ab1c52021-01-19 21:05:21125 EXPECT_EQ(verifier->InitialDelay(), kInitialDelay);
Noah Rose Ledesmad391ac332022-12-13 21:09:06126 EXPECT_EQ(verifier->ServerKeepAliveTime(), kServerKeepAliveTime);
S. Ganeshf0d3ab02025-01-18 04:02:42127 EXPECT_EQ(verifier->DictPolicies().size(), 0U);
Adam Norbergc7ab1c52021-01-19 21:05:21128}
129
130TEST_F(ExternalConstantsBuilderTests, TestClearedEverything) {
131 ExternalConstantsBuilder builder;
132 EXPECT_TRUE(builder
133 .SetUpdateURL(std::vector<std::string>{
Joshua Pawlicki9154e5f062025-01-31 19:53:20134 "https://localhost/1/localhost/update", "https://www"})
135 .SetCrashUploadURL("https://localhost/1/crash")
Joshua Pawlicki9154e5f062025-01-31 19:53:20136 .SetAppLogoURL("https://localhost/1/applogo/")
Adam Norbergc7ab1c52021-01-19 21:05:21137 .SetUseCUP(false)
Noah Rose Ledesmad391ac332022-12-13 21:09:06138 .SetInitialDelay(base::Seconds(123.4))
Adam Norbergc7ab1c52021-01-19 21:05:21139 .ClearUpdateURL()
Xiaoling Bao616a5352023-04-03 22:00:58140 .ClearCrashUploadURL()
S. Ganesh0f34f8b2024-03-13 21:08:44141 .ClearAppLogoURL()
Adam Norbergc7ab1c52021-01-19 21:05:21142 .ClearUseCUP()
143 .ClearInitialDelay()
Mila Green59389f12021-02-03 20:52:32144 .ClearServerKeepAliveSeconds()
S. Ganeshf0d3ab02025-01-18 04:02:42145 .ClearDictPolicies()
Joshua Pawlickie5812592023-06-12 17:24:54146 .ClearOverinstallTimeout()
147 .ClearIdleCheckPeriod()
Xiaoling Baobea69462023-08-01 01:59:03148 .ClearMachineManaged()
Xiaoling Bao760b128a2024-10-02 23:17:15149 .ClearCecaConnectionTimeout()
Adam Norbergc7ab1c52021-01-19 21:05:21150 .Overwrite());
151
Joshua Pawlicki34aacc12021-08-24 21:22:21152 scoped_refptr<ExternalConstantsOverrider> verifier =
Adam Norbergc7ab1c52021-01-19 21:05:21153 ExternalConstantsOverrider::FromDefaultJSONFile(
Joshua Pawlicki58a597ed2021-06-10 17:00:52154 CreateDefaultExternalConstants());
Adam Norbergc7ab1c52021-01-19 21:05:21155 EXPECT_TRUE(verifier->UseCUP());
156
157 std::vector<GURL> urls = verifier->UpdateURL();
158 ASSERT_EQ(urls.size(), 1ul);
159 EXPECT_EQ(urls[0], GURL(UPDATE_CHECK_URL));
160
Xiaoling Bao616a5352023-04-03 22:00:58161 EXPECT_EQ(verifier->CrashUploadURL(), GURL(CRASH_UPLOAD_URL));
S. Ganesh0f34f8b2024-03-13 21:08:44162 EXPECT_EQ(verifier->AppLogoURL(), GURL(APP_LOGO_URL));
Adam Norbergc7ab1c52021-01-19 21:05:21163 EXPECT_EQ(verifier->InitialDelay(), kInitialDelay);
Noah Rose Ledesmad391ac332022-12-13 21:09:06164 EXPECT_EQ(verifier->ServerKeepAliveTime(), kServerKeepAliveTime);
S. Ganeshf0d3ab02025-01-18 04:02:42165 EXPECT_EQ(verifier->DictPolicies().size(), 0U);
Xiaoling Baobea69462023-08-01 01:59:03166 EXPECT_FALSE(verifier->IsMachineManaged().has_value());
Xiaoling Bao760b128a2024-10-02 23:17:15167 EXPECT_EQ(verifier->CecaConnectionTimeout(), kCecaConnectionTimeout);
Adam Norbergc7ab1c52021-01-19 21:05:21168}
169
170TEST_F(ExternalConstantsBuilderTests, TestOverSet) {
S. Ganeshf0d3ab02025-01-18 04:02:42171 base::Value::Dict dict_policies;
172 dict_policies.Set("a", 1);
S. Ganesh5b7c6a72022-05-21 01:20:56173
Adam Norbergc7ab1c52021-01-19 21:05:21174 EXPECT_TRUE(
175 ExternalConstantsBuilder()
Joshua Pawlicki9154e5f062025-01-31 19:53:20176 .SetUpdateURL(std::vector<std::string>{"https://localhost/update"})
177 .SetCrashUploadURL("https://localhost/crash")
Joshua Pawlicki9154e5f062025-01-31 19:53:20178 .SetAppLogoURL("https://localhost/logo/")
Adam Norbergc7ab1c52021-01-19 21:05:21179 .SetUseCUP(true)
Noah Rose Ledesmad391ac332022-12-13 21:09:06180 .SetInitialDelay(base::Seconds(123.4))
181 .SetServerKeepAliveTime(base::Seconds(2))
Sorin Jianua4b3d382023-11-10 20:08:46182 .SetMachineManaged(std::make_optional(true))
S. Ganeshf0d3ab02025-01-18 04:02:42183 .SetDictPolicies(dict_policies)
Joshua Pawlicki9154e5f062025-01-31 19:53:20184 .SetUpdateURL(std::vector<std::string>{"https://localhost/1/www"})
185 .SetCrashUploadURL("https://localhost/1/crash")
Joshua Pawlicki9154e5f062025-01-31 19:53:20186 .SetAppLogoURL("https://localhost/1/applogo/")
Adam Norbergc7ab1c52021-01-19 21:05:21187 .SetUseCUP(false)
Noah Rose Ledesmad391ac332022-12-13 21:09:06188 .SetInitialDelay(base::Seconds(937.6))
189 .SetServerKeepAliveTime(base::Seconds(3))
Sorin Jianua4b3d382023-11-10 20:08:46190 .SetMachineManaged(std::make_optional(false))
Xiaoling Bao760b128a2024-10-02 23:17:15191 .SetCecaConnectionTimeout(base::Seconds(38))
Adam Norbergc7ab1c52021-01-19 21:05:21192 .Overwrite());
193
194 // Only the second set of values should be observed.
Joshua Pawlicki34aacc12021-08-24 21:22:21195 scoped_refptr<ExternalConstantsOverrider> verifier =
Adam Norbergc7ab1c52021-01-19 21:05:21196 ExternalConstantsOverrider::FromDefaultJSONFile(
Joshua Pawlicki58a597ed2021-06-10 17:00:52197 CreateDefaultExternalConstants());
Adam Norbergc7ab1c52021-01-19 21:05:21198 EXPECT_FALSE(verifier->UseCUP());
199
200 std::vector<GURL> urls = verifier->UpdateURL();
201 ASSERT_EQ(urls.size(), 1ul);
Joshua Pawlicki9154e5f062025-01-31 19:53:20202 EXPECT_EQ(urls[0], GURL("https://localhost/1/www"));
Adam Norbergc7ab1c52021-01-19 21:05:21203
Joshua Pawlicki9154e5f062025-01-31 19:53:20204 EXPECT_EQ(verifier->CrashUploadURL(), GURL("https://localhost/1/crash"));
Joshua Pawlicki9154e5f062025-01-31 19:53:20205 EXPECT_EQ(verifier->AppLogoURL(), GURL("https://localhost/1/applogo/"));
Noah Rose Ledesmad391ac332022-12-13 21:09:06206 EXPECT_EQ(verifier->InitialDelay(), base::Seconds(937.6));
207 EXPECT_EQ(verifier->ServerKeepAliveTime(), base::Seconds(3));
S. Ganeshf0d3ab02025-01-18 04:02:42208 EXPECT_EQ(verifier->DictPolicies().size(), 1U);
Xiaoling Baobea69462023-08-01 01:59:03209 EXPECT_TRUE(verifier->IsMachineManaged().has_value());
210 EXPECT_FALSE(verifier->IsMachineManaged().value());
Xiaoling Bao760b128a2024-10-02 23:17:15211 EXPECT_EQ(verifier->CecaConnectionTimeout(), base::Seconds(38));
Adam Norbergc7ab1c52021-01-19 21:05:21212}
213
214TEST_F(ExternalConstantsBuilderTests, TestReuseBuilder) {
215 ExternalConstantsBuilder builder;
S. Ganesh5b7c6a72022-05-21 01:20:56216
S. Ganeshf0d3ab02025-01-18 04:02:42217 base::Value::Dict dict_policies;
218 dict_policies.Set("a", 1);
219 dict_policies.Set("b", 2);
S. Ganesh5b7c6a72022-05-21 01:20:56220
Adam Norbergc7ab1c52021-01-19 21:05:21221 EXPECT_TRUE(
Joshua Pawlicki9154e5f062025-01-31 19:53:20222 builder.SetUpdateURL(std::vector<std::string>{"https://localhost/update"})
223 .SetCrashUploadURL("https://localhost/crash")
Joshua Pawlicki9154e5f062025-01-31 19:53:20224 .SetAppLogoURL("https://localhost/logo/")
Adam Norbergc7ab1c52021-01-19 21:05:21225 .SetUseCUP(false)
Noah Rose Ledesmad391ac332022-12-13 21:09:06226 .SetInitialDelay(base::Seconds(123.4))
227 .SetServerKeepAliveTime(base::Seconds(3))
Joshua Pawlicki9154e5f062025-01-31 19:53:20228 .SetUpdateURL(std::vector<std::string>{"https://localhost/1/www"})
S. Ganeshf0d3ab02025-01-18 04:02:42229 .SetDictPolicies(dict_policies)
Sorin Jianua4b3d382023-11-10 20:08:46230 .SetMachineManaged(std::make_optional(true))
Xiaoling Bao760b128a2024-10-02 23:17:15231 .SetCecaConnectionTimeout(base::Seconds(5))
Adam Norbergc7ab1c52021-01-19 21:05:21232 .Overwrite());
233
Joshua Pawlicki34aacc12021-08-24 21:22:21234 scoped_refptr<ExternalConstantsOverrider> verifier =
Adam Norbergc7ab1c52021-01-19 21:05:21235 ExternalConstantsOverrider::FromDefaultJSONFile(
Joshua Pawlicki58a597ed2021-06-10 17:00:52236 CreateDefaultExternalConstants());
Adam Norbergc7ab1c52021-01-19 21:05:21237
238 EXPECT_FALSE(verifier->UseCUP());
239
240 std::vector<GURL> urls = verifier->UpdateURL();
241 ASSERT_EQ(urls.size(), 1ul);
Joshua Pawlicki9154e5f062025-01-31 19:53:20242 EXPECT_EQ(urls[0], GURL("https://localhost/1/www"));
Adam Norbergc7ab1c52021-01-19 21:05:21243
Joshua Pawlicki9154e5f062025-01-31 19:53:20244 EXPECT_EQ(verifier->CrashUploadURL(), GURL("https://localhost/crash"));
Joshua Pawlicki9154e5f062025-01-31 19:53:20245 EXPECT_EQ(verifier->AppLogoURL(), GURL("https://localhost/logo/"));
Noah Rose Ledesmad391ac332022-12-13 21:09:06246 EXPECT_EQ(verifier->InitialDelay(), base::Seconds(123.4));
247 EXPECT_EQ(verifier->ServerKeepAliveTime(), base::Seconds(3));
S. Ganeshf0d3ab02025-01-18 04:02:42248 EXPECT_EQ(verifier->DictPolicies().size(), 2U);
Xiaoling Baobea69462023-08-01 01:59:03249 EXPECT_TRUE(verifier->IsMachineManaged().has_value());
250 EXPECT_TRUE(verifier->IsMachineManaged().value());
Xiaoling Bao760b128a2024-10-02 23:17:15251 EXPECT_EQ(verifier->CecaConnectionTimeout(), base::Seconds(5));
S. Ganesh5b7c6a72022-05-21 01:20:56252
S. Ganeshf0d3ab02025-01-18 04:02:42253 base::Value::Dict dict_policies2;
254 dict_policies2.Set("b", 2);
Adam Norbergc7ab1c52021-01-19 21:05:21255
256 // But now we can use the builder again:
Noah Rose Ledesmad391ac332022-12-13 21:09:06257 EXPECT_TRUE(builder.SetInitialDelay(base::Seconds(92.3))
258 .SetServerKeepAliveTime(base::Seconds(4))
Mila Green59389f12021-02-03 20:52:32259 .ClearUpdateURL()
Xiaoling Bao616a5352023-04-03 22:00:58260 .ClearCrashUploadURL()
S. Ganesh0f34f8b2024-03-13 21:08:44261 .ClearAppLogoURL()
S. Ganeshf0d3ab02025-01-18 04:02:42262 .SetDictPolicies(dict_policies2)
Xiaoling Baobea69462023-08-01 01:59:03263 .ClearMachineManaged()
Xiaoling Bao760b128a2024-10-02 23:17:15264 .ClearCecaConnectionTimeout()
Mila Green59389f12021-02-03 20:52:32265 .Overwrite());
Adam Norbergc7ab1c52021-01-19 21:05:21266
267 // We need a new overrider to verify because it only loads once.
Joshua Pawlicki34aacc12021-08-24 21:22:21268 scoped_refptr<ExternalConstantsOverrider> verifier2 =
Adam Norbergc7ab1c52021-01-19 21:05:21269 ExternalConstantsOverrider::FromDefaultJSONFile(
Joshua Pawlicki58a597ed2021-06-10 17:00:52270 CreateDefaultExternalConstants());
Adam Norbergc7ab1c52021-01-19 21:05:21271
272 EXPECT_FALSE(verifier2->UseCUP()); // Not updated, value should be retained.
273
274 std::vector<GURL> urls2 = verifier2->UpdateURL();
275 ASSERT_EQ(urls2.size(), 1ul);
276 EXPECT_EQ(urls2[0], GURL(UPDATE_CHECK_URL)); // Cleared; should be default.
277
Xiaoling Bao616a5352023-04-03 22:00:58278 EXPECT_EQ(verifier2->CrashUploadURL(), GURL(CRASH_UPLOAD_URL));
S. Ganesh0f34f8b2024-03-13 21:08:44279 EXPECT_EQ(verifier2->AppLogoURL(), GURL(APP_LOGO_URL));
Mila Green1cb26962021-01-21 01:00:00280 EXPECT_EQ(verifier2->InitialDelay(),
Noah Rose Ledesmad391ac332022-12-13 21:09:06281 base::Seconds(92.3)); // Updated; update should be seen.
282 EXPECT_EQ(verifier2->ServerKeepAliveTime(), base::Seconds(4));
S. Ganeshf0d3ab02025-01-18 04:02:42283 EXPECT_EQ(verifier2->DictPolicies().size(), 1U);
Xiaoling Baobea69462023-08-01 01:59:03284 EXPECT_FALSE(verifier2->IsMachineManaged().has_value());
Xiaoling Bao760b128a2024-10-02 23:17:15285 EXPECT_EQ(verifier2->CecaConnectionTimeout(), kCecaConnectionTimeout);
S. Ganesh5b7c6a72022-05-21 01:20:56286}
287
288TEST_F(ExternalConstantsBuilderTests, TestModify) {
289 ExternalConstantsBuilder builder;
290
S. Ganeshf0d3ab02025-01-18 04:02:42291 base::Value::Dict dict_policies;
292 dict_policies.Set("a", 1);
293 dict_policies.Set("b", 2);
S. Ganesh5b7c6a72022-05-21 01:20:56294
295 EXPECT_TRUE(
Joshua Pawlicki9154e5f062025-01-31 19:53:20296 builder.SetUpdateURL(std::vector<std::string>{"https://localhost/update"})
297 .SetCrashUploadURL("https://localhost/crash")
Joshua Pawlicki9154e5f062025-01-31 19:53:20298 .SetAppLogoURL("https://localhost/logo/")
S. Ganesh5b7c6a72022-05-21 01:20:56299 .SetUseCUP(false)
Noah Rose Ledesmad391ac332022-12-13 21:09:06300 .SetInitialDelay(base::Seconds(123.4))
301 .SetServerKeepAliveTime(base::Seconds(3))
Joshua Pawlicki9154e5f062025-01-31 19:53:20302 .SetUpdateURL(std::vector<std::string>{"https://localhost/1/www"})
303 .SetCrashUploadURL("https://localhost/1/crash")
Joshua Pawlicki9154e5f062025-01-31 19:53:20304 .SetAppLogoURL("https://localhost/1/applogo/")
S. Ganeshf0d3ab02025-01-18 04:02:42305 .SetDictPolicies(dict_policies)
Sorin Jianua4b3d382023-11-10 20:08:46306 .SetMachineManaged(std::make_optional(false))
Xiaoling Bao760b128a2024-10-02 23:17:15307 .SetCecaConnectionTimeout(base::Seconds(55))
S. Ganesh5b7c6a72022-05-21 01:20:56308 .Overwrite());
309
310 scoped_refptr<ExternalConstantsOverrider> verifier =
311 ExternalConstantsOverrider::FromDefaultJSONFile(
312 CreateDefaultExternalConstants());
313
314 EXPECT_FALSE(verifier->UseCUP());
315
316 std::vector<GURL> urls = verifier->UpdateURL();
317 ASSERT_EQ(urls.size(), 1ul);
Joshua Pawlicki9154e5f062025-01-31 19:53:20318 EXPECT_EQ(urls[0], GURL("https://localhost/1/www"));
S. Ganesh5b7c6a72022-05-21 01:20:56319
Joshua Pawlicki9154e5f062025-01-31 19:53:20320 EXPECT_EQ(verifier->CrashUploadURL(), GURL("https://localhost/1/crash"));
Joshua Pawlicki9154e5f062025-01-31 19:53:20321 EXPECT_EQ(verifier->AppLogoURL(), GURL("https://localhost/1/applogo/"));
Noah Rose Ledesmad391ac332022-12-13 21:09:06322 EXPECT_EQ(verifier->InitialDelay(), base::Seconds(123.4));
323 EXPECT_EQ(verifier->ServerKeepAliveTime(), base::Seconds(3));
S. Ganeshf0d3ab02025-01-18 04:02:42324 EXPECT_EQ(verifier->DictPolicies().size(), 2U);
Xiaoling Baobea69462023-08-01 01:59:03325 EXPECT_TRUE(verifier->IsMachineManaged().has_value());
326 EXPECT_FALSE(verifier->IsMachineManaged().value());
Xiaoling Bao760b128a2024-10-02 23:17:15327 EXPECT_EQ(verifier->CecaConnectionTimeout(), base::Seconds(55));
S. Ganesh5b7c6a72022-05-21 01:20:56328
329 // Now we use a new builder to modify just the group policies.
330 ExternalConstantsBuilder builder2;
331
S. Ganeshf0d3ab02025-01-18 04:02:42332 base::Value::Dict dict_policies2;
333 dict_policies2.Set("b", 2);
S. Ganesh5b7c6a72022-05-21 01:20:56334
S. Ganeshf0d3ab02025-01-18 04:02:42335 EXPECT_TRUE(builder2.SetDictPolicies(dict_policies2).Modify());
S. Ganesh5b7c6a72022-05-21 01:20:56336
337 // We need a new overrider to verify because it only loads once.
338 scoped_refptr<ExternalConstantsOverrider> verifier2 =
339 ExternalConstantsOverrider::FromDefaultJSONFile(
340 CreateDefaultExternalConstants());
341
342 // Only the group policies are different.
S. Ganeshf0d3ab02025-01-18 04:02:42343 EXPECT_EQ(verifier2->DictPolicies().size(), 1U);
S. Ganesh5b7c6a72022-05-21 01:20:56344
345 // All the values below are unchanged.
346 EXPECT_FALSE(verifier2->UseCUP());
347 urls = verifier2->UpdateURL();
348 ASSERT_EQ(urls.size(), 1ul);
Joshua Pawlicki9154e5f062025-01-31 19:53:20349 EXPECT_EQ(urls[0], GURL("https://localhost/1/www"));
350 EXPECT_EQ(verifier2->CrashUploadURL(), GURL("https://localhost/1/crash"));
Joshua Pawlicki9154e5f062025-01-31 19:53:20351 EXPECT_EQ(verifier2->AppLogoURL(), GURL("https://localhost/1/applogo/"));
Noah Rose Ledesmad391ac332022-12-13 21:09:06352 EXPECT_EQ(verifier2->InitialDelay(), base::Seconds(123.4));
353 EXPECT_EQ(verifier2->ServerKeepAliveTime(), base::Seconds(3));
Xiaoling Baobea69462023-08-01 01:59:03354 EXPECT_TRUE(verifier2->IsMachineManaged().has_value());
355 EXPECT_FALSE(verifier2->IsMachineManaged().value());
Xiaoling Bao760b128a2024-10-02 23:17:15356 EXPECT_EQ(verifier2->CecaConnectionTimeout(), base::Seconds(55));
Adam Norbergc7ab1c52021-01-19 21:05:21357}
Adam Norbergc7ab1c52021-01-19 21:05:21358
359} // namespace updater