blob: 362b202b50653220eac6bd6bc1fb043b906dee01 [file] [log] [blame]
[email protected]bda8e362014-03-24 18:21:031// 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"
[email protected]b5c2b742014-06-14 22:21:4212#include "base/test/test_simple_task_runner.h"
[email protected]bda8e362014-03-24 18:21:0313#include "components/domain_reliability/test_util.h"
[email protected]d7599122014-05-24 03:37:2314#include "net/base/load_flags.h"
[email protected]bda8e362014-03-24 18:21:0315#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
21namespace domain_reliability {
[email protected]563dc4762014-05-11 00:43:4922namespace {
[email protected]bda8e362014-03-24 18:21:0323
24class DomainReliabilityUploaderTest : public testing::Test {
25 protected:
26 DomainReliabilityUploaderTest()
[email protected]b5c2b742014-06-14 22:21:4227 : network_task_runner_(new base::TestSimpleTaskRunner()),
[email protected]bda8e362014-03-24 18:21:0328 url_request_context_getter_(new net::TestURLRequestContextGetter(
[email protected]b5c2b742014-06-14 22:21:4229 network_task_runner_)),
[email protected]bda8e362014-03-24 18:21:0330 uploader_(DomainReliabilityUploader::Create(
31 url_request_context_getter_)) {}
32
[email protected]84d2a492014-05-09 22:18:5033 DomainReliabilityUploader::UploadCallback MakeUploadCallback(size_t index) {
[email protected]bda8e362014-03-24 18:21:0334 return base::Bind(&DomainReliabilityUploaderTest::OnUploadComplete,
35 base::Unretained(this),
36 index);
37 }
38
[email protected]84d2a492014-05-09 22:18:5039 void OnUploadComplete(size_t index, bool success) {
[email protected]bda8e362014-03-24 18:21:0340 EXPECT_FALSE(upload_complete_[index]);
41 upload_complete_[index] = true;
42 upload_successful_[index] = success;
43 }
44
[email protected]b5c2b742014-06-14 22:21:4245 scoped_refptr<base::TestSimpleTaskRunner> network_task_runner_;
[email protected]bda8e362014-03-24 18:21:0346 net::TestURLFetcherFactory url_fetcher_factory_;
47 scoped_refptr<net::TestURLRequestContextGetter> url_request_context_getter_;
48 scoped_ptr<DomainReliabilityUploader> uploader_;
49
[email protected]84d2a492014-05-09 22:18:5050 // 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_;
[email protected]bda8e362014-03-24 18:21:0354};
55
56TEST_F(DomainReliabilityUploaderTest, Create) {
57 net::TestURLFetcher* fetcher;
58
59 fetcher = url_fetcher_factory_.GetFetcherByID(0);
60 EXPECT_FALSE(fetcher);
61}
62
63TEST_F(DomainReliabilityUploaderTest, SuccessfulUpload) {
64 net::TestURLFetcher* fetcher;
65
66 std::string report_json = "{}";
[email protected]7dbbf452014-05-16 18:31:5167 GURL upload_url = GURL("https://example/upload");
[email protected]bda8e362014-03-24 18:21:0368 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());
[email protected]7dbbf452014-05-16 18:31:5174 EXPECT_TRUE(fetcher->GetLoadFlags() & net::LOAD_DO_NOT_SAVE_COOKIES);
75 EXPECT_TRUE(fetcher->GetLoadFlags() & net::LOAD_DO_NOT_SEND_COOKIES);
[email protected]bda8e362014-03-24 18:21:0376
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
88TEST_F(DomainReliabilityUploaderTest, FailedUpload) {
89 net::TestURLFetcher* fetcher;
90
91 std::string report_json = "{}";
[email protected]7dbbf452014-05-16 18:31:5192 GURL upload_url = GURL("https://example/upload");
[email protected]bda8e362014-03-24 18:21:0393 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
[email protected]563dc4762014-05-11 00:43:49111} // namespace
[email protected]bda8e362014-03-24 18:21:03112} // namespace domain_reliability