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

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

Issue 9404011: Explicitly wait for user policy before completing login. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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/bind.h"
8 #include "base/callback.h"
7 #include "base/message_loop.h" 9 #include "base/message_loop.h"
8 #include "base/scoped_temp_dir.h" 10 #include "base/scoped_temp_dir.h"
9 #include "chrome/browser/policy/cloud_policy_data_store.h" 11 #include "chrome/browser/policy/cloud_policy_data_store.h"
10 #include "chrome/browser/policy/logging_work_scheduler.h" 12 #include "chrome/browser/policy/logging_work_scheduler.h"
11 #include "chrome/browser/policy/mock_cloud_policy_data_store.h" 13 #include "chrome/browser/policy/mock_cloud_policy_data_store.h"
12 #include "chrome/browser/policy/mock_device_management_service.h" 14 #include "chrome/browser/policy/mock_device_management_service.h"
13 #include "chrome/browser/policy/policy_notifier.h" 15 #include "chrome/browser/policy/policy_notifier.h"
14 #include "chrome/browser/policy/user_policy_cache.h" 16 #include "chrome/browser/policy/user_policy_cache.h"
15 #include "content/test/test_browser_thread.h" 17 #include "content/test/test_browser_thread.h"
16 #include "testing/gmock/include/gmock/gmock.h" 18 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
18 20
19 namespace em = enterprise_management; 21 namespace em = enterprise_management;
20 22
21 namespace policy { 23 namespace policy {
22 24
23 const char kTestToken[] = "device_token_fetcher_test_auth_token"; 25 const char kTestToken[] = "device_token_fetcher_test_auth_token";
24 26
25 using content::BrowserThread; 27 using content::BrowserThread;
26 using testing::AnyNumber; 28 using testing::AnyNumber;
27 using testing::Mock; 29 using testing::Mock;
28 using testing::_; 30 using testing::_;
29 31
30 class DeviceTokenFetcherTest : public testing::Test { 32 class DeviceTokenFetcherTest : public testing::Test {
31 protected: 33 protected:
32 DeviceTokenFetcherTest() 34 DeviceTokenFetcherTest()
33 : ui_thread_(BrowserThread::UI, &loop_), 35 : ready_callback_was_invoked_(false),
36 ui_thread_(BrowserThread::UI, &loop_),
34 file_thread_(BrowserThread::FILE, &loop_) { 37 file_thread_(BrowserThread::FILE, &loop_) {
35 EXPECT_TRUE(temp_user_data_dir_.CreateUniqueTempDir()); 38 EXPECT_TRUE(temp_user_data_dir_.CreateUniqueTempDir());
36 successful_registration_response_.mutable_register_response()-> 39 successful_registration_response_.mutable_register_response()->
37 set_device_management_token("fake_token"); 40 set_device_management_token("fake_token");
38 } 41 }
39 42
40 virtual void SetUp() { 43 virtual void SetUp() {
41 cache_.reset(new UserPolicyCache( 44 cache_.reset(new UserPolicyCache(
42 temp_user_data_dir_.path().AppendASCII("DeviceTokenFetcherTest"), 45 temp_user_data_dir_.path().AppendASCII("DeviceTokenFetcherTest"),
43 false /* wait_for_policy_fetch */)); 46 false, /* wait_for_policy_fetch */
47 base::Closure() /* ready_callback */));
44 EXPECT_CALL(service_, StartJob(_)).Times(AnyNumber()); 48 EXPECT_CALL(service_, StartJob(_)).Times(AnyNumber());
45 data_store_.reset(CloudPolicyDataStore::CreateForUserPolicies()); 49 data_store_.reset(CloudPolicyDataStore::CreateForUserPolicies());
46 data_store_->AddObserver(&observer_); 50 data_store_->AddObserver(&observer_);
47 } 51 }
48 52
49 virtual void TearDown() { 53 virtual void TearDown() {
50 loop_.RunAllPending(); 54 loop_.RunAllPending();
51 data_store_->RemoveObserver(&observer_); 55 data_store_->RemoveObserver(&observer_);
52 } 56 }
53 57
54 void FetchToken(DeviceTokenFetcher* fetcher) { 58 void FetchToken(DeviceTokenFetcher* fetcher) {
55 data_store_->SetupForTesting("", "fake_device_id", "fake_user_name", 59 data_store_->SetupForTesting("", "fake_device_id", "fake_user_name",
56 "fake_auth_token", true); 60 "fake_auth_token", true);
57 fetcher->FetchToken(); 61 fetcher->FetchToken();
58 } 62 }
59 63
60 void CreateNewWaitingCache() { 64 void CreateNewWaitingCache() {
65 ready_callback_was_invoked_ = false;
61 cache_.reset(new UserPolicyCache( 66 cache_.reset(new UserPolicyCache(
62 temp_user_data_dir_.path().AppendASCII("DeviceTokenFetcherTest"), 67 temp_user_data_dir_.path().AppendASCII("DeviceTokenFetcherTest"),
63 true /* wait_for_policy_fetch */)); 68 true, /* wait_for_policy_fetch */
69 base::Bind(&DeviceTokenFetcherTest::ReadyCallback,
70 base::Unretained(this))));
64 // Make this cache's disk cache ready, but have it still waiting for a 71 // Make this cache's disk cache ready, but have it still waiting for a
65 // policy fetch. 72 // policy fetch.
66 cache_->Load(); 73 cache_->Load();
67 loop_.RunAllPending(); 74 loop_.RunAllPending();
68 ASSERT_TRUE(cache_->last_policy_refresh_time().is_null()); 75 ASSERT_TRUE(cache_->last_policy_refresh_time().is_null());
69 ASSERT_FALSE(cache_->IsReady()); 76 ASSERT_FALSE(cache_->IsReady());
77 ASSERT_FALSE(ready_callback_was_invoked_);
78 }
79
80 void ReadyCallback() {
Mattias Nissler (ping if slow) 2012/02/16 10:24:11 ditto
81 ready_callback_was_invoked_ = true;
70 } 82 }
71 83
72 MessageLoop loop_; 84 MessageLoop loop_;
73 MockDeviceManagementService service_; 85 MockDeviceManagementService service_;
74 scoped_ptr<CloudPolicyCacheBase> cache_; 86 scoped_ptr<CloudPolicyCacheBase> cache_;
75 scoped_ptr<CloudPolicyDataStore> data_store_; 87 scoped_ptr<CloudPolicyDataStore> data_store_;
76 MockCloudPolicyDataStoreObserver observer_; 88 MockCloudPolicyDataStoreObserver observer_;
77 PolicyNotifier notifier_; 89 PolicyNotifier notifier_;
78 ScopedTempDir temp_user_data_dir_; 90 ScopedTempDir temp_user_data_dir_;
79 em::DeviceManagementResponse successful_registration_response_; 91 em::DeviceManagementResponse successful_registration_response_;
92 bool ready_callback_was_invoked_;
80 93
81 private: 94 private:
82 content::TestBrowserThread ui_thread_; 95 content::TestBrowserThread ui_thread_;
83 content::TestBrowserThread file_thread_; 96 content::TestBrowserThread file_thread_;
84 }; 97 };
85 98
86 ACTION_P(VerifyRegisterRequest, known_machine_id) { 99 ACTION_P(VerifyRegisterRequest, known_machine_id) {
87 ASSERT_TRUE(arg0); 100 ASSERT_TRUE(arg0);
88 ASSERT_TRUE(arg0->GetRequest()); 101 ASSERT_TRUE(arg0->GetRequest());
89 ASSERT_TRUE(arg0->GetRequest()->has_register_request()); 102 ASSERT_TRUE(arg0->GetRequest()->has_register_request());
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 Mock::VerifyAndClearExpectations(&observer_); 169 Mock::VerifyAndClearExpectations(&observer_);
157 EXPECT_EQ("", data_store_->device_token()); 170 EXPECT_EQ("", data_store_->device_token());
158 EXPECT_TRUE(cache_->is_unmanaged()); 171 EXPECT_TRUE(cache_->is_unmanaged());
159 } 172 }
160 173
161 TEST_F(DeviceTokenFetcherTest, DontSetFetchingDone) { 174 TEST_F(DeviceTokenFetcherTest, DontSetFetchingDone) {
162 CreateNewWaitingCache(); 175 CreateNewWaitingCache();
163 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(), 176 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(),
164 &notifier_); 177 &notifier_);
165 EXPECT_FALSE(cache_->IsReady()); 178 EXPECT_FALSE(cache_->IsReady());
179 EXPECT_FALSE(ready_callback_was_invoked_);
166 } 180 }
167 181
168 TEST_F(DeviceTokenFetcherTest, DontSetFetchingDoneWithoutPolicyFetch) { 182 TEST_F(DeviceTokenFetcherTest, DontSetFetchingDoneWithoutPolicyFetch) {
169 CreateNewWaitingCache(); 183 CreateNewWaitingCache();
170 EXPECT_CALL(service_, 184 EXPECT_CALL(service_,
171 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) 185 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION))
172 .WillOnce(service_.SucceedJob(successful_registration_response_)); 186 .WillOnce(service_.SucceedJob(successful_registration_response_));
173 EXPECT_CALL(observer_, OnDeviceTokenChanged()); 187 EXPECT_CALL(observer_, OnDeviceTokenChanged());
174 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(), 188 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(),
175 &notifier_); 189 &notifier_);
176 FetchToken(&fetcher); 190 FetchToken(&fetcher);
177 loop_.RunAllPending(); 191 loop_.RunAllPending();
178 // On successful token fetching the cache isn't set to ready, since the next 192 // 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 193 // step is to fetch policy. Only failures to fetch the token should make
180 // the cache ready. 194 // the cache ready.
181 EXPECT_FALSE(cache_->IsReady()); 195 EXPECT_FALSE(cache_->IsReady());
196 EXPECT_FALSE(ready_callback_was_invoked_);
182 } 197 }
183 198
184 TEST_F(DeviceTokenFetcherTest, SetFetchingDoneWhenUnmanaged) { 199 TEST_F(DeviceTokenFetcherTest, SetFetchingDoneWhenUnmanaged) {
185 CreateNewWaitingCache(); 200 CreateNewWaitingCache();
186 cache_->SetUnmanaged(); 201 cache_->SetUnmanaged();
187 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(), 202 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(),
188 &notifier_); 203 &notifier_);
189 EXPECT_TRUE(cache_->IsReady()); 204 EXPECT_TRUE(cache_->IsReady());
205 EXPECT_TRUE(ready_callback_was_invoked_);
190 } 206 }
191 207
192 TEST_F(DeviceTokenFetcherTest, SetFetchingDoneOnFailures) { 208 TEST_F(DeviceTokenFetcherTest, SetFetchingDoneOnFailures) {
193 CreateNewWaitingCache(); 209 CreateNewWaitingCache();
194 EXPECT_CALL(service_, 210 EXPECT_CALL(service_,
195 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) 211 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION))
196 .WillOnce(service_.FailJob(DM_STATUS_REQUEST_FAILED)); 212 .WillOnce(service_.FailJob(DM_STATUS_REQUEST_FAILED));
197 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(), 213 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(),
198 &notifier_); 214 &notifier_);
199 FetchToken(&fetcher); 215 FetchToken(&fetcher);
200 loop_.RunAllPending(); 216 loop_.RunAllPending();
201 // This is the opposite case of DontSetFetchingDone1. 217 // This is the opposite case of DontSetFetchingDone1.
202 EXPECT_TRUE(cache_->IsReady()); 218 EXPECT_TRUE(cache_->IsReady());
219 EXPECT_TRUE(ready_callback_was_invoked_);
203 } 220 }
204 221
205 TEST_F(DeviceTokenFetcherTest, SetKnownMachineId) { 222 TEST_F(DeviceTokenFetcherTest, SetKnownMachineId) {
206 EXPECT_CALL(service_, 223 EXPECT_CALL(service_,
207 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) 224 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION))
208 .WillOnce(service_.SucceedJob(successful_registration_response_)); 225 .WillOnce(service_.SucceedJob(successful_registration_response_));
209 EXPECT_CALL(service_, StartJob(_)).WillOnce(VerifyRegisterRequest(true)); 226 EXPECT_CALL(service_, StartJob(_)).WillOnce(VerifyRegisterRequest(true));
210 227
211 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(), 228 DeviceTokenFetcher fetcher(&service_, cache_.get(), data_store_.get(),
212 &notifier_); 229 &notifier_);
213 EXPECT_CALL(observer_, OnDeviceTokenChanged()); 230 EXPECT_CALL(observer_, OnDeviceTokenChanged());
214 EXPECT_EQ("", data_store_->device_token()); 231 EXPECT_EQ("", data_store_->device_token());
215 232
216 data_store_->set_known_machine_id(true); 233 data_store_->set_known_machine_id(true);
217 FetchToken(&fetcher); 234 FetchToken(&fetcher);
218 loop_.RunAllPending(); 235 loop_.RunAllPending();
219 236
220 Mock::VerifyAndClearExpectations(&observer_); 237 Mock::VerifyAndClearExpectations(&observer_);
221 std::string token = data_store_->device_token(); 238 std::string token = data_store_->device_token();
222 EXPECT_NE("", token); 239 EXPECT_NE("", token);
223 } 240 }
224 241
225 } // namespace policy 242 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698