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