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

Side by Side Diff: chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos_unittest.cc

Issue 59883010: This is the fourth CL of several that will eventually replace TokenService with (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix condition in ProfileSyncService::TryStart() Created 7 years, 1 month 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/chromeos/policy/user_cloud_policy_manager_chromeos.h" 5 #include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 10 matching lines...) Expand all
21 #include "chrome/browser/policy/cloud/mock_cloud_external_data_manager.h" 21 #include "chrome/browser/policy/cloud/mock_cloud_external_data_manager.h"
22 #include "chrome/browser/policy/cloud/mock_cloud_policy_store.h" 22 #include "chrome/browser/policy/cloud/mock_cloud_policy_store.h"
23 #include "chrome/browser/policy/cloud/mock_device_management_service.h" 23 #include "chrome/browser/policy/cloud/mock_device_management_service.h"
24 #include "chrome/browser/policy/cloud/resource_cache.h" 24 #include "chrome/browser/policy/cloud/resource_cache.h"
25 #include "chrome/browser/policy/external_data_fetcher.h" 25 #include "chrome/browser/policy/external_data_fetcher.h"
26 #include "chrome/browser/policy/mock_configuration_policy_provider.h" 26 #include "chrome/browser/policy/mock_configuration_policy_provider.h"
27 #include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h" 27 #include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h"
28 #include "chrome/browser/policy/schema_registry.h" 28 #include "chrome/browser/policy/schema_registry.h"
29 #include "chrome/browser/prefs/browser_prefs.h" 29 #include "chrome/browser/prefs/browser_prefs.h"
30 #include "chrome/browser/prefs/pref_service_syncable.h" 30 #include "chrome/browser/prefs/pref_service_syncable.h"
31 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
31 #include "chrome/browser/signin/profile_oauth2_token_service.h" 32 #include "chrome/browser/signin/profile_oauth2_token_service.h"
32 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 33 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
33 #include "chrome/browser/signin/signin_manager.h"
34 #include "chrome/browser/signin/signin_manager_factory.h"
35 #include "chrome/browser/signin/token_service.h"
36 #include "chrome/browser/signin/token_service_factory.h"
37 #include "chrome/common/chrome_constants.h" 34 #include "chrome/common/chrome_constants.h"
38 #include "chrome/test/base/testing_browser_process.h" 35 #include "chrome/test/base/testing_browser_process.h"
39 #include "chrome/test/base/testing_profile.h" 36 #include "chrome/test/base/testing_profile.h"
40 #include "chrome/test/base/testing_profile_manager.h" 37 #include "chrome/test/base/testing_profile_manager.h"
41 #include "content/public/test/test_browser_thread_bundle.h" 38 #include "content/public/test/test_browser_thread_bundle.h"
42 #include "google_apis/gaia/gaia_auth_consumer.h" 39 #include "google_apis/gaia/gaia_auth_consumer.h"
40 #include "google_apis/gaia/gaia_constants.h"
43 #include "google_apis/gaia/gaia_urls.h" 41 #include "google_apis/gaia/gaia_urls.h"
44 #include "net/url_request/test_url_fetcher_factory.h" 42 #include "net/url_request/test_url_fetcher_factory.h"
45 #include "net/url_request/url_fetcher_delegate.h" 43 #include "net/url_request/url_fetcher_delegate.h"
46 #include "net/url_request/url_request_context_getter.h" 44 #include "net/url_request/url_request_context_getter.h"
47 #include "net/url_request/url_request_status.h" 45 #include "net/url_request/url_request_status.h"
48 #include "policy/policy_constants.h" 46 #include "policy/policy_constants.h"
49 #include "testing/gmock/include/gmock/gmock.h" 47 #include "testing/gmock/include/gmock/gmock.h"
50 #include "testing/gtest/include/gtest/gtest.h" 48 #include "testing/gtest/include/gtest/gtest.h"
51 49
52 namespace em = enterprise_management; 50 namespace em = enterprise_management;
53 51
54 using testing::AnyNumber; 52 using testing::AnyNumber;
55 using testing::AtLeast; 53 using testing::AtLeast;
56 using testing::Mock; 54 using testing::Mock;
57 using testing::_; 55 using testing::_;
58 56
59 namespace policy { 57 namespace policy {
60 58
61 namespace { 59 namespace {
62 60
63 const char kOAuthTokenCookie[] = "oauth_token=1234"; 61 const char kOAuthTokenCookie[] = "oauth_token=1234";
62 const char kTestAccountId[] = "user@gmail.com";
64 63
65 const char kOAuth2TokenPairData[] = 64 const char kOAuth2TokenPairData[] =
66 "{" 65 "{"
67 " \"refresh_token\": \"1234\"," 66 " \"refresh_token\": \"1234\","
68 " \"access_token\": \"5678\"," 67 " \"access_token\": \"5678\","
69 " \"expires_in\": 3600" 68 " \"expires_in\": 3600"
70 "}"; 69 "}";
71 70
72 const char kOAuth2AccessTokenData[] = 71 const char kOAuth2AccessTokenData[] =
73 "{" 72 "{"
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 fetcher->set_response_code(200); 195 fetcher->set_response_code(200);
197 fetcher->set_status(net::URLRequestStatus()); 196 fetcher->set_status(net::URLRequestStatus());
198 return fetcher; 197 return fetcher;
199 } 198 }
200 199
201 // Issues the OAuth2 tokens and returns the device management register job 200 // Issues the OAuth2 tokens and returns the device management register job
202 // if the flow succeeded. 201 // if the flow succeeded.
203 MockDeviceManagementJob* IssueOAuthToken(bool has_request_token) { 202 MockDeviceManagementJob* IssueOAuthToken(bool has_request_token) {
204 EXPECT_FALSE(manager_->core()->client()->is_registered()); 203 EXPECT_FALSE(manager_->core()->client()->is_registered());
205 204
206 GaiaUrls* gaia_urls = GaiaUrls::GetInstance(); 205 // Issuing this token triggers the callback of the OAuth2PolicyFetcher,
207 net::TestURLFetcher* fetcher = NULL; 206 // which triggers the registration request.
207 MockDeviceManagementJob* register_request = NULL;
208 EXPECT_CALL(device_management_service_,
209 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION))
210 .WillOnce(device_management_service_.CreateAsyncJob(&register_request));
208 211
209 if (!has_request_token) { 212 if (!has_request_token) {
213 GaiaUrls* gaia_urls = GaiaUrls::GetInstance();
214 net::TestURLFetcher* fetcher = NULL;
215
210 // Issue the oauth_token cookie first. 216 // Issue the oauth_token cookie first.
211 fetcher = PrepareOAuthFetcher(gaia_urls->client_login_to_oauth2_url()); 217 fetcher = PrepareOAuthFetcher(gaia_urls->client_login_to_oauth2_url());
212 if (!fetcher) 218 if (!fetcher)
213 return NULL; 219 return NULL;
214 net::ResponseCookies cookies; 220 net::ResponseCookies cookies;
215 cookies.push_back(kOAuthTokenCookie); 221 cookies.push_back(kOAuthTokenCookie);
216 fetcher->set_cookies(cookies); 222 fetcher->set_cookies(cookies);
217 fetcher->delegate()->OnURLFetchComplete(fetcher); 223 fetcher->delegate()->OnURLFetchComplete(fetcher);
218 224
219 // Issue the refresh token. 225 // Issue the refresh token.
220 fetcher = PrepareOAuthFetcher(gaia_urls->oauth2_token_url()); 226 fetcher = PrepareOAuthFetcher(gaia_urls->oauth2_token_url());
221 if (!fetcher) 227 if (!fetcher)
222 return NULL; 228 return NULL;
223 fetcher->SetResponseString(kOAuth2TokenPairData); 229 fetcher->SetResponseString(kOAuth2TokenPairData);
224 fetcher->delegate()->OnURLFetchComplete(fetcher); 230 fetcher->delegate()->OnURLFetchComplete(fetcher);
231
232 // Issue the access token.
233 fetcher = PrepareOAuthFetcher(gaia_urls->oauth2_token_url());
234 if (!fetcher)
235 return NULL;
236 fetcher->SetResponseString(kOAuth2AccessTokenData);
237 fetcher->delegate()->OnURLFetchComplete(fetcher);
238 } else {
239 // Since the refresh token is available, OAuth2TokenService was used
240 // to request the access token and not UserCloudPolicyTokenForwarder.
241 // Issue the access token with the former.
242 FakeProfileOAuth2TokenService* token_service =
243 static_cast<FakeProfileOAuth2TokenService*>(
244 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_));
245 EXPECT_TRUE(token_service);
246 OAuth2TokenService::ScopeSet scopes;
247 scopes.insert(GaiaConstants::kDeviceManagementServiceOAuth);
248 token_service->IssueTokenForScope(
249 scopes, "5678",
250 base::Time::Now() + base::TimeDelta::FromSeconds(3600));
225 } 251 }
226 252
227 // Issue the access token.
228 fetcher = PrepareOAuthFetcher(gaia_urls->oauth2_token_url());
229 if (!fetcher)
230 return NULL;
231 fetcher->SetResponseString(kOAuth2AccessTokenData);
232
233 // Issuing this token triggers the callback of the OAuth2PolicyFetcher,
234 // which triggers the registration request.
235 MockDeviceManagementJob* register_request = NULL;
236 EXPECT_CALL(device_management_service_,
237 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION))
238 .WillOnce(device_management_service_.CreateAsyncJob(&register_request));
239 fetcher->delegate()->OnURLFetchComplete(fetcher);
240 EXPECT_TRUE(register_request); 253 EXPECT_TRUE(register_request);
241 EXPECT_FALSE(manager_->core()->client()->is_registered()); 254 EXPECT_FALSE(manager_->core()->client()->is_registered());
242 255
243 Mock::VerifyAndClearExpectations(&device_management_service_); 256 Mock::VerifyAndClearExpectations(&device_management_service_);
244 EXPECT_CALL(device_management_service_, StartJob(_, _, _, _, _, _, _)) 257 EXPECT_CALL(device_management_service_, StartJob(_, _, _, _, _, _, _))
245 .Times(AnyNumber()); 258 .Times(AnyNumber());
246 259
247 return register_request; 260 return register_request;
248 } 261 }
249 262
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 store_->NotifyStoreLoaded(); 516 store_->NotifyStoreLoaded();
504 Mock::VerifyAndClearExpectations(&observer_); 517 Mock::VerifyAndClearExpectations(&observer_);
505 EXPECT_TRUE(manager_->core()->service()->IsInitializationComplete()); 518 EXPECT_TRUE(manager_->core()->service()->IsInitializationComplete());
506 EXPECT_TRUE(manager_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); 519 EXPECT_TRUE(manager_->IsInitializationComplete(POLICY_DOMAIN_CHROME));
507 EXPECT_FALSE(manager_->core()->client()->is_registered()); 520 EXPECT_FALSE(manager_->core()->client()->is_registered());
508 521
509 // The manager is waiting for the refresh token, and hasn't started any 522 // The manager is waiting for the refresh token, and hasn't started any
510 // fetchers. 523 // fetchers.
511 EXPECT_FALSE(test_url_fetcher_factory_.GetFetcherByID(0)); 524 EXPECT_FALSE(test_url_fetcher_factory_.GetFetcherByID(0));
512 525
513 // Set a fake user in signin manager. This can be removed once TokenService 526 // Set a fake refresh token at the OAuth2TokenService.
514 // is removed. 527 FakeProfileOAuth2TokenService* token_service =
515 SigninManagerBase* signin_manager = 528 static_cast<FakeProfileOAuth2TokenService*>(
516 SigninManagerFactory::GetForProfile(profile_); 529 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_));
517 ASSERT_TRUE(signin_manager);
518 signin_manager->SetAuthenticatedUsername("user@gmail.com");
519
520 // Set a fake refresh token at the TokenService.
521 TokenService* token_service = TokenServiceFactory::GetForProfile(profile_);
522 ASSERT_TRUE(token_service); 530 ASSERT_TRUE(token_service);
523 GaiaAuthConsumer::ClientOAuthResult tokens("refresh", "access", 3600); 531 EXPECT_FALSE(token_service->RefreshTokenIsAvailable(kTestAccountId));
524 EXPECT_FALSE(token_service->HasOAuthLoginToken()); 532 token_service->IssueRefreshToken(kTestAccountId);
525 token_service->UpdateCredentialsWithOAuth2(tokens); 533 EXPECT_TRUE(token_service->RefreshTokenIsAvailable(kTestAccountId));
526 EXPECT_TRUE(token_service->HasOAuthLoginToken());
527 534
528 // That should have notified the manager, which now issues the request for the 535 // That should have notified the manager, which now issues the request for the
529 // policy oauth token. 536 // policy oauth token.
530 MockDeviceManagementJob* register_request = IssueOAuthToken(true); 537 MockDeviceManagementJob* register_request = IssueOAuthToken(true);
531 ASSERT_TRUE(register_request); 538 ASSERT_TRUE(register_request);
532 register_request->SendResponse(DM_STATUS_SUCCESS, register_blob_); 539 register_request->SendResponse(DM_STATUS_SUCCESS, register_blob_);
533 540
534 // The refresh scheduler takes care of the initial fetch for unmanaged users. 541 // The refresh scheduler takes care of the initial fetch for unmanaged users.
535 // Running the task runner issues the initial fetch. 542 // Running the task runner issues the initial fetch.
536 FetchPolicy( 543 FetchPolicy(
(...skipping 17 matching lines...) Expand all
554 EXPECT_TRUE(manager_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); 561 EXPECT_TRUE(manager_->IsInitializationComplete(POLICY_DOMAIN_CHROME));
555 EXPECT_TRUE(manager_->core()->client()->is_registered()); 562 EXPECT_TRUE(manager_->core()->client()->is_registered());
556 563
557 // The refresh scheduler takes care of the initial fetch for unmanaged users. 564 // The refresh scheduler takes care of the initial fetch for unmanaged users.
558 // Running the task runner issues the initial fetch. 565 // Running the task runner issues the initial fetch.
559 FetchPolicy( 566 FetchPolicy(
560 base::Bind(&base::TestSimpleTaskRunner::RunUntilIdle, task_runner_)); 567 base::Bind(&base::TestSimpleTaskRunner::RunUntilIdle, task_runner_));
561 } 568 }
562 569
563 } // namespace policy 570 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698