device_management_service_browsertest.cc revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind_helpers.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/browser_process.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/cloud_policy_constants.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/device_management_service.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/test_request_interceptor.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/test/local_policy_test_server.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/upload_bytes_element_reader.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/upload_data_stream.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_fetcher.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request.h" 2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_test_job.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)using content::BrowserThread; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::DoAll; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Invoke; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::InvokeWithoutArgs; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::_; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace em = enterprise_management; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Parses the DeviceManagementRequest in |request_data| and writes a serialized 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// DeviceManagementResponse to |response_data|. 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ConstructResponse(const char* request_data, 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint64 request_data_length, 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string* response_data) { 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceManagementRequest request; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(request.ParseFromArray(request_data, request_data_length)); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceManagementResponse response; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (request.has_register_request()) { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response.mutable_register_response()->set_device_management_token( 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "fake_token"); 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else if (request.has_service_api_access_request()) { 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) response.mutable_service_api_access_response()->set_auth_code( 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "fake_auth_code"); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (request.has_unregister_request()) { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response.mutable_unregister_response(); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (request.has_policy_request()) { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response.mutable_policy_response()->add_response(); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (request.has_auto_enrollment_request()) { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response.mutable_auto_enrollment_response(); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FAIL() << "Failed to parse request."; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(response.SerializeToString(response_data)); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// JobCallback for the interceptor. 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestJob* ResponseJob( 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequest* request, 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::NetworkDelegate* network_delegate) { 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const net::UploadDataStream* upload = request->get_upload(); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (upload != NULL && 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) upload->element_readers().size() == 1 && 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) upload->element_readers()[0]->AsBytesReader()) { 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string response_data; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const net::UploadBytesElementReader* bytes_reader = 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) upload->element_readers()[0]->AsBytesReader(); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConstructResponse(bytes_reader->bytes(), 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bytes_reader->length(), 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &response_data); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new net::URLRequestTestJob( 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) request, 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_delegate, 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequestTestJob::test_headers(), 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response_data, 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DeviceManagementServiceIntegrationTest 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public InProcessBrowserTest, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public testing::WithParamInterface< 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string (DeviceManagementServiceIntegrationTest::*)(void)> { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 96b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) MOCK_METHOD3(OnJobDone, void(DeviceManagementStatus, int, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::DeviceManagementResponse&)); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string InitCannedResponse() { 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_.reset(new TestRequestInterceptor("localhost")); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "http://localhost"; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string InitTestServer() { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartTestServer(); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return test_server_->GetServiceURL().spec(); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RecordAuthCode(DeviceManagementStatus status, 110b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int net_error, 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const em::DeviceManagementResponse& response) { 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) robot_auth_code_ = response.service_api_access_response().auth_code(); 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ExpectRequest() { 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (interceptor_) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_->PushJobCallback(base::Bind(&ResponseJob)); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PerformRegistration() { 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectRequest(); 123b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce( 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoAll(Invoke(this, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &DeviceManagementServiceIntegrationTest::RecordToken), 12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) InvokeWithoutArgs(base::MessageLoop::current(), 12890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) &base::MessageLoop::Quit))); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementRequestJob> job( 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetGaiaToken("gaia_auth_token"); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetOAuthToken("oauth_token"); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetClientID("testid"); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_register_request(); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone, 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Run(); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string service_url((this->*(GetParam()))()); 14268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) service_.reset(new DeviceManagementService( 14368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) g_browser_process->system_request_context(), 14468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) service_url)); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->ScheduleInitialization(0); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CleanUpOnMainThread() OVERRIDE { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_.reset(); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server_.reset(); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interceptor_.reset(); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartTestServer() { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server_.reset( 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new LocalPolicyTestServer("device_management_service_browsertest")); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server_->Start()); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RecordToken(DeviceManagementStatus status, 161b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int net_error, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::DeviceManagementResponse& response) { 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) token_ = response.register_response().device_management_token(); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string token_; 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string robot_auth_code_; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementService> service_; 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<LocalPolicyTestServer> test_server_; 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TestRequestInterceptor> interceptor_; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, Registration) { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerformRegistration(); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(token_.empty()); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ApiAuthCodeFetch) { 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PerformRegistration(); 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectRequest(); 183b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .WillOnce( 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DoAll(Invoke(this, 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &DeviceManagementServiceIntegrationTest::RecordAuthCode), 18790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) InvokeWithoutArgs(base::MessageLoop::current(), 18890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) &base::MessageLoop::Quit))); 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<DeviceManagementRequestJob> job(service_->CreateJob( 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DeviceManagementRequestJob::TYPE_API_AUTH_CODE_FETCH)); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) job->SetDMToken(token_); 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) job->SetClientID("testid"); 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) em::DeviceServiceApiAccessRequest* request = 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) job->GetRequest()->mutable_service_api_access_request(); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) request->add_auth_scope("authScope4Test"); 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) request->set_oauth2_client_id("oauth2ClientId4Test"); 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone, 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Unretained(this))); 19990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Run(); 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ("fake_auth_code", robot_auth_code_); 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, PolicyFetch) { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerformRegistration(); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectRequest(); 207b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) 20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .WillOnce(InvokeWithoutArgs(base::MessageLoop::current(), 20990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) &base::MessageLoop::Quit)); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementRequestJob> job( 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH)); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetDMToken(token_); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetUserAffiliation(USER_AFFILIATION_NONE); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetClientID("testid"); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) em::DevicePolicyRequest* request = 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_policy_request(); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request->add_request()->set_policy_type(dm_protocol::kChromeUserPolicyType); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 22090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Run(); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, Unregistration) { 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerformRegistration(); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectRequest(); 227b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) 22890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .WillOnce(InvokeWithoutArgs(base::MessageLoop::current(), 22990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) &base::MessageLoop::Quit)); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementRequestJob> job( 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->CreateJob(DeviceManagementRequestJob::TYPE_UNREGISTRATION)); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetDMToken(token_); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetClientID("testid"); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_unregister_request(); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 23790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Run(); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, AutoEnrollment) { 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectRequest(); 242b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) 24390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .WillOnce(InvokeWithoutArgs(base::MessageLoop::current(), 24490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) &base::MessageLoop::Quit)); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementRequestJob> job( 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->CreateJob(DeviceManagementRequestJob::TYPE_AUTO_ENROLLMENT)); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetClientID("testid"); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_auto_enrollment_request()->set_remainder(0); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_auto_enrollment_request()->set_modulus(1); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 25290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->Run(); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeviceManagementServiceIntegrationTestInstance, 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeviceManagementServiceIntegrationTest, 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Values(&DeviceManagementServiceIntegrationTest::InitCannedResponse, 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &DeviceManagementServiceIntegrationTest::InitTestServer)); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace policy 262