OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/policy/core/common/forwarding_policy_provider.h" | 5 #include "components/policy/core/common/forwarding_policy_provider.h" |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/values.h" | 8 #include "base/values.h" |
9 #include "components/policy/core/common/mock_configuration_policy_provider.h" | 9 #include "components/policy/core/common/mock_configuration_policy_provider.h" |
10 #include "components/policy/core/common/policy_bundle.h" | 10 #include "components/policy/core/common/policy_bundle.h" |
11 #include "components/policy/core/common/policy_map.h" | 11 #include "components/policy/core/common/policy_map.h" |
12 #include "components/policy/core/common/policy_types.h" | 12 #include "components/policy/core/common/policy_types.h" |
13 #include "components/policy/core/common/schema.h" | 13 #include "components/policy/core/common/schema.h" |
14 #include "components/policy/core/common/schema_registry.h" | 14 #include "components/policy/core/common/schema_registry.h" |
15 #include "testing/gmock/include/gmock/gmock.h" | 15 #include "testing/gmock/include/gmock/gmock.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
17 | 17 |
18 using testing::_; | 18 using testing::_; |
19 using testing::Mock; | 19 using testing::Mock; |
20 using testing::Return; | 20 using testing::Return; |
21 | 21 |
22 namespace policy { | 22 namespace policy { |
23 | 23 |
24 namespace { | |
25 | |
26 const char kTestSchema[] = | |
27 "{" | |
28 " \"type\": \"object\"," | |
29 " \"properties\": {" | |
30 " \"foo\": { \"type\": \"string\" }" | |
31 " }" | |
32 "}"; | |
33 | |
34 } // namespace | |
35 | |
24 class ForwardingPolicyProviderTest : public testing::Test { | 36 class ForwardingPolicyProviderTest : public testing::Test { |
25 protected: | 37 protected: |
26 ForwardingPolicyProviderTest() : forwarding_provider_(&mock_provider_) { | 38 ForwardingPolicyProviderTest() : forwarding_provider_(&mock_provider_) { |
27 mock_provider_.Init(); | 39 mock_provider_.Init(); |
28 forwarding_provider_.Init(&schema_registry_); | 40 forwarding_provider_.Init(&schema_registry_); |
29 forwarding_provider_.AddObserver(&observer_); | 41 forwarding_provider_.AddObserver(&observer_); |
30 } | 42 } |
31 | 43 |
32 virtual ~ForwardingPolicyProviderTest() { | 44 virtual ~ForwardingPolicyProviderTest() { |
33 forwarding_provider_.RemoveObserver(&observer_); | 45 forwarding_provider_.RemoveObserver(&observer_); |
34 forwarding_provider_.Shutdown(); | 46 forwarding_provider_.Shutdown(); |
35 mock_provider_.Shutdown(); | 47 mock_provider_.Shutdown(); |
36 } | 48 } |
37 | 49 |
50 Schema CreateTestSchema() { | |
51 std::string error; | |
bartfab (slow)
2014/06/23 09:53:37
Nit: #include <string>
Joao da Silva
2014/07/16 11:47:52
Done.
| |
52 Schema schema = Schema::Parse(kTestSchema, &error); | |
53 if (!schema.valid()) | |
54 ADD_FAILURE() << error; | |
55 return schema; | |
56 } | |
57 | |
38 SchemaRegistry schema_registry_; | 58 SchemaRegistry schema_registry_; |
39 MockConfigurationPolicyObserver observer_; | 59 MockConfigurationPolicyObserver observer_; |
40 MockConfigurationPolicyProvider mock_provider_; | 60 MockConfigurationPolicyProvider mock_provider_; |
41 ForwardingPolicyProvider forwarding_provider_; | 61 ForwardingPolicyProvider forwarding_provider_; |
42 }; | 62 }; |
43 | 63 |
44 TEST_F(ForwardingPolicyProviderTest, Empty) { | 64 TEST_F(ForwardingPolicyProviderTest, Empty) { |
45 EXPECT_FALSE(schema_registry_.IsReady()); | 65 EXPECT_FALSE(schema_registry_.IsReady()); |
46 EXPECT_FALSE( | 66 EXPECT_FALSE( |
47 forwarding_provider_.IsInitializationComplete(POLICY_DOMAIN_EXTENSIONS)); | 67 forwarding_provider_.IsInitializationComplete(POLICY_DOMAIN_EXTENSIONS)); |
(...skipping 11 matching lines...) Expand all Loading... | |
59 TEST_F(ForwardingPolicyProviderTest, ForwardsChromePolicy) { | 79 TEST_F(ForwardingPolicyProviderTest, ForwardsChromePolicy) { |
60 PolicyBundle bundle; | 80 PolicyBundle bundle; |
61 const PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); | 81 const PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); |
62 bundle.Get(chrome_ns).Set("policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 82 bundle.Get(chrome_ns).Set("policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
63 base::Value::CreateStringValue("value"), NULL); | 83 base::Value::CreateStringValue("value"), NULL); |
64 | 84 |
65 EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_)); | 85 EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_)); |
66 scoped_ptr<PolicyBundle> delegate_bundle(new PolicyBundle); | 86 scoped_ptr<PolicyBundle> delegate_bundle(new PolicyBundle); |
67 delegate_bundle->CopyFrom(bundle); | 87 delegate_bundle->CopyFrom(bundle); |
68 delegate_bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz")) | 88 delegate_bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz")) |
69 .Set("component policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 89 .Set("foo", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
70 base::Value::CreateStringValue("not forwarded"), NULL); | 90 base::Value::CreateStringValue("not forwarded"), NULL); |
71 mock_provider_.UpdatePolicy(delegate_bundle.Pass()); | 91 mock_provider_.UpdatePolicy(delegate_bundle.Pass()); |
72 Mock::VerifyAndClearExpectations(&observer_); | 92 Mock::VerifyAndClearExpectations(&observer_); |
73 | 93 |
74 EXPECT_FALSE( | 94 EXPECT_FALSE( |
75 forwarding_provider_.IsInitializationComplete(POLICY_DOMAIN_EXTENSIONS)); | 95 forwarding_provider_.IsInitializationComplete(POLICY_DOMAIN_EXTENSIONS)); |
76 EXPECT_TRUE(forwarding_provider_.policies().Equals(bundle)); | 96 EXPECT_TRUE(forwarding_provider_.policies().Equals(bundle)); |
77 } | 97 } |
78 | 98 |
79 TEST_F(ForwardingPolicyProviderTest, RefreshPolicies) { | 99 TEST_F(ForwardingPolicyProviderTest, RefreshPolicies) { |
(...skipping 19 matching lines...) Expand all Loading... | |
99 scoped_ptr<PolicyBundle> bundle(new PolicyBundle); | 119 scoped_ptr<PolicyBundle> bundle(new PolicyBundle); |
100 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, "")).CopyFrom(policy_map); | 120 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, "")).CopyFrom(policy_map); |
101 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz")) | 121 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz")) |
102 .CopyFrom(policy_map); | 122 .CopyFrom(policy_map); |
103 EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_)); | 123 EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_)); |
104 mock_provider_.UpdatePolicy(bundle.Pass()); | 124 mock_provider_.UpdatePolicy(bundle.Pass()); |
105 Mock::VerifyAndClearExpectations(&observer_); | 125 Mock::VerifyAndClearExpectations(&observer_); |
106 | 126 |
107 EXPECT_CALL(mock_provider_, RefreshPolicies()).Times(0); | 127 EXPECT_CALL(mock_provider_, RefreshPolicies()).Times(0); |
108 schema_registry_.RegisterComponent( | 128 schema_registry_.RegisterComponent( |
109 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), Schema()); | 129 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), CreateTestSchema()); |
110 schema_registry_.SetReady(POLICY_DOMAIN_EXTENSIONS); | 130 schema_registry_.SetReady(POLICY_DOMAIN_EXTENSIONS); |
111 Mock::VerifyAndClearExpectations(&mock_provider_); | 131 Mock::VerifyAndClearExpectations(&mock_provider_); |
112 | 132 |
113 EXPECT_CALL(mock_provider_, RefreshPolicies()); | 133 EXPECT_CALL(mock_provider_, RefreshPolicies()); |
114 schema_registry_.SetReady(POLICY_DOMAIN_CHROME); | 134 schema_registry_.SetReady(POLICY_DOMAIN_CHROME); |
115 Mock::VerifyAndClearExpectations(&mock_provider_); | 135 Mock::VerifyAndClearExpectations(&mock_provider_); |
116 | 136 |
117 EXPECT_FALSE(forwarding_provider_.IsInitializationComplete( | 137 EXPECT_FALSE(forwarding_provider_.IsInitializationComplete( |
118 policy::POLICY_DOMAIN_EXTENSIONS)); | 138 policy::POLICY_DOMAIN_EXTENSIONS)); |
119 PolicyBundle expected_bundle; | 139 PolicyBundle expected_bundle; |
120 expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, "")) | 140 expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, "")) |
121 .CopyFrom(policy_map); | 141 .CopyFrom(policy_map); |
122 EXPECT_TRUE(forwarding_provider_.policies().Equals(expected_bundle)); | 142 EXPECT_TRUE(forwarding_provider_.policies().Equals(expected_bundle)); |
123 | 143 |
124 EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_)); | 144 EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_)); |
125 forwarding_provider_.OnUpdatePolicy(&mock_provider_); | 145 forwarding_provider_.OnUpdatePolicy(&mock_provider_); |
126 Mock::VerifyAndClearExpectations(&observer_); | 146 Mock::VerifyAndClearExpectations(&observer_); |
127 | 147 |
128 EXPECT_TRUE(forwarding_provider_.IsInitializationComplete( | 148 EXPECT_TRUE(forwarding_provider_.IsInitializationComplete( |
129 policy::POLICY_DOMAIN_EXTENSIONS)); | 149 policy::POLICY_DOMAIN_EXTENSIONS)); |
130 expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz")) | 150 expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz")) |
131 .CopyFrom(policy_map); | 151 .CopyFrom(policy_map); |
132 EXPECT_TRUE(forwarding_provider_.policies().Equals(expected_bundle)); | 152 EXPECT_TRUE(forwarding_provider_.policies().Equals(expected_bundle)); |
133 } | 153 } |
134 | 154 |
135 TEST_F(ForwardingPolicyProviderTest, DelegateUpdates) { | 155 TEST_F(ForwardingPolicyProviderTest, DelegateUpdates) { |
136 schema_registry_.RegisterComponent( | 156 schema_registry_.RegisterComponent( |
137 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), Schema()); | 157 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), CreateTestSchema()); |
138 EXPECT_FALSE(schema_registry_.IsReady()); | 158 EXPECT_FALSE(schema_registry_.IsReady()); |
139 EXPECT_FALSE(forwarding_provider_.IsInitializationComplete( | 159 EXPECT_FALSE(forwarding_provider_.IsInitializationComplete( |
140 policy::POLICY_DOMAIN_EXTENSIONS)); | 160 policy::POLICY_DOMAIN_EXTENSIONS)); |
141 | 161 |
142 PolicyMap policy_map; | 162 PolicyMap policy_map; |
143 policy_map.Set("foo", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 163 policy_map.Set("foo", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
144 base::Value::CreateStringValue("omg"), NULL); | 164 base::Value::CreateStringValue("omg"), NULL); |
145 // Chrome policy updates are forwarded even if the components aren't ready. | 165 // Chrome policy updates are forwarded even if the components aren't ready. |
146 EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_)); | 166 EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_)); |
147 mock_provider_.UpdateChromePolicy(policy_map); | 167 mock_provider_.UpdateChromePolicy(policy_map); |
(...skipping 19 matching lines...) Expand all Loading... | |
167 // Keeps forwarding. | 187 // Keeps forwarding. |
168 EXPECT_CALL(observer_, OnUpdatePolicy(_)); | 188 EXPECT_CALL(observer_, OnUpdatePolicy(_)); |
169 mock_provider_.UpdateChromePolicy(policy_map); | 189 mock_provider_.UpdateChromePolicy(policy_map); |
170 Mock::VerifyAndClearExpectations(&observer_); | 190 Mock::VerifyAndClearExpectations(&observer_); |
171 } | 191 } |
172 | 192 |
173 TEST_F(ForwardingPolicyProviderTest, RemoveAndAddComponent) { | 193 TEST_F(ForwardingPolicyProviderTest, RemoveAndAddComponent) { |
174 EXPECT_CALL(mock_provider_, RefreshPolicies()); | 194 EXPECT_CALL(mock_provider_, RefreshPolicies()); |
175 const PolicyNamespace ns(POLICY_DOMAIN_EXTENSIONS, "xyz"); | 195 const PolicyNamespace ns(POLICY_DOMAIN_EXTENSIONS, "xyz"); |
176 schema_registry_.SetReady(POLICY_DOMAIN_CHROME); | 196 schema_registry_.SetReady(POLICY_DOMAIN_CHROME); |
177 schema_registry_.RegisterComponent(ns, Schema()); | 197 schema_registry_.RegisterComponent(ns, CreateTestSchema()); |
178 schema_registry_.SetReady(POLICY_DOMAIN_EXTENSIONS); | 198 schema_registry_.SetReady(POLICY_DOMAIN_EXTENSIONS); |
179 Mock::VerifyAndClearExpectations(&mock_provider_); | 199 Mock::VerifyAndClearExpectations(&mock_provider_); |
180 | 200 |
181 // Serve policy for |ns|. | 201 // Serve policy for |ns|. |
182 PolicyBundle platform_policy; | 202 PolicyBundle platform_policy; |
183 platform_policy.Get(ns).Set("foo", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | 203 platform_policy.Get(ns).Set("foo", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, |
184 base::Value::CreateStringValue("omg"), NULL); | 204 base::Value::CreateStringValue("omg"), NULL); |
185 scoped_ptr<PolicyBundle> copy(new PolicyBundle); | 205 scoped_ptr<PolicyBundle> copy(new PolicyBundle); |
186 copy->CopyFrom(platform_policy); | 206 copy->CopyFrom(platform_policy); |
187 EXPECT_CALL(observer_, OnUpdatePolicy(_)); | 207 EXPECT_CALL(observer_, OnUpdatePolicy(_)); |
188 mock_provider_.UpdatePolicy(copy.Pass()); | 208 mock_provider_.UpdatePolicy(copy.Pass()); |
189 Mock::VerifyAndClearExpectations(&observer_); | 209 Mock::VerifyAndClearExpectations(&observer_); |
190 EXPECT_TRUE(forwarding_provider_.policies().Equals(platform_policy)); | 210 EXPECT_TRUE(forwarding_provider_.policies().Equals(platform_policy)); |
191 | 211 |
192 // Now remove that component. | 212 // Now remove that component. |
193 EXPECT_CALL(observer_, OnUpdatePolicy(_)); | 213 EXPECT_CALL(observer_, OnUpdatePolicy(_)); |
194 schema_registry_.UnregisterComponent(ns); | 214 schema_registry_.UnregisterComponent(ns); |
195 Mock::VerifyAndClearExpectations(&observer_); | 215 Mock::VerifyAndClearExpectations(&observer_); |
196 const PolicyBundle empty; | 216 const PolicyBundle empty; |
197 EXPECT_TRUE(forwarding_provider_.policies().Equals(empty)); | 217 EXPECT_TRUE(forwarding_provider_.policies().Equals(empty)); |
198 | 218 |
199 // Adding it back should serve the current policies again, even though they | 219 // Adding it back should serve the current policies again, even though they |
200 // haven't changed on the platform provider. | 220 // haven't changed on the platform provider. |
201 EXPECT_CALL(mock_provider_, RefreshPolicies()); | 221 EXPECT_CALL(mock_provider_, RefreshPolicies()); |
202 schema_registry_.RegisterComponent(ns, Schema()); | 222 schema_registry_.RegisterComponent(ns, CreateTestSchema()); |
203 Mock::VerifyAndClearExpectations(&mock_provider_); | 223 Mock::VerifyAndClearExpectations(&mock_provider_); |
204 | 224 |
205 EXPECT_CALL(observer_, OnUpdatePolicy(_)); | 225 EXPECT_CALL(observer_, OnUpdatePolicy(_)); |
206 copy.reset(new PolicyBundle); | 226 copy.reset(new PolicyBundle); |
207 copy->CopyFrom(platform_policy); | 227 copy->CopyFrom(platform_policy); |
208 mock_provider_.UpdatePolicy(copy.Pass()); | 228 mock_provider_.UpdatePolicy(copy.Pass()); |
209 Mock::VerifyAndClearExpectations(&observer_); | 229 Mock::VerifyAndClearExpectations(&observer_); |
210 EXPECT_TRUE(forwarding_provider_.policies().Equals(platform_policy)); | 230 EXPECT_TRUE(forwarding_provider_.policies().Equals(platform_policy)); |
211 } | 231 } |
212 | 232 |
213 } // namespace policy | 233 } // namespace policy |
OLD | NEW |