1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/memory/scoped_ptr.h" 6 #include "base/test/test_simple_task_runner.h" 7 #include "components/policy/core/common/cloud/policy_header_io_helper.h" 8 #include "net/http/http_request_headers.h" 9 #include "net/url_request/url_request.h" 10 #include "net/url_request/url_request_test_util.h" 11 #include "testing/gtest/include/gtest/gtest.h" 12 13 namespace policy { 14 15 namespace { 16 const char kDMServerURL[] = "http://server_url"; 17 const char kPolicyHeaderName[] = "Chrome-Policy-Posture"; 18 const char kInitialPolicyHeader[] = "initial_header"; 19 20 class PolicyHeaderIOHelperTest : public testing::Test { 21 public: 22 PolicyHeaderIOHelperTest() { 23 task_runner_ = make_scoped_refptr(new base::TestSimpleTaskRunner()); 24 } 25 virtual ~PolicyHeaderIOHelperTest() {} 26 27 virtual void SetUp() OVERRIDE { 28 helper_ = make_scoped_ptr(new PolicyHeaderIOHelper(kDMServerURL, 29 kInitialPolicyHeader, 30 task_runner_)); 31 task_runner_->RunUntilIdle(); 32 } 33 virtual void TearDown() OVERRIDE { 34 task_runner_->RunUntilIdle(); 35 helper_.reset(); 36 } 37 38 void ValidateHeader(const net::HttpRequestHeaders& headers, 39 const std::string& expected) { 40 std::string header; 41 EXPECT_TRUE(headers.GetHeader(kPolicyHeaderName, &header)); 42 EXPECT_EQ(header, expected); 43 } 44 45 base::MessageLoop loop_; 46 scoped_ptr<PolicyHeaderIOHelper> helper_; 47 net::TestURLRequestContext context_; 48 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 49 }; 50 51 } // namespace 52 53 TEST_F(PolicyHeaderIOHelperTest, InitialHeader) { 54 scoped_ptr<net::URLRequest> request(context_.CreateRequest( 55 GURL(kDMServerURL), net::DEFAULT_PRIORITY, NULL, NULL)); 56 helper_->AddPolicyHeaders(request->url(), request.get()); 57 ValidateHeader(request->extra_request_headers(), kInitialPolicyHeader); 58 } 59 60 TEST_F(PolicyHeaderIOHelperTest, NoHeaderOnNonMatchingURL) { 61 scoped_ptr<net::URLRequest> request(context_.CreateRequest( 62 GURL("http://non-matching.com"), net::DEFAULT_PRIORITY, NULL, NULL)); 63 helper_->AddPolicyHeaders(request->url(), request.get()); 64 EXPECT_TRUE(request->extra_request_headers().IsEmpty()); 65 } 66 67 TEST_F(PolicyHeaderIOHelperTest, HeaderChange) { 68 std::string new_header = "new_header"; 69 helper_->UpdateHeader(new_header); 70 task_runner_->RunUntilIdle(); 71 scoped_ptr<net::URLRequest> request(context_.CreateRequest( 72 GURL(kDMServerURL), net::DEFAULT_PRIORITY, NULL, NULL)); 73 helper_->AddPolicyHeaders(request->url(), request.get()); 74 ValidateHeader(request->extra_request_headers(), new_header); 75 } 76 77 TEST_F(PolicyHeaderIOHelperTest, ChangeToNoHeader) { 78 helper_->UpdateHeader(""); 79 task_runner_->RunUntilIdle(); 80 scoped_ptr<net::URLRequest> request(context_.CreateRequest( 81 GURL(kDMServerURL), net::DEFAULT_PRIORITY, NULL, NULL)); 82 helper_->AddPolicyHeaders(request->url(), request.get()); 83 EXPECT_TRUE(request->extra_request_headers().IsEmpty()); 84 } 85 86 } // namespace policy 87