Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(246)

Side by Side Diff: chrome/browser/policy/device_token_fetcher_unittest.cc

Issue 9403010: Add support for kiosk mode on the client. Make sure the settings are written in the lockbox. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed nitty nit. Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/policy/device_token_fetcher.h" 5 #include "chrome/browser/policy/device_token_fetcher.h"
6 6
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/scoped_temp_dir.h" 8 #include "base/scoped_temp_dir.h"
9 #include "chrome/browser/policy/cloud_policy_data_store.h" 9 #include "chrome/browser/policy/cloud_policy_data_store.h"
10 #include "chrome/browser/policy/logging_work_scheduler.h" 10 #include "chrome/browser/policy/logging_work_scheduler.h"
11 #include "chrome/browser/policy/mock_cloud_policy_data_store.h" 11 #include "chrome/browser/policy/mock_cloud_policy_data_store.h"
12 #include "chrome/browser/policy/mock_device_management_service.h" 12 #include "chrome/browser/policy/mock_device_management_service.h"
13 #include "chrome/browser/policy/policy_notifier.h" 13 #include "chrome/browser/policy/policy_notifier.h"
14 #include "chrome/browser/policy/user_policy_cache.h" 14 #include "chrome/browser/policy/user_policy_cache.h"
15 #include "content/test/test_browser_thread.h" 15 #include "content/test/test_browser_thread.h"
16 #include "testing/gmock/include/gmock/gmock.h" 16 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 18
19 namespace em = enterprise_management; 19 namespace em = enterprise_management;
20 20
21 namespace policy { 21 namespace policy {
22 22
23 const char kTestToken[] = "device_token_fetcher_test_auth_token"; 23 const char kTestToken[] = "device_token_fetcher_test_auth_token";
24 24
25 using content::BrowserThread; 25 using content::BrowserThread;
26 using testing::AnyNumber; 26 using testing::AnyNumber;
27 using testing::Mock; 27 using testing::Mock;
28 using testing::_; 28 using testing::_;
29 29
30 ACTION_P(VerifyRegisterRequest, known_machine_id) {
31 ASSERT_TRUE(arg0);
32 ASSERT_TRUE(arg0->GetRequest());
33 ASSERT_TRUE(arg0->GetRequest()->has_register_request());
34 const em::DeviceRegisterRequest& request =
35 arg0->GetRequest()->register_request();
36 if (known_machine_id) {
37 EXPECT_TRUE(request.has_known_machine_id());
38 EXPECT_TRUE(request.known_machine_id());
39 } else {
40 EXPECT_FALSE(request.has_known_machine_id());
41 }
42 }
43
30 class DeviceTokenFetcherTest : public testing::Test { 44 class DeviceTokenFetcherTest : public testing::Test {
31 protected: 45 protected:
32 DeviceTokenFetcherTest() 46 DeviceTokenFetcherTest()
33 : ui_thread_(BrowserThread::UI, &loop_), 47 : ui_thread_(BrowserThread::UI, &loop_),
34 file_thread_(BrowserThread::FILE, &loop_) { 48 file_thread_(BrowserThread::FILE, &loop_) {
35 EXPECT_TRUE(temp_user_data_dir_.CreateUniqueTempDir()); 49 EXPECT_TRUE(temp_user_data_dir_.CreateUniqueTempDir());
36 successful_registration_response_.mutable_register_response()-> 50 successful_registration_response_.mutable_register_response()->
37 set_device_management_token("fake_token"); 51 set_device_management_token("fake_token");
52 successful_registration_response_.mutable_register_response()->
53 set_enrollment_type(em::DeviceRegisterResponse::ENTERPRISE);
38 } 54 }
39 55
40 virtual void SetUp() { 56 virtual void SetUp() {
41 cache_.reset(new UserPolicyCache( 57 cache_.reset(new UserPolicyCache(
42 temp_user_data_dir_.path().AppendASCII("DeviceTokenFetcherTest"), 58 temp_user_data_dir_.path().AppendASCII("DeviceTokenFetcherTest"),
43 false /* wait_for_policy_fetch */)); 59 false /* wait_for_policy_fetch */));
44 EXPECT_CALL(service_, StartJob(_)).Times(AnyNumber()); 60 EXPECT_CALL(service_, StartJob(_)).Times(AnyNumber());
45 data_store_.reset(CloudPolicyDataStore::CreateForUserPolicies()); 61 data_store_.reset(CloudPolicyDataStore::CreateForUserPolicies());
46 data_store_->AddObserver(&observer_); 62 data_store_->AddObserver(&observer_);
47 } 63 }
48 64
49 virtual void TearDown() { 65 virtual void TearDown() {
50 loop_.RunAllPending(); 66 loop_.RunAllPending();
51 data_store_->RemoveObserver(&observer_); 67 data_store_->RemoveObserver(&observer_);
52 } 68 }
53 69
54 void FetchToken(DeviceTokenFetcher* fetcher) { 70 void FetchToken(DeviceTokenFetcher* fetcher, CloudPolicyDataStore* store) {
55 data_store_->SetupForTesting("", "fake_device_id", "fake_user_name", 71 store->SetupForTesting("", "fake_device_id", "fake_user_name",
56 "fake_auth_token", true); 72 "fake_auth_token", true);
57 fetcher->FetchToken(); 73 fetcher->FetchToken();
58 } 74 }
59 75
60 void CreateNewWaitingCache() { 76 void CreateNewWaitingCache() {
61 cache_.reset(new UserPolicyCache( 77 cache_.reset(new UserPolicyCache(
62 temp_user_data_dir_.path().AppendASCII("DeviceTokenFetcherTest"), 78 temp_user_data_dir_.path().AppendASCII("DeviceTokenFetcherTest"),
63 true /* wait_for_policy_fetch */)); 79 true /* wait_for_policy_fetch */));
64 // Make this cache's disk cache ready, but have it still waiting for a 80 // Make this cache's disk cache ready, but have it still waiting for a
65 // policy fetch. 81 // policy fetch.
66 cache_->Load(); 82 cache_->Load();
67 loop_.RunAllPending(); 83 loop_.RunAllPending();
68 ASSERT_TRUE(cache_->last_policy_refresh_time().is_null()); 84 ASSERT_TRUE(cache_->last_policy_refresh_time().is_null());
69 ASSERT_FALSE(cache_->IsReady()); 85 ASSERT_FALSE(cache_->IsReady());
70 } 86 }
71 87
88 void SetUpSuccessfulRegistrationExpectation(bool known_machine_id) {
89 EXPECT_CALL(service_,
90 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION))
91 .WillOnce(service_.SucceedJob(successful_registration_response_));
92 EXPECT_CALL(service_, StartJob(_))
93 .WillOnce(VerifyRegisterRequest(known_machine_id));
94 }
95
72 MessageLoop loop_; 96 MessageLoop loop_;
73 MockDeviceManagementService service_; 97 MockDeviceManagementService service_;
74 scoped_ptr<CloudPolicyCacheBase> cache_; 98 scoped_ptr<CloudPolicyCacheBase> cache_;
75 scoped_ptr<CloudPolicyDataStore> data_store_; 99 scoped_ptr<CloudPolicyDataStore> data_store_;
76 MockCloudPolicyDataStoreObserver observer_; 100 MockCloudPolicyDataStoreObserver observer_;
77 PolicyNotifier notifier_; 101 PolicyNotifier notifier_;
78 ScopedTempDir temp_user_data_dir_; 102 ScopedTempDir temp_user_data_dir_;
79 em::DeviceManagementResponse successful_registration_response_; 103 em::DeviceManagementResponse successful_registration_response_;
80 104
81 private: 105 private:
82 content::TestBrowserThread ui_thread_; 106 content::TestBrowserThread ui_thread_;
83 content::TestBrowserThread file_thread_; 107 content::TestBrowserThread file_thread_;
84 }; 108 };
85 109
86 ACTION_P(VerifyRegisterRequest, known_machine_id) {
87 ASSERT_TRUE(arg0);
88 ASSERT_TRUE(arg0->GetRequest());
89 ASSERT_TRUE(arg0->GetRequest()->has_register_request());
90 const em::DeviceRegisterRequest& request =
91 arg0->GetRequest()->register_request();
92 if (known_machine_id) {
93 EXPECT_TRUE(request.has_known_machine_id());
94 EXPECT_TRUE(request.known_machine_id());
95 } else {
96 EXPECT_FALSE(request.has_known_machine_id());
97 }
98 }
99
100 TEST_F(DeviceTokenFetcherTest, FetchToken) { 110 TEST_F(DeviceTokenFetcherTest, FetchToken) {
101 testing::InSequence s; 111 testing::InSequence s;
102 EXPECT_CALL(service_, 112 SetUpSuccessfulRegistrationExpectation(false);
103 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION))
104 .WillOnce(service_.SucceedJob(successful_registration_response_));
105 EXPECT_CALL(service_, StartJob(_)).WillOnce(VerifyRegisterRequest(false));
106 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(), 113 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(),
107 &notifier_); 114 &notifier_);
108 EXPECT_CALL(observer_, OnDeviceTokenChanged()); 115 EXPECT_CALL(observer_, OnDeviceTokenChanged());
109 EXPECT_EQ("", data_store_->device_token()); 116 EXPECT_EQ("", data_store_->device_token());
110 FetchToken(&fetcher); 117 EXPECT_EQ(DEVICE_MODE_UNKNOWN, data_store_->device_mode());
118 FetchToken(&fetcher, data_store_.get());
111 loop_.RunAllPending(); 119 loop_.RunAllPending();
112 Mock::VerifyAndClearExpectations(&observer_); 120 Mock::VerifyAndClearExpectations(&observer_);
113 std::string token = data_store_->device_token(); 121 std::string token = data_store_->device_token();
114 EXPECT_NE("", token); 122 EXPECT_NE("", token);
123 // User policy registration should not set enrollment mode.
124 EXPECT_EQ(DEVICE_MODE_UNKNOWN, data_store_->device_mode());
115 125
116 // Calling FetchToken() again should result in a new token being fetched. 126 // Calling FetchToken() again should result in a new token being fetched.
117 successful_registration_response_.mutable_register_response()-> 127 successful_registration_response_.mutable_register_response()->
118 set_device_management_token("new_fake_token"); 128 set_device_management_token("new_fake_token");
119 EXPECT_CALL(service_, 129 EXPECT_CALL(service_,
120 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) 130 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION))
121 .WillOnce(service_.SucceedJob(successful_registration_response_)); 131 .WillOnce(service_.SucceedJob(successful_registration_response_));
122 EXPECT_CALL(observer_, OnDeviceTokenChanged()); 132 EXPECT_CALL(observer_, OnDeviceTokenChanged());
123 FetchToken(&fetcher); 133 FetchToken(&fetcher, data_store_.get());
124 loop_.RunAllPending(); 134 loop_.RunAllPending();
125 Mock::VerifyAndClearExpectations(&observer_); 135 Mock::VerifyAndClearExpectations(&observer_);
126 std::string token2 = data_store_->device_token(); 136 std::string token2 = data_store_->device_token();
127 EXPECT_NE("", token2); 137 EXPECT_NE("", token2);
128 EXPECT_NE(token, token2); 138 EXPECT_NE(token, token2);
129 } 139 }
130 140
141 TEST_F(DeviceTokenFetcherTest, FetchDeviceToken) {
142 testing::InSequence s;
143 scoped_ptr<CloudPolicyDataStore> data_store(
144 CloudPolicyDataStore::CreateForDevicePolicies());
145 SetUpSuccessfulRegistrationExpectation(false);
146 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store.get(),
147 &notifier_);
148 EXPECT_EQ("", data_store->device_token());
149 EXPECT_EQ(DEVICE_MODE_UNKNOWN, data_store->device_mode());
150 FetchToken(&fetcher, data_store.get());
151 loop_.RunAllPending();
152 EXPECT_NE("", data_store->device_token());
153 // For device registrations, the fetcher needs to determine device mode.
154 EXPECT_EQ(DEVICE_MODE_ENTERPRISE, data_store->device_mode());
155 }
156
157 // TODO(pastarmovj): This test must be changed in accordance with
158 // http://crosbug.com/26624.
159 TEST_F(DeviceTokenFetcherTest, FetchDeviceTokenMissingMode) {
160 testing::InSequence s;
161 scoped_ptr<CloudPolicyDataStore> data_store(
162 CloudPolicyDataStore::CreateForDevicePolicies());
163 SetUpSuccessfulRegistrationExpectation(false);
164 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store.get(),
165 &notifier_);
166 EXPECT_EQ("", data_store->device_token());
167 EXPECT_EQ(DEVICE_MODE_UNKNOWN, data_store->device_mode());
168 successful_registration_response_.mutable_register_response()->
169 clear_enrollment_type();
170 FetchToken(&fetcher, data_store.get());
171 loop_.RunAllPending();
172 Mock::VerifyAndClearExpectations(&observer_);
173 EXPECT_NE("", data_store->device_token());
174 // TODO(pastarmovj): Modify when http://crosbug.com/26624 is resolved.
175 EXPECT_EQ(DEVICE_MODE_ENTERPRISE, data_store->device_mode());
176 }
177
131 TEST_F(DeviceTokenFetcherTest, RetryOnError) { 178 TEST_F(DeviceTokenFetcherTest, RetryOnError) {
132 testing::InSequence s; 179 testing::InSequence s;
133 EXPECT_CALL(service_, 180 EXPECT_CALL(service_,
134 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) 181 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION))
135 .WillOnce(service_.FailJob(DM_STATUS_REQUEST_FAILED)) 182 .WillOnce(service_.FailJob(DM_STATUS_REQUEST_FAILED))
136 .WillOnce(service_.SucceedJob(successful_registration_response_)); 183 .WillOnce(service_.SucceedJob(successful_registration_response_));
137 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(), 184 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(),
138 &notifier_, new DummyWorkScheduler); 185 &notifier_, new DummyWorkScheduler);
139 EXPECT_CALL(observer_, OnDeviceTokenChanged()); 186 EXPECT_CALL(observer_, OnDeviceTokenChanged());
140 FetchToken(&fetcher); 187 FetchToken(&fetcher, data_store_.get());
141 loop_.RunAllPending(); 188 loop_.RunAllPending();
142 Mock::VerifyAndClearExpectations(&observer_); 189 Mock::VerifyAndClearExpectations(&observer_);
143 EXPECT_NE("", data_store_->device_token()); 190 EXPECT_NE("", data_store_->device_token());
144 } 191 }
145 192
146 TEST_F(DeviceTokenFetcherTest, UnmanagedDevice) { 193 TEST_F(DeviceTokenFetcherTest, UnmanagedDevice) {
147 EXPECT_CALL(service_, 194 EXPECT_CALL(service_,
148 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) 195 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION))
149 .WillOnce(service_.FailJob(DM_STATUS_SERVICE_MANAGEMENT_NOT_SUPPORTED)); 196 .WillOnce(service_.FailJob(DM_STATUS_SERVICE_MANAGEMENT_NOT_SUPPORTED));
150 EXPECT_FALSE(cache_->is_unmanaged()); 197 EXPECT_FALSE(cache_->is_unmanaged());
151 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(), 198 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(),
152 &notifier_); 199 &notifier_);
153 EXPECT_CALL(observer_, OnDeviceTokenChanged()).Times(0); 200 EXPECT_CALL(observer_, OnDeviceTokenChanged()).Times(0);
154 FetchToken(&fetcher); 201 FetchToken(&fetcher, data_store_.get());
155 loop_.RunAllPending(); 202 loop_.RunAllPending();
156 Mock::VerifyAndClearExpectations(&observer_); 203 Mock::VerifyAndClearExpectations(&observer_);
157 EXPECT_EQ("", data_store_->device_token()); 204 EXPECT_EQ("", data_store_->device_token());
158 EXPECT_TRUE(cache_->is_unmanaged()); 205 EXPECT_TRUE(cache_->is_unmanaged());
159 } 206 }
160 207
161 TEST_F(DeviceTokenFetcherTest, DontSetFetchingDone) { 208 TEST_F(DeviceTokenFetcherTest, DontSetFetchingDone) {
162 CreateNewWaitingCache(); 209 CreateNewWaitingCache();
163 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(), 210 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(),
164 &notifier_); 211 &notifier_);
165 EXPECT_FALSE(cache_->IsReady()); 212 EXPECT_FALSE(cache_->IsReady());
166 } 213 }
167 214
168 TEST_F(DeviceTokenFetcherTest, DontSetFetchingDoneWithoutPolicyFetch) { 215 TEST_F(DeviceTokenFetcherTest, DontSetFetchingDoneWithoutPolicyFetch) {
169 CreateNewWaitingCache(); 216 CreateNewWaitingCache();
170 EXPECT_CALL(service_, 217 EXPECT_CALL(service_,
171 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) 218 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION))
172 .WillOnce(service_.SucceedJob(successful_registration_response_)); 219 .WillOnce(service_.SucceedJob(successful_registration_response_));
173 EXPECT_CALL(observer_, OnDeviceTokenChanged()); 220 EXPECT_CALL(observer_, OnDeviceTokenChanged());
174 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(), 221 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(),
175 &notifier_); 222 &notifier_);
176 FetchToken(&fetcher); 223 FetchToken(&fetcher, data_store_.get());
177 loop_.RunAllPending(); 224 loop_.RunAllPending();
178 // On successful token fetching the cache isn't set to ready, since the next 225 // On successful token fetching the cache isn't set to ready, since the next
179 // step is to fetch policy. Only failures to fetch the token should make 226 // step is to fetch policy. Only failures to fetch the token should make
180 // the cache ready. 227 // the cache ready.
181 EXPECT_FALSE(cache_->IsReady()); 228 EXPECT_FALSE(cache_->IsReady());
182 } 229 }
183 230
184 TEST_F(DeviceTokenFetcherTest, SetFetchingDoneWhenUnmanaged) { 231 TEST_F(DeviceTokenFetcherTest, SetFetchingDoneWhenUnmanaged) {
185 CreateNewWaitingCache(); 232 CreateNewWaitingCache();
186 cache_->SetUnmanaged(); 233 cache_->SetUnmanaged();
187 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(), 234 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(),
188 &notifier_); 235 &notifier_);
189 EXPECT_TRUE(cache_->IsReady()); 236 EXPECT_TRUE(cache_->IsReady());
190 } 237 }
191 238
192 TEST_F(DeviceTokenFetcherTest, SetFetchingDoneOnFailures) { 239 TEST_F(DeviceTokenFetcherTest, SetFetchingDoneOnFailures) {
193 CreateNewWaitingCache(); 240 CreateNewWaitingCache();
194 EXPECT_CALL(service_, 241 EXPECT_CALL(service_,
195 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) 242 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION))
196 .WillOnce(service_.FailJob(DM_STATUS_REQUEST_FAILED)); 243 .WillOnce(service_.FailJob(DM_STATUS_REQUEST_FAILED));
197 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(), 244 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(),
198 &notifier_); 245 &notifier_);
199 FetchToken(&fetcher); 246 FetchToken(&fetcher, data_store_.get());
200 loop_.RunAllPending(); 247 loop_.RunAllPending();
201 // This is the opposite case of DontSetFetchingDone1. 248 // This is the opposite case of DontSetFetchingDone1.
202 EXPECT_TRUE(cache_->IsReady()); 249 EXPECT_TRUE(cache_->IsReady());
203 } 250 }
204 251
205 TEST_F(DeviceTokenFetcherTest, SetKnownMachineId) { 252 TEST_F(DeviceTokenFetcherTest, SetKnownMachineId) {
206 EXPECT_CALL(service_, 253 SetUpSuccessfulRegistrationExpectation(true);
207 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION))
208 .WillOnce(service_.SucceedJob(successful_registration_response_));
209 EXPECT_CALL(service_, StartJob(_)).WillOnce(VerifyRegisterRequest(true));
210 254
211 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(), 255 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(),
212 &notifier_); 256 &notifier_);
213 EXPECT_CALL(observer_, OnDeviceTokenChanged()); 257 EXPECT_CALL(observer_, OnDeviceTokenChanged());
214 EXPECT_EQ("", data_store_->device_token()); 258 EXPECT_EQ("", data_store_->device_token());
215 259
216 data_store_->set_known_machine_id(true); 260 data_store_->set_known_machine_id(true);
217 FetchToken(&fetcher); 261 FetchToken(&fetcher, data_store_.get());
218 loop_.RunAllPending(); 262 loop_.RunAllPending();
219 263
220 Mock::VerifyAndClearExpectations(&observer_); 264 Mock::VerifyAndClearExpectations(&observer_);
221 std::string token = data_store_->device_token(); 265 std::string token = data_store_->device_token();
222 EXPECT_NE("", token); 266 EXPECT_NE("", token);
223 } 267 }
224 268
225 } // namespace policy 269 } // namespace policy
OLDNEW
« no previous file with comments | « chrome/browser/policy/device_token_fetcher.cc ('k') | chrome/browser/policy/enterprise_install_attributes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698