| OLD | NEW |
| 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 "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
| 6 #include "base/message_loop.h" | 6 #include "base/message_loop.h" |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "chrome/browser/policy/cloud_policy_constants.h" | 8 #include "chrome/browser/policy/cloud_policy_constants.h" |
| 9 #include "chrome/browser/policy/device_management_service.h" | 9 #include "chrome/browser/policy/device_management_service.h" |
| 10 #include "chrome/test/base/in_process_browser_test.h" | 10 #include "chrome/test/base/in_process_browser_test.h" |
| 11 #include "content/public/browser/browser_thread.h" |
| 11 #include "net/base/upload_data.h" | 12 #include "net/base/upload_data.h" |
| 12 #include "net/test/test_server.h" | 13 #include "net/test/test_server.h" |
| 13 #include "net/url_request/url_fetcher.h" | 14 #include "net/url_request/url_fetcher.h" |
| 14 #include "net/url_request/url_request.h" | 15 #include "net/url_request/url_request.h" |
| 16 #include "net/url_request/url_request_filter.h" |
| 17 #include "net/url_request/url_request_job_factory.h" |
| 15 #include "net/url_request/url_request_test_job.h" | 18 #include "net/url_request/url_request_test_job.h" |
| 16 #include "testing/gmock/include/gmock/gmock.h" | 19 #include "testing/gmock/include/gmock/gmock.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 21 |
| 22 using content::BrowserThread; |
| 19 using testing::DoAll; | 23 using testing::DoAll; |
| 20 using testing::Invoke; | 24 using testing::Invoke; |
| 21 using testing::InvokeWithoutArgs; | 25 using testing::InvokeWithoutArgs; |
| 22 using testing::_; | 26 using testing::_; |
| 23 | 27 |
| 24 namespace em = enterprise_management; | 28 namespace em = enterprise_management; |
| 25 | 29 |
| 26 namespace policy { | 30 namespace policy { |
| 27 | 31 |
| 28 // Dummy service URL for testing with request interception enabled. | 32 // Dummy service URL for testing with request interception enabled. |
| 29 const char kServiceUrl[] = "http://example.com/device_management"; | 33 const char kServiceUrl[] = "http://example.com/device_management"; |
| 30 | 34 |
| 31 // Interceptor implementation that returns test data back to the service. | 35 // Interceptor implementation that returns test data back to the service. |
| 32 class CannedResponseInterceptor : public net::URLRequest::Interceptor { | 36 class CannedResponseInterceptor |
| 37 : public net::URLRequestJobFactory::ProtocolHandler { |
| 33 public: | 38 public: |
| 34 explicit CannedResponseInterceptor(const GURL& service_url) | 39 explicit CannedResponseInterceptor(const GURL& service_url) |
| 35 : service_url_(service_url) { | 40 : service_url_(service_url) { |
| 36 net::URLRequest::Deprecated::RegisterRequestInterceptor(this); | 41 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| 42 base::Bind(&CannedResponseInterceptor::Register, |
| 43 base::Unretained(this))); |
| 37 } | 44 } |
| 38 | 45 |
| 39 virtual ~CannedResponseInterceptor() { | 46 virtual ~CannedResponseInterceptor() { |
| 40 net::URLRequest::Deprecated::UnregisterRequestInterceptor(this); | 47 BrowserThread::PostTask(BrowserThread::IO, |
| 48 FROM_HERE, |
| 49 base::Bind(Unregister)); |
| 41 } | 50 } |
| 42 | 51 |
| 43 // net::URLRequest::Interceptor overrides. | 52 // net::URLRequestJobFactory::ProtocolHandler overrides. |
| 44 virtual net::URLRequestJob* MaybeIntercept( | 53 virtual net::URLRequestJob* MaybeCreateJob( |
| 45 net::URLRequest* request, | 54 net::URLRequest* request, |
| 46 net::NetworkDelegate* network_delegate) OVERRIDE { | 55 net::NetworkDelegate* network_delegate) const OVERRIDE { |
| 47 em::DeviceManagementRequest dm_request; | 56 em::DeviceManagementRequest dm_request; |
| 48 net::UploadData* upload = request->get_upload_mutable(); | 57 net::UploadData* upload = request->get_upload_mutable(); |
| 49 if (request->url().GetOrigin() == service_url_.GetOrigin() && | 58 if (request->url().GetOrigin() == service_url_.GetOrigin() && |
| 50 request->url().path() == service_url_.path() && | 59 request->url().path() == service_url_.path() && |
| 51 upload != NULL && | 60 upload != NULL && |
| 52 upload->elements().size() == 1) { | 61 upload->elements().size() == 1) { |
| 53 std::string response_data; | 62 std::string response_data; |
| 54 ConstructResponse(upload->elements()[0]->bytes(), | 63 ConstructResponse(upload->elements()[0]->bytes(), |
| 55 upload->elements()[0]->bytes_length(), | 64 upload->elements()[0]->bytes_length(), |
| 56 &response_data); | 65 &response_data); |
| 57 return new net::URLRequestTestJob(request, | 66 return new net::URLRequestTestJob(request, |
| 58 network_delegate, | 67 network_delegate, |
| 59 net::URLRequestTestJob::test_headers(), | 68 net::URLRequestTestJob::test_headers(), |
| 60 response_data, | 69 response_data, |
| 61 true); | 70 true); |
| 62 } | 71 } |
| 63 | 72 |
| 64 return NULL; | 73 return NULL; |
| 65 } | 74 } |
| 66 | 75 |
| 67 private: | 76 private: |
| 77 void Register() { |
| 78 net::URLRequestFilter::GetInstance()->AddHostnameProtocolHandler( |
| 79 "http", "example.com", this); |
| 80 } |
| 81 static void Unregister() { |
| 82 net::URLRequestFilter::GetInstance()->RemoveHostnameHandler( |
| 83 "http", "example.com"); |
| 84 } |
| 68 void ConstructResponse(const char* request_data, | 85 void ConstructResponse(const char* request_data, |
| 69 uint64 request_data_length, | 86 uint64 request_data_length, |
| 70 std::string* response_data) { | 87 std::string* response_data) const { |
| 71 em::DeviceManagementRequest request; | 88 em::DeviceManagementRequest request; |
| 72 ASSERT_TRUE(request.ParseFromArray(request_data, request_data_length)); | 89 ASSERT_TRUE(request.ParseFromArray(request_data, request_data_length)); |
| 73 em::DeviceManagementResponse response; | 90 em::DeviceManagementResponse response; |
| 74 if (request.has_register_request()) { | 91 if (request.has_register_request()) { |
| 75 response.mutable_register_response()->set_device_management_token( | 92 response.mutable_register_response()->set_device_management_token( |
| 76 "fake_token"); | 93 "fake_token"); |
| 77 } else if (request.has_unregister_request()) { | 94 } else if (request.has_unregister_request()) { |
| 78 response.mutable_unregister_response(); | 95 response.mutable_unregister_response(); |
| 79 } else if (request.has_policy_request()) { | 96 } else if (request.has_policy_request()) { |
| 80 response.mutable_policy_response()->add_response(); | 97 response.mutable_policy_response()->add_response(); |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 MessageLoop::current()->Run(); | 227 MessageLoop::current()->Run(); |
| 211 } | 228 } |
| 212 | 229 |
| 213 INSTANTIATE_TEST_CASE_P( | 230 INSTANTIATE_TEST_CASE_P( |
| 214 DeviceManagementServiceIntegrationTestInstance, | 231 DeviceManagementServiceIntegrationTestInstance, |
| 215 DeviceManagementServiceIntegrationTest, | 232 DeviceManagementServiceIntegrationTest, |
| 216 testing::Values(&DeviceManagementServiceIntegrationTest::InitCannedResponse, | 233 testing::Values(&DeviceManagementServiceIntegrationTest::InitCannedResponse, |
| 217 &DeviceManagementServiceIntegrationTest::InitTestServer)); | 234 &DeviceManagementServiceIntegrationTest::InitTestServer)); |
| 218 | 235 |
| 219 } // namespace policy | 236 } // namespace policy |
| OLD | NEW |