File: policy_manager_unittest.cc

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (217 lines) | stat: -rw-r--r-- 9,412 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/updater/policy/policy_manager.h"

#include <memory>
#include <optional>
#include <string>
#include <utility>
#include <vector>

#include "base/memory/ref_counted.h"
#include "base/strings/strcat.h"
#include "base/values.h"
#include "chrome/updater/updater_scope.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace updater {

constexpr char kTestAppID[] = "{d07d2b56-f583-4631-9e8e-9942f63765be}";
constexpr char kTestAppIDForceInstall[] = "appidforceinstall";

class PolicyManagerTests : public ::testing::Test {};

TEST_F(PolicyManagerTests, NoPolicies) {
  scoped_refptr<PolicyManagerInterface> policy_manager =
      CreateDictPolicyManager({});
  EXPECT_FALSE(policy_manager);
}

TEST_F(PolicyManagerTests, InvalidPolicies) {
  base::Value::Dict policies;
  policies.Set("autoupdatecheckperiodminutes", "NotAnInteger");

  scoped_refptr<PolicyManagerInterface> policy_manager =
      CreateDictPolicyManager(std::move(policies));
  EXPECT_TRUE(policy_manager->HasActiveDevicePolicies());

  EXPECT_EQ(policy_manager->source(), "DictValuePolicy");

  EXPECT_EQ(policy_manager->CloudPolicyOverridesPlatformPolicy(), std::nullopt);
  EXPECT_EQ(policy_manager->GetLastCheckPeriod(), std::nullopt);
  EXPECT_EQ(policy_manager->GetUpdatesSuppressedTimes(), std::nullopt);
  EXPECT_EQ(policy_manager->GetDownloadPreference(), std::nullopt);
  EXPECT_EQ(policy_manager->GetPackageCacheSizeLimitMBytes(), std::nullopt);
  EXPECT_EQ(policy_manager->GetPackageCacheExpirationTimeDays(), std::nullopt);
  EXPECT_EQ(policy_manager->GetProxyMode(), std::nullopt);
  EXPECT_EQ(policy_manager->GetProxyServer(), std::nullopt);
  EXPECT_EQ(policy_manager->GetProxyPacUrl(), std::nullopt);
  EXPECT_EQ(policy_manager->GetEffectivePolicyForAppInstalls(kTestAppID),
            std::nullopt);
  EXPECT_FALSE(policy_manager->GetEffectivePolicyForAppInstalls(
      "non-exist-app-fallback-to-global"));
  EXPECT_EQ(policy_manager->GetEffectivePolicyForAppUpdates(kTestAppID),
            std::nullopt);
  EXPECT_FALSE(policy_manager->GetEffectivePolicyForAppUpdates(
      "non-exist-app-fallback-to-global"));
  EXPECT_EQ(policy_manager->GetTargetChannel(kTestAppID), std::nullopt);
  EXPECT_EQ(policy_manager->GetTargetChannel("non-exist-app"), std::nullopt);
  EXPECT_EQ(policy_manager->GetTargetVersionPrefix(kTestAppID), std::nullopt);
  EXPECT_EQ(policy_manager->GetTargetVersionPrefix("non-exist-app"),
            std::nullopt);
  EXPECT_EQ(policy_manager->IsRollbackToTargetVersionAllowed(kTestAppID),
            std::nullopt);
  EXPECT_FALSE(
      policy_manager->IsRollbackToTargetVersionAllowed("non-exist-app"));
  EXPECT_EQ(policy_manager->GetForceInstallApps(), std::nullopt);
}

TEST_F(PolicyManagerTests, PolicyRead) {
  base::Value::Dict policies;

  policies.Set("autoupdatecheckperiodminutes", 480);
  policies.Set("updatessuppressedstarthour", 2);
  policies.Set("updatessuppressedstartmin", 30);
  policies.Set("updatessuppresseddurationmin", 500);
  policies.Set("downloadpreference", "cacheable");
  policies.Set("packagecachesizelimit", 100);
  policies.Set("packagecachelifelimit", 45);
  policies.Set("proxymode", "fixed_servers");
  policies.Set("proxyserver", "http://foo.bar");
  policies.Set("proxypacurl", "go/pac.url");

  policies.Set("installdefault", 2);
  policies.Set("updatedefault", 1);

  // Set app policies
  policies.Set(base::StrCat({"install", kTestAppID}), 3);
  policies.Set(base::StrCat({"update", kTestAppID}), 2);
  policies.Set(base::StrCat({"targetversionprefix", kTestAppID}), "55.55.");
  policies.Set(base::StrCat({"targetchannel", kTestAppID}), "beta");
  policies.Set(base::StrCat({"rollbacktotargetversion", kTestAppID}), 1);
  policies.Set(base::StrCat({"install", kTestAppIDForceInstall}),
               kPolicyForceInstallUser);
  policies.Set(base::StrCat({"majorversionrollout", kTestAppID}), 1);
  policies.Set(base::StrCat({"minorversionrollout", kTestAppID}), 2);

  scoped_refptr<PolicyManagerInterface> policy_manager =
      CreateDictPolicyManager(std::move(policies));

  EXPECT_TRUE(policy_manager->HasActiveDevicePolicies());

  EXPECT_EQ(policy_manager->CloudPolicyOverridesPlatformPolicy(), std::nullopt);
  EXPECT_EQ(policy_manager->GetLastCheckPeriod(), base::Minutes(480));

  std::optional<UpdatesSuppressedTimes> suppressed_times =
      policy_manager->GetUpdatesSuppressedTimes();
  ASSERT_TRUE(suppressed_times);
  EXPECT_EQ(suppressed_times->start_hour_, 2);
  EXPECT_EQ(suppressed_times->start_minute_, 30);
  EXPECT_EQ(suppressed_times->duration_minute_, 500);

  EXPECT_EQ(policy_manager->GetDownloadPreference(), "cacheable");

  EXPECT_EQ(policy_manager->GetPackageCacheSizeLimitMBytes(), 100);
  EXPECT_EQ(policy_manager->GetPackageCacheExpirationTimeDays(), 45);

  EXPECT_EQ(policy_manager->GetProxyMode(), "fixed_servers");
  EXPECT_EQ(policy_manager->GetProxyServer(), "http://foo.bar");
  EXPECT_EQ(policy_manager->GetProxyPacUrl(), "go/pac.url");

  EXPECT_EQ(policy_manager->GetEffectivePolicyForAppInstalls(kTestAppID), 3);
  EXPECT_EQ(policy_manager->GetEffectivePolicyForAppInstalls(
                "non-exist-app-fallback-to-global"),
            2);

  EXPECT_EQ(policy_manager->GetEffectivePolicyForAppUpdates(kTestAppID), 2);
  EXPECT_EQ(policy_manager->GetEffectivePolicyForAppUpdates(
                "non-exist-app-fallback-to-global"),
            1);

  EXPECT_EQ(policy_manager->GetTargetChannel(kTestAppID), "beta");
  EXPECT_EQ(policy_manager->GetTargetChannel("non-exist-app"), std::nullopt);

  EXPECT_EQ(policy_manager->GetTargetVersionPrefix(kTestAppID), "55.55.");
  EXPECT_EQ(policy_manager->GetTargetVersionPrefix("non-exist-app"),
            std::nullopt);

  EXPECT_EQ(policy_manager->IsRollbackToTargetVersionAllowed(kTestAppID), true);
  EXPECT_FALSE(
      policy_manager->IsRollbackToTargetVersionAllowed("non-exist-app"));

  EXPECT_EQ(policy_manager->GetMajorVersionRolloutPolicy(kTestAppID), 1);
  EXPECT_EQ(policy_manager->GetMinorVersionRolloutPolicy(kTestAppID), 2);
  EXPECT_FALSE(policy_manager->GetMajorVersionRolloutPolicy("non-exist-app"));
  EXPECT_FALSE(policy_manager->GetMajorVersionRolloutPolicy("non-exist-app"));

  std::optional<std::vector<std::string>> force_install_apps =
      policy_manager->GetForceInstallApps();
  ASSERT_EQ(force_install_apps.has_value(), !IsSystemInstall());

  if (!IsSystemInstall()) {
    ASSERT_EQ(force_install_apps->size(), 1U);
    EXPECT_EQ(force_install_apps->at(0), kTestAppIDForceInstall);
  }
}

TEST_F(PolicyManagerTests, WrongPolicyValueType) {
  base::Value::Dict policies;

  // Set global policies.
  policies.Set("autoupdatecheckperiodminutes", "NotAnInteger");
  policies.Set("updatessuppressedstarthour", "");
  policies.Set("updatessuppressedstartmin", "30");
  policies.Set("updatessuppresseddurationmin", "WrongType");
  policies.Set("downloadpreference", 15);
  policies.Set("packagecachesizelimit", "100");
  policies.Set("packagecachelifelimit", "45");
  policies.Set("proxymode", 10);
  policies.Set("proxyserver", 1);
  policies.Set("proxypacurl", 2);

  policies.Set("installdefault", "install");
  policies.Set("updatedefault", "automatic");

  // Set app policies
  policies.Set(base::StrCat({"install", kTestAppID}), "3");
  policies.Set(base::StrCat({"update", kTestAppID}), "2");
  policies.Set(base::StrCat({"targetversionprefix", kTestAppID}), 55);
  policies.Set(base::StrCat({"targetchannel", kTestAppID}), 10);
  policies.Set(base::StrCat({"rollbacktotargetversion", kTestAppID}), "1");

  scoped_refptr<PolicyManagerInterface> policy_manager =
      CreateDictPolicyManager(std::move(policies));

  EXPECT_TRUE(policy_manager->HasActiveDevicePolicies());

  EXPECT_EQ(policy_manager->CloudPolicyOverridesPlatformPolicy(), std::nullopt);
  EXPECT_EQ(policy_manager->GetLastCheckPeriod(), std::nullopt);
  EXPECT_EQ(policy_manager->GetUpdatesSuppressedTimes(), std::nullopt);
  EXPECT_EQ(policy_manager->GetDownloadPreference(), std::nullopt);
  EXPECT_EQ(policy_manager->GetPackageCacheSizeLimitMBytes(), std::nullopt);
  EXPECT_EQ(policy_manager->GetPackageCacheExpirationTimeDays(), std::nullopt);
  EXPECT_EQ(policy_manager->GetProxyMode(), std::nullopt);
  EXPECT_EQ(policy_manager->GetProxyServer(), std::nullopt);
  EXPECT_EQ(policy_manager->GetProxyPacUrl(), std::nullopt);
  EXPECT_EQ(policy_manager->GetEffectivePolicyForAppInstalls(kTestAppID),
            std::nullopt);
  EXPECT_FALSE(policy_manager->GetEffectivePolicyForAppInstalls(
      "non-exist-app-fallback-to-global"));
  EXPECT_EQ(policy_manager->GetEffectivePolicyForAppUpdates(kTestAppID),
            std::nullopt);
  EXPECT_FALSE(policy_manager->GetEffectivePolicyForAppUpdates(
      "non-exist-app-fallback-to-global"));
  EXPECT_EQ(policy_manager->GetTargetChannel(kTestAppID), std::nullopt);
  EXPECT_EQ(policy_manager->GetTargetChannel("non-exist-app"), std::nullopt);
  EXPECT_EQ(policy_manager->GetTargetVersionPrefix(kTestAppID), std::nullopt);
  EXPECT_EQ(policy_manager->GetTargetVersionPrefix("non-exist-app"),
            std::nullopt);
  EXPECT_EQ(policy_manager->IsRollbackToTargetVersionAllowed(kTestAppID),
            std::nullopt);
  EXPECT_FALSE(
      policy_manager->IsRollbackToTargetVersionAllowed("non-exist-app"));
}

}  // namespace updater