device_management_service_browsertest.cc revision b2df76ea8fec9e32f6f3718986dba0d95315b29c
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" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/message_loop.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/cloud_policy_constants.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/device_management_service.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/test_request_interceptor.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/test/local_policy_test_server.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/upload_bytes_element_reader.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/upload_data_stream.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_fetcher.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_test_job.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::DoAll; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Invoke; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::InvokeWithoutArgs; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::_; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace em = enterprise_management; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Parses the DeviceManagementRequest in |request_data| and writes a serialized 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// DeviceManagementResponse to |response_data|. 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ConstructResponse(const char* request_data, 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint64 request_data_length, 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string* response_data) { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceManagementRequest request; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(request.ParseFromArray(request_data, request_data_length)); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceManagementResponse response; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (request.has_register_request()) { 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response.mutable_register_response()->set_device_management_token( 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "fake_token"); 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else if (request.has_service_api_access_request()) { 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) response.mutable_service_api_access_response()->set_auth_code( 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "fake_auth_code"); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (request.has_unregister_request()) { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response.mutable_unregister_response(); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (request.has_policy_request()) { 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response.mutable_policy_response()->add_response(); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (request.has_auto_enrollment_request()) { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response.mutable_auto_enrollment_response(); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FAIL() << "Failed to parse request."; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(response.SerializeToString(response_data)); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// JobCallback for the interceptor. 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestJob* ResponseJob( 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequest* request, 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::NetworkDelegate* network_delegate) { 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const net::UploadDataStream* upload = request->get_upload(); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (upload != NULL && 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) upload->element_readers().size() == 1 && 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) upload->element_readers()[0]->AsBytesReader()) { 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string response_data; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const net::UploadBytesElementReader* bytes_reader = 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) upload->element_readers()[0]->AsBytesReader(); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConstructResponse(bytes_reader->bytes(), 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bytes_reader->length(), 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &response_data); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new net::URLRequestTestJob( 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) request, 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_delegate, 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequestTestJob::test_headers(), 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response_data, 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DeviceManagementServiceIntegrationTest 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public InProcessBrowserTest, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public testing::WithParamInterface< 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string (DeviceManagementServiceIntegrationTest::*)(void)> { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 92b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) MOCK_METHOD3(OnJobDone, void(DeviceManagementStatus, int, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::DeviceManagementResponse&)); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string InitCannedResponse() { 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_.reset(new TestRequestInterceptor("localhost")); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "http://localhost"; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string InitTestServer() { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartTestServer(); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return test_server_->GetServiceURL().spec(); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RecordAuthCode(DeviceManagementStatus status, 106b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int net_error, 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const em::DeviceManagementResponse& response) { 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) robot_auth_code_ = response.service_api_access_response().auth_code(); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ExpectRequest() { 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (interceptor_) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_->PushJobCallback(base::Bind(&ResponseJob)); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PerformRegistration() { 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectRequest(); 119b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce( 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoAll(Invoke(this, 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &DeviceManagementServiceIntegrationTest::RecordToken), 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeWithoutArgs(MessageLoop::current(), 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &MessageLoop::Quit))); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementRequestJob> job( 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetGaiaToken("gaia_auth_token"); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetOAuthToken("oauth_token"); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetClientID("testid"); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_register_request(); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->Run(); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string service_url((this->*(GetParam()))()); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_.reset(new DeviceManagementService(service_url)); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->ScheduleInitialization(0); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CleanUpOnMainThread() OVERRIDE { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_.reset(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server_.reset(); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interceptor_.reset(); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartTestServer() { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server_.reset( 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new LocalPolicyTestServer("device_management_service_browsertest")); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server_->Start()); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RecordToken(DeviceManagementStatus status, 155b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int net_error, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::DeviceManagementResponse& response) { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) token_ = response.register_response().device_management_token(); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string token_; 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string robot_auth_code_; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementService> service_; 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<LocalPolicyTestServer> test_server_; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TestRequestInterceptor> interceptor_; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, Registration) { 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerformRegistration(); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(token_.empty()); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ApiAuthCodeFetch) { 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PerformRegistration(); 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectRequest(); 177b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .WillOnce( 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DoAll(Invoke(this, 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &DeviceManagementServiceIntegrationTest::RecordAuthCode), 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InvokeWithoutArgs(MessageLoop::current(), 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &MessageLoop::Quit))); 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<DeviceManagementRequestJob> job(service_->CreateJob( 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DeviceManagementRequestJob::TYPE_API_AUTH_CODE_FETCH)); 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) job->SetDMToken(token_); 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) job->SetClientID("testid"); 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) em::DeviceServiceApiAccessRequest* request = 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) job->GetRequest()->mutable_service_api_access_request(); 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) request->add_auth_scope("authScope4Test"); 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) request->set_oauth2_client_id("oauth2ClientId4Test"); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone, 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Unretained(this))); 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MessageLoop::current()->Run(); 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ("fake_auth_code", robot_auth_code_); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, PolicyFetch) { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerformRegistration(); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectRequest(); 201b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(InvokeWithoutArgs(MessageLoop::current(), &MessageLoop::Quit)); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementRequestJob> job( 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH)); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetDMToken(token_); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetUserAffiliation(USER_AFFILIATION_NONE); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetClientID("testid"); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) em::DevicePolicyRequest* request = 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_policy_request(); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request->add_request()->set_policy_type(dm_protocol::kChromeUserPolicyType); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->Run(); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, Unregistration) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerformRegistration(); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectRequest(); 220b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(InvokeWithoutArgs(MessageLoop::current(), &MessageLoop::Quit)); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementRequestJob> job( 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->CreateJob(DeviceManagementRequestJob::TYPE_UNREGISTRATION)); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetDMToken(token_); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetClientID("testid"); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_unregister_request(); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone, 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->Run(); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, AutoEnrollment) { 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectRequest(); 234b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _, _)) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(InvokeWithoutArgs(MessageLoop::current(), &MessageLoop::Quit)); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementRequestJob> job( 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->CreateJob(DeviceManagementRequestJob::TYPE_AUTO_ENROLLMENT)); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetClientID("testid"); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_auto_enrollment_request()->set_remainder(0); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_auto_enrollment_request()->set_modulus(1); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->Run(); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeviceManagementServiceIntegrationTestInstance, 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeviceManagementServiceIntegrationTest, 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Values(&DeviceManagementServiceIntegrationTest::InitCannedResponse, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &DeviceManagementServiceIntegrationTest::InitTestServer)); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace policy 253