OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2013 The Chromium 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 "chrome/browser/policy/forwarding_policy_provider.h" | |
6 | |
7 #include "base/basictypes.h" | |
bartfab (slow)
2013/11/11 14:40:08
Nit: Already included by header file.
Joao da Silva
2013/11/12 15:26:33
Done.
| |
8 #include "base/values.h" | |
9 #include "chrome/browser/policy/mock_configuration_policy_provider.h" | |
10 #include "chrome/browser/policy/policy_bundle.h" | |
11 #include "chrome/browser/policy/policy_map.h" | |
12 #include "chrome/browser/policy/policy_types.h" | |
13 #include "chrome/browser/policy/schema_registry.h" | |
14 #include "components/policy/core/common/policy_namespace.h" | |
15 #include "components/policy/core/common/schema.h" | |
16 #include "testing/gmock/include/gmock/gmock.h" | |
17 #include "testing/gtest/include/gtest/gtest.h" | |
18 | |
19 using testing::_; | |
20 using testing::Mock; | |
21 using testing::Return; | |
22 | |
23 namespace policy { | |
24 | |
25 class ForwardingPolicyProviderTest : public testing::Test { | |
bartfab (slow)
2013/11/11 14:40:08
Nit: The style guide forbids inline method definit
Joao da Silva
2013/11/12 15:26:33
There is an exception for tests. I dug the latest
bartfab (slow)
2013/11/13 11:56:35
Interesting. I had followed a different thread tha
| |
26 protected: | |
27 ForwardingPolicyProviderTest() : forwarding_provider_(&mock_provider_) { | |
28 mock_provider_.Init(); | |
29 forwarding_provider_.Init(&schema_registry_); | |
30 forwarding_provider_.AddObserver(&observer_); | |
31 } | |
32 | |
33 virtual ~ForwardingPolicyProviderTest() { | |
34 forwarding_provider_.RemoveObserver(&observer_); | |
35 forwarding_provider_.Shutdown(); | |
36 mock_provider_.Shutdown(); | |
37 } | |
38 | |
39 SchemaRegistry schema_registry_; | |
40 MockConfigurationPolicyObserver observer_; | |
41 MockConfigurationPolicyProvider mock_provider_; | |
42 ForwardingPolicyProvider forwarding_provider_; | |
43 }; | |
44 | |
45 TEST_F(ForwardingPolicyProviderTest, Empty) { | |
46 EXPECT_FALSE(schema_registry_.IsReady()); | |
47 EXPECT_FALSE( | |
48 forwarding_provider_.IsInitializationComplete(POLICY_DOMAIN_EXTENSIONS)); | |
49 | |
50 EXPECT_CALL(mock_provider_, IsInitializationComplete(POLICY_DOMAIN_CHROME)) | |
51 .WillOnce(Return(false)); | |
52 EXPECT_FALSE( | |
53 forwarding_provider_.IsInitializationComplete(POLICY_DOMAIN_CHROME)); | |
54 Mock::VerifyAndClearExpectations(&mock_provider_); | |
55 | |
56 const PolicyBundle empty_bundle; | |
57 EXPECT_TRUE(forwarding_provider_.policies().Equals(empty_bundle)); | |
58 } | |
59 | |
60 TEST_F(ForwardingPolicyProviderTest, ForwardsChromePolicy) { | |
61 PolicyBundle bundle; | |
62 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); | |
bartfab (slow)
2013/11/11 14:40:08
Nit: const - or simply construct it inline.
Joao da Silva
2013/11/12 15:26:33
Done.
| |
63 bundle.Get(chrome_ns).Set("policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | |
64 base::Value::CreateStringValue("value"), NULL); | |
65 | |
66 EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_)); | |
67 scoped_ptr<PolicyBundle> copy(new PolicyBundle); | |
bartfab (slow)
2013/11/11 14:40:08
Nit 1: I would not call this |copy| because its ma
Joao da Silva
2013/11/12 15:26:33
Done.
| |
68 copy->CopyFrom(bundle); | |
69 copy->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz")) | |
70 .Set("component policy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | |
71 base::Value::CreateStringValue("not forwarded"), NULL); | |
72 mock_provider_.UpdatePolicy(copy.Pass()); | |
73 Mock::VerifyAndClearExpectations(&observer_); | |
74 | |
75 EXPECT_FALSE( | |
76 forwarding_provider_.IsInitializationComplete(POLICY_DOMAIN_EXTENSIONS)); | |
77 EXPECT_TRUE(forwarding_provider_.policies().Equals(bundle)); | |
78 } | |
79 | |
80 TEST_F(ForwardingPolicyProviderTest, RefreshPolicies) { | |
81 EXPECT_CALL(mock_provider_, RefreshPolicies()); | |
82 forwarding_provider_.RefreshPolicies(); | |
83 Mock::VerifyAndClearExpectations(&mock_provider_); | |
84 } | |
85 | |
86 TEST_F(ForwardingPolicyProviderTest, SchemaReady) { | |
87 EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_)); | |
88 schema_registry_.SetReady(POLICY_DOMAIN_CHROME); | |
89 schema_registry_.SetReady(POLICY_DOMAIN_EXTENSIONS); | |
90 Mock::VerifyAndClearExpectations(&observer_); | |
91 | |
92 EXPECT_TRUE(forwarding_provider_.IsInitializationComplete( | |
93 policy::POLICY_DOMAIN_EXTENSIONS)); | |
94 } | |
95 | |
96 TEST_F(ForwardingPolicyProviderTest, SchemaReadyWithComponents) { | |
97 PolicyMap policy_map; | |
98 policy_map.Set("foo", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | |
99 base::Value::CreateStringValue("omg"), NULL); | |
100 scoped_ptr<PolicyBundle> bundle(new PolicyBundle); | |
101 bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, "")).CopyFrom(policy_map); | |
102 bundle->Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz")) | |
103 .CopyFrom(policy_map); | |
104 EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_)); | |
105 mock_provider_.UpdatePolicy(bundle.Pass()); | |
106 Mock::VerifyAndClearExpectations(&observer_); | |
107 | |
108 EXPECT_CALL(mock_provider_, RefreshPolicies()); | |
109 schema_registry_.SetReady(POLICY_DOMAIN_CHROME); | |
bartfab (slow)
2013/11/11 14:40:08
Nit: You could additionally verify that this SetRe
Joao da Silva
2013/11/12 15:26:33
Done.
| |
110 schema_registry_.RegisterComponent( | |
111 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), Schema()); | |
112 schema_registry_.SetReady(POLICY_DOMAIN_EXTENSIONS); | |
113 Mock::VerifyAndClearExpectations(&mock_provider_); | |
114 | |
115 EXPECT_FALSE(forwarding_provider_.IsInitializationComplete( | |
116 policy::POLICY_DOMAIN_EXTENSIONS)); | |
117 PolicyBundle expected_bundle; | |
118 expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, "")) | |
119 .CopyFrom(policy_map); | |
120 EXPECT_TRUE(forwarding_provider_.policies().Equals(expected_bundle)); | |
121 | |
122 EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_)); | |
123 forwarding_provider_.OnUpdatePolicy(&mock_provider_); | |
124 Mock::VerifyAndClearExpectations(&observer_); | |
125 | |
126 EXPECT_TRUE(forwarding_provider_.IsInitializationComplete( | |
127 policy::POLICY_DOMAIN_EXTENSIONS)); | |
128 expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz")) | |
129 .CopyFrom(policy_map); | |
130 EXPECT_TRUE(forwarding_provider_.policies().Equals(expected_bundle)); | |
131 } | |
132 | |
133 TEST_F(ForwardingPolicyProviderTest, DelegateUpdates) { | |
134 schema_registry_.RegisterComponent( | |
135 PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), Schema()); | |
136 EXPECT_FALSE(schema_registry_.IsReady()); | |
137 EXPECT_FALSE(forwarding_provider_.IsInitializationComplete( | |
138 policy::POLICY_DOMAIN_EXTENSIONS)); | |
139 | |
140 PolicyMap policy_map; | |
141 policy_map.Set("foo", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, | |
142 base::Value::CreateStringValue("omg"), NULL); | |
143 // Chrome policy updates are forwarded even if the components aren't ready. | |
144 EXPECT_CALL(observer_, OnUpdatePolicy(&forwarding_provider_)); | |
145 mock_provider_.UpdateChromePolicy(policy_map); | |
146 Mock::VerifyAndClearExpectations(&observer_); | |
147 | |
148 EXPECT_CALL(mock_provider_, RefreshPolicies()); | |
149 schema_registry_.SetReady(POLICY_DOMAIN_CHROME); | |
150 schema_registry_.SetReady(POLICY_DOMAIN_EXTENSIONS); | |
151 EXPECT_TRUE(schema_registry_.IsReady()); | |
152 Mock::VerifyAndClearExpectations(&mock_provider_); | |
153 EXPECT_FALSE(forwarding_provider_.IsInitializationComplete( | |
154 policy::POLICY_DOMAIN_EXTENSIONS)); | |
155 | |
156 // The forwarding provider becomes ready after this refresh completes, and | |
157 // starts forwarding policy updates after that. | |
158 EXPECT_CALL(observer_, OnUpdatePolicy(_)); | |
159 mock_provider_.UpdateChromePolicy(policy_map); | |
160 Mock::VerifyAndClearExpectations(&observer_); | |
161 | |
162 EXPECT_TRUE(forwarding_provider_.IsInitializationComplete( | |
163 policy::POLICY_DOMAIN_EXTENSIONS)); | |
164 | |
165 // Keeps forwarding from now on. | |
bartfab (slow)
2013/11/11 14:40:08
Nit: No need for "from now on" - the forwarding wa
Joao da Silva
2013/11/12 15:26:33
Done.
| |
166 EXPECT_CALL(observer_, OnUpdatePolicy(_)); | |
167 mock_provider_.UpdateChromePolicy(policy_map); | |
168 Mock::VerifyAndClearExpectations(&observer_); | |
169 } | |
170 | |
171 } // namespace policy | |
OLD | NEW |