1 // Copyright 2014 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 "components/domain_reliability/uploader.h"
6
7 #include <map>
8
9 #include "base/bind.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/message_loop/message_loop_proxy.h"
12 #include "base/test/test_simple_task_runner.h"
13 #include "components/domain_reliability/test_util.h"
14 #include "net/base/load_flags.h"
15 #include "net/url_request/test_url_fetcher_factory.h"
16 #include "net/url_request/url_fetcher_delegate.h"
17 #include "net/url_request/url_request_context_getter.h"
18 #include "net/url_request/url_request_test_util.h"
19 #include "testing/gtest/include/gtest/gtest.h"
20
21 namespace domain_reliability {
22 namespace {
23
24 class DomainReliabilityUploaderTest : public testing::Test {
25 protected:
DomainReliabilityUploaderTest()26 DomainReliabilityUploaderTest()
27 : network_task_runner_(new base::TestSimpleTaskRunner()),
28 url_request_context_getter_(new net::TestURLRequestContextGetter(
29 network_task_runner_)),
30 uploader_(DomainReliabilityUploader::Create(
31 url_request_context_getter_)) {}
32
MakeUploadCallback(size_t index)33 DomainReliabilityUploader::UploadCallback MakeUploadCallback(size_t index) {
34 return base::Bind(&DomainReliabilityUploaderTest::OnUploadComplete,
35 base::Unretained(this),
36 index);
37 }
38
OnUploadComplete(size_t index,bool success)39 void OnUploadComplete(size_t index, bool success) {
40 EXPECT_FALSE(upload_complete_[index]);
41 upload_complete_[index] = true;
42 upload_successful_[index] = success;
43 }
44
45 scoped_refptr<base::TestSimpleTaskRunner> network_task_runner_;
46 net::TestURLFetcherFactory url_fetcher_factory_;
47 scoped_refptr<net::TestURLRequestContextGetter> url_request_context_getter_;
48 scoped_ptr<DomainReliabilityUploader> uploader_;
49
50 // Whether the upload callback was called for a particular collector index.
51 std::map<size_t, bool> upload_complete_;
52 // Whether the upload to a particular collector was successful.
53 std::map<size_t, bool> upload_successful_;
54 };
55
TEST_F(DomainReliabilityUploaderTest,Create)56 TEST_F(DomainReliabilityUploaderTest, Create) {
57 net::TestURLFetcher* fetcher;
58
59 fetcher = url_fetcher_factory_.GetFetcherByID(0);
60 EXPECT_FALSE(fetcher);
61 }
62
TEST_F(DomainReliabilityUploaderTest,SuccessfulUpload)63 TEST_F(DomainReliabilityUploaderTest, SuccessfulUpload) {
64 net::TestURLFetcher* fetcher;
65
66 std::string report_json = "{}";
67 GURL upload_url = GURL("https://example/upload");
68 uploader_->UploadReport(report_json, upload_url, MakeUploadCallback(0));
69
70 fetcher = url_fetcher_factory_.GetFetcherByID(0);
71 EXPECT_TRUE(fetcher);
72 EXPECT_EQ(report_json, fetcher->upload_data());
73 EXPECT_EQ(upload_url, fetcher->GetOriginalURL());
74 EXPECT_TRUE(fetcher->GetLoadFlags() & net::LOAD_DO_NOT_SAVE_COOKIES);
75 EXPECT_TRUE(fetcher->GetLoadFlags() & net::LOAD_DO_NOT_SEND_COOKIES);
76
77 fetcher->set_url(upload_url);
78 fetcher->set_status(net::URLRequestStatus());
79 fetcher->set_response_code(200);
80 fetcher->SetResponseString("");
81
82 EXPECT_FALSE(upload_complete_[0]);
83 fetcher->delegate()->OnURLFetchComplete(fetcher);
84 EXPECT_TRUE(upload_complete_[0]);
85 EXPECT_TRUE(upload_successful_[0]);
86 }
87
TEST_F(DomainReliabilityUploaderTest,FailedUpload)88 TEST_F(DomainReliabilityUploaderTest, FailedUpload) {
89 net::TestURLFetcher* fetcher;
90
91 std::string report_json = "{}";
92 GURL upload_url = GURL("https://example/upload");
93 uploader_->UploadReport(report_json, upload_url, MakeUploadCallback(0));
94
95 fetcher = url_fetcher_factory_.GetFetcherByID(0);
96 EXPECT_TRUE(fetcher);
97 EXPECT_EQ(report_json, fetcher->upload_data());
98 EXPECT_EQ(upload_url, fetcher->GetOriginalURL());
99
100 fetcher->set_url(upload_url);
101 fetcher->set_status(net::URLRequestStatus());
102 fetcher->set_response_code(500);
103 fetcher->SetResponseString("");
104
105 EXPECT_FALSE(upload_complete_[0]);
106 fetcher->delegate()->OnURLFetchComplete(fetcher);
107 EXPECT_TRUE(upload_complete_[0]);
108 EXPECT_FALSE(upload_successful_[0]);
109 }
110
111 } // namespace
112 } // namespace domain_reliability
113