monitor_unittest.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
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/monitor.h" 6 7#include <map> 8#include <string> 9#include <vector> 10 11#include "base/bind.h" 12#include "base/memory/scoped_ptr.h" 13#include "base/message_loop/message_loop_proxy.h" 14#include "components/domain_reliability/beacon.h" 15#include "components/domain_reliability/config.h" 16#include "components/domain_reliability/test_util.h" 17#include "content/public/test/test_browser_thread_bundle.h" 18#include "net/url_request/url_request_context_getter.h" 19#include "net/url_request/url_request_status.h" 20#include "net/url_request/url_request_test_util.h" 21#include "testing/gtest/include/gtest/gtest.h" 22 23namespace domain_reliability { 24 25typedef std::vector<DomainReliabilityBeacon> BeaconVector; 26 27class DomainReliabilityMonitorTest : public testing::Test { 28 protected: 29 typedef DomainReliabilityMonitor::RequestInfo RequestInfo; 30 31 DomainReliabilityMonitorTest() 32 : bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), 33 url_request_context_getter_(new net::TestURLRequestContextGetter( 34 base::MessageLoopProxy::current())), 35 time_(new MockTime()), 36 monitor_(url_request_context_getter_->GetURLRequestContext(), 37 scoped_ptr<MockableTime>(time_)), 38 context_(monitor_.AddContextForTesting(CreateConfig())) {} 39 40 static scoped_ptr<const DomainReliabilityConfig> CreateConfig() { 41 DomainReliabilityConfig* config = new DomainReliabilityConfig(); 42 DomainReliabilityConfig::Resource* resource; 43 44 resource = new DomainReliabilityConfig::Resource(); 45 resource->name = "always_report"; 46 resource->url_patterns.push_back( 47 new std::string("http://example/always_report")); 48 resource->success_sample_rate = 1.0; 49 resource->failure_sample_rate = 1.0; 50 config->resources.push_back(resource); 51 52 resource = new DomainReliabilityConfig::Resource(); 53 resource->name = "never_report"; 54 resource->url_patterns.push_back( 55 new std::string("http://example/never_report")); 56 resource->success_sample_rate = 0.0; 57 resource->failure_sample_rate = 0.0; 58 config->resources.push_back(resource); 59 60 DomainReliabilityConfig::Collector* collector; 61 collector = new DomainReliabilityConfig::Collector(); 62 collector->upload_url = GURL("https://example/upload"); 63 config->domain = "example"; 64 config->collectors.push_back(collector); 65 66 return scoped_ptr<const DomainReliabilityConfig>(config); 67 } 68 69 RequestInfo MakeRequestInfo() { 70 RequestInfo request; 71 request.status = net::URLRequestStatus(); 72 request.response_code = 200; 73 request.was_cached = false; 74 return request; 75 } 76 77 bool CheckNoBeacons(int index) { 78 BeaconVector beacons; 79 int successful, failed; 80 context_->GetQueuedDataForTesting(index, &beacons, &successful, &failed); 81 return beacons.empty() && successful == 0 && failed == 0; 82 } 83 84 void OnRequestLegComplete(const RequestInfo& info) { 85 monitor_.OnRequestLegComplete(info); 86 } 87 88 content::TestBrowserThreadBundle bundle_; 89 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; 90 MockTime* time_; 91 DomainReliabilityMonitor monitor_; 92 DomainReliabilityContext* context_; 93 DomainReliabilityMonitor::RequestInfo request_; 94}; 95 96TEST_F(DomainReliabilityMonitorTest, Create) { 97 EXPECT_TRUE(CheckNoBeacons(0)); 98 EXPECT_TRUE(CheckNoBeacons(1)); 99} 100 101TEST_F(DomainReliabilityMonitorTest, NoContextRequest) { 102 RequestInfo request = MakeRequestInfo(); 103 request.url = GURL("http://no-context/"); 104 OnRequestLegComplete(request); 105 106 EXPECT_TRUE(CheckNoBeacons(0)); 107 EXPECT_TRUE(CheckNoBeacons(1)); 108} 109 110TEST_F(DomainReliabilityMonitorTest, ContextRequest) { 111 RequestInfo request = MakeRequestInfo(); 112 request.url = GURL("http://example/always_report"); 113 OnRequestLegComplete(request); 114 115 BeaconVector beacons; 116 context_->GetQueuedDataForTesting(0, &beacons, NULL, NULL); 117 EXPECT_EQ(1u, beacons.size()); 118 EXPECT_TRUE(CheckNoBeacons(1)); 119} 120 121} // namespace domain_reliability 122