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