Index: components/domain_reliability/monitor_unittest.cc |
diff --git a/components/domain_reliability/monitor_unittest.cc b/components/domain_reliability/monitor_unittest.cc |
index ffa284982631979bab17e928db2522526d6d1351..984a71a77747eed472665731f47618a2ef0edf25 100644 |
--- a/components/domain_reliability/monitor_unittest.cc |
+++ b/components/domain_reliability/monitor_unittest.cc |
@@ -14,6 +14,7 @@ |
#include "components/domain_reliability/baked_in_configs.h" |
#include "components/domain_reliability/beacon.h" |
#include "components/domain_reliability/config.h" |
+#include "components/domain_reliability/google_configs.h" |
#include "components/domain_reliability/test_util.h" |
#include "net/base/host_port_pair.h" |
#include "net/base/load_flags.h" |
@@ -28,10 +29,7 @@ namespace domain_reliability { |
namespace { |
-typedef std::vector<DomainReliabilityBeacon> BeaconVector; |
- |
-static const size_t kAlwaysReportIndex = 0u; |
-static const size_t kNeverReportIndex = 1u; |
+typedef std::vector<const DomainReliabilityBeacon*> BeaconVector; |
scoped_refptr<net::HttpResponseHeaders> MakeHttpResponseHeaders( |
const std::string& headers) { |
@@ -40,6 +38,12 @@ scoped_refptr<net::HttpResponseHeaders> MakeHttpResponseHeaders( |
headers.c_str(), headers.length()))); |
} |
+size_t CountQueuedBeacons(DomainReliabilityContext* context) { |
+ BeaconVector beacons; |
+ context->GetQueuedBeaconsForTesting(&beacons); |
+ return beacons.size(); |
+} |
+ |
} // namespace |
class DomainReliabilityMonitorTest : public testing::Test { |
@@ -55,12 +59,10 @@ class DomainReliabilityMonitorTest : public testing::Test { |
monitor_("test-reporter", |
pref_task_runner_, |
network_task_runner_, |
- scoped_ptr<MockableTime>(time_)), |
- context_(nullptr) { |
+ scoped_ptr<MockableTime>(time_)) { |
monitor_.MoveToNetworkThread(); |
monitor_.InitURLRequestContext(url_request_context_getter_); |
monitor_.SetDiscardUploads(false); |
- context_ = monitor_.AddContextForTesting(MakeTestConfig()); |
} |
static RequestInfo MakeRequestInfo() { |
@@ -82,34 +84,16 @@ class DomainReliabilityMonitorTest : public testing::Test { |
monitor_.OnRequestLegComplete(info); |
} |
- size_t CountPendingBeacons() { |
- BeaconVector beacons; |
- context_->GetQueuedBeaconsForTesting(&beacons); |
- return beacons.size(); |
+ DomainReliabilityContext* CreateAndAddContext() { |
+ return monitor_.AddContextForTesting(MakeTestConfig()); |
} |
- bool CheckRequestCounts(size_t index, |
- uint32 expected_successful, |
- uint32 expected_failed) { |
- return CheckRequestCounts(context_, |
- index, |
- expected_successful, |
- expected_failed); |
- } |
- |
- bool CheckRequestCounts(DomainReliabilityContext* context, |
- size_t index, |
- uint32 expected_successful, |
- uint32 expected_failed) { |
- uint32 successful, failed; |
- context->GetRequestCountsForTesting(index, &successful, &failed); |
- EXPECT_EQ(expected_successful, successful); |
- EXPECT_EQ(expected_failed, failed); |
- return expected_successful == successful && expected_failed == failed; |
- } |
- |
- DomainReliabilityContext* CreateAndAddContext(const std::string& domain) { |
- return monitor_.AddContextForTesting(MakeTestConfigWithDomain(domain)); |
+ DomainReliabilityContext* CreateAndAddContextForOrigin(const GURL& origin, |
+ bool wildcard) { |
+ scoped_ptr<DomainReliabilityConfig> config( |
+ MakeTestConfigWithOrigin(origin)); |
+ config->include_subdomains = wildcard; |
+ return monitor_.AddContextForTesting(config.Pass()); |
} |
scoped_refptr<base::TestSimpleTaskRunner> pref_task_runner_; |
@@ -117,169 +101,151 @@ class DomainReliabilityMonitorTest : public testing::Test { |
scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; |
MockTime* time_; |
DomainReliabilityMonitor monitor_; |
- DomainReliabilityContext* context_; |
DomainReliabilityMonitor::RequestInfo request_; |
}; |
namespace { |
TEST_F(DomainReliabilityMonitorTest, Create) { |
- EXPECT_EQ(0u, CountPendingBeacons()); |
- EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u)); |
- EXPECT_TRUE(CheckRequestCounts(kNeverReportIndex, 0u, 0u)); |
} |
TEST_F(DomainReliabilityMonitorTest, NoContext) { |
- RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://no-context/"); |
- OnRequestLegComplete(request); |
- |
- EXPECT_EQ(0u, CountPendingBeacons()); |
- EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u)); |
- EXPECT_TRUE(CheckRequestCounts(kNeverReportIndex, 0u, 0u)); |
-} |
+ DomainReliabilityContext* context = CreateAndAddContext(); |
-TEST_F(DomainReliabilityMonitorTest, NotReported) { |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://example/never_report"); |
+ request.url = GURL("http://no-context/"); |
OnRequestLegComplete(request); |
- EXPECT_EQ(0u, CountPendingBeacons()); |
- EXPECT_TRUE(CheckRequestCounts(kNeverReportIndex, 1u, 0u)); |
+ EXPECT_EQ(0u, CountQueuedBeacons(context)); |
} |
TEST_F(DomainReliabilityMonitorTest, NetworkFailure) { |
+ DomainReliabilityContext* context = CreateAndAddContext(); |
+ |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://example/always_report"); |
+ request.url = GURL("http://example/"); |
request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET); |
request.response_info.headers = nullptr; |
OnRequestLegComplete(request); |
- EXPECT_EQ(1u, CountPendingBeacons()); |
- EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 1u)); |
+ EXPECT_EQ(1u, CountQueuedBeacons(context)); |
} |
TEST_F(DomainReliabilityMonitorTest, ServerFailure) { |
+ DomainReliabilityContext* context = CreateAndAddContext(); |
+ |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://example/always_report"); |
+ request.url = GURL("http://example/"); |
request.response_info.headers = |
MakeHttpResponseHeaders("HTTP/1.1 500 :(\n\n"); |
OnRequestLegComplete(request); |
- EXPECT_EQ(1u, CountPendingBeacons()); |
- EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 1u)); |
-} |
- |
-TEST_F(DomainReliabilityMonitorTest, NotReportedFailure) { |
- RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://example/never_report"); |
- request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET); |
- OnRequestLegComplete(request); |
- |
- EXPECT_EQ(0u, CountPendingBeacons()); |
- EXPECT_TRUE(CheckRequestCounts(kNeverReportIndex, 0u, 1u)); |
-} |
- |
-TEST_F(DomainReliabilityMonitorTest, Request) { |
- RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://example/always_report"); |
- OnRequestLegComplete(request); |
- |
- EXPECT_EQ(1u, CountPendingBeacons()); |
- EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 1u, 0u)); |
+ EXPECT_EQ(1u, CountQueuedBeacons(context)); |
} |
// Make sure the monitor does not log requests that did not access the network. |
TEST_F(DomainReliabilityMonitorTest, DidNotAccessNetwork) { |
+ DomainReliabilityContext* context = CreateAndAddContext(); |
+ |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://example/always_report"); |
+ request.url = GURL("http://example/"); |
request.response_info.network_accessed = false; |
OnRequestLegComplete(request); |
- EXPECT_EQ(0u, CountPendingBeacons()); |
- EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u)); |
+ EXPECT_EQ(0u, CountQueuedBeacons(context)); |
} |
// Make sure the monitor does not log requests that don't send cookies. |
TEST_F(DomainReliabilityMonitorTest, DoNotSendCookies) { |
+ DomainReliabilityContext* context = CreateAndAddContext(); |
+ |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://example/always_report"); |
+ request.url = GURL("http://example/"); |
request.load_flags = net::LOAD_DO_NOT_SEND_COOKIES; |
OnRequestLegComplete(request); |
- EXPECT_EQ(0u, CountPendingBeacons()); |
- EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u)); |
+ EXPECT_EQ(0u, CountQueuedBeacons(context)); |
} |
// Make sure the monitor does not log upload requests. |
TEST_F(DomainReliabilityMonitorTest, IsUpload) { |
+ DomainReliabilityContext* context = CreateAndAddContext(); |
+ |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://example/always_report"); |
+ request.url = GURL("http://example/"); |
request.is_upload = true; |
OnRequestLegComplete(request); |
- EXPECT_EQ(0u, CountPendingBeacons()); |
- EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u)); |
+ EXPECT_EQ(0u, CountQueuedBeacons(context)); |
} |
// Make sure the monitor does not log a network-local error. |
TEST_F(DomainReliabilityMonitorTest, LocalError) { |
+ DomainReliabilityContext* context = CreateAndAddContext(); |
+ |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://example/always_report"); |
+ request.url = GURL("http://example/"); |
request.status = |
net::URLRequestStatus::FromError(net::ERR_PROXY_CONNECTION_FAILED); |
OnRequestLegComplete(request); |
- EXPECT_EQ(0u, CountPendingBeacons()); |
- EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u)); |
+ EXPECT_EQ(0u, CountQueuedBeacons(context)); |
} |
// Make sure the monitor does not log the proxy's IP if one was used. |
TEST_F(DomainReliabilityMonitorTest, WasFetchedViaProxy) { |
+ DomainReliabilityContext* context = CreateAndAddContext(); |
+ |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://example/always_report"); |
+ request.url = GURL("http://example/"); |
+ request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET); |
request.response_info.socket_address = |
net::HostPortPair::FromString("127.0.0.1:3128"); |
request.response_info.was_fetched_via_proxy = true; |
OnRequestLegComplete(request); |
BeaconVector beacons; |
- context_->GetQueuedBeaconsForTesting(&beacons); |
+ context->GetQueuedBeaconsForTesting(&beacons); |
EXPECT_EQ(1u, beacons.size()); |
- EXPECT_TRUE(beacons[0].server_ip.empty()); |
- |
- EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 1u, 0u)); |
+ EXPECT_TRUE(beacons[0]->server_ip.empty()); |
} |
// Make sure the monitor does not log the cached IP returned after a successful |
// cache revalidation request. |
TEST_F(DomainReliabilityMonitorTest, |
NoCachedIPFromSuccessfulRevalidationRequest) { |
+ scoped_ptr<DomainReliabilityConfig> config = MakeTestConfig(); |
+ config->success_sample_rate = 1.0; |
+ DomainReliabilityContext* context = |
+ monitor_.AddContextForTesting(config.Pass()); |
+ |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://example/always_report"); |
+ request.url = GURL("http://example/"); |
request.response_info.was_cached = true; |
OnRequestLegComplete(request); |
BeaconVector beacons; |
- context_->GetQueuedBeaconsForTesting(&beacons); |
+ context->GetQueuedBeaconsForTesting(&beacons); |
EXPECT_EQ(1u, beacons.size()); |
- EXPECT_TRUE(beacons[0].server_ip.empty()); |
+ EXPECT_TRUE(beacons[0]->server_ip.empty()); |
} |
// Make sure the monitor does not log the cached IP returned with a failed |
// cache revalidation request. |
TEST_F(DomainReliabilityMonitorTest, NoCachedIPFromFailedRevalidationRequest) { |
+ DomainReliabilityContext* context = CreateAndAddContext(); |
+ |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://example/always_report"); |
+ request.url = GURL("http://example/"); |
request.response_info.was_cached = true; |
request.status = |
net::URLRequestStatus::FromError(net::ERR_NAME_RESOLUTION_FAILED); |
OnRequestLegComplete(request); |
BeaconVector beacons; |
- context_->GetQueuedBeaconsForTesting(&beacons); |
+ context->GetQueuedBeaconsForTesting(&beacons); |
EXPECT_EQ(1u, beacons.size()); |
- EXPECT_TRUE(beacons[0].server_ip.empty()); |
+ EXPECT_TRUE(beacons[0]->server_ip.empty()); |
} |
TEST_F(DomainReliabilityMonitorTest, AtLeastOneBakedInConfig) { |
@@ -299,37 +265,43 @@ TEST_F(DomainReliabilityMonitorTest, AddBakedInConfigs) { |
for (const char* const* p = kBakedInJsonConfigs; *p; ++p) |
++num_baked_in_configs; |
- // The monitor should have contexts for all of the baked-in configs, plus the |
- // test one added in the test constructor. |
- EXPECT_EQ(num_baked_in_configs + 1, monitor_.contexts_size_for_testing()); |
+ // Also count the Google configs stored in abbreviated form. |
+ std::vector<DomainReliabilityConfig*> google_configs; |
+ GetAllGoogleConfigs(&google_configs); |
+ size_t num_google_configs = google_configs.size(); |
+ STLDeleteElements(&google_configs); |
+ |
+ // The monitor should have contexts for all of the baked-in configs. |
+ EXPECT_EQ(num_baked_in_configs + num_google_configs, |
+ monitor_.contexts_size_for_testing()); |
} |
TEST_F(DomainReliabilityMonitorTest, ClearBeacons) { |
+ DomainReliabilityContext* context = CreateAndAddContext(); |
+ |
// Initially the monitor should have just the test context, with no beacons. |
EXPECT_EQ(1u, monitor_.contexts_size_for_testing()); |
- EXPECT_EQ(0u, CountPendingBeacons()); |
- EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u)); |
- EXPECT_TRUE(CheckRequestCounts(kNeverReportIndex, 0u, 0u)); |
+ EXPECT_EQ(0u, CountQueuedBeacons(context)); |
// Add a beacon. |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://example/always_report"); |
+ request.url = GURL("http://example/"); |
+ request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET); |
OnRequestLegComplete(request); |
// Make sure it was added. |
- EXPECT_EQ(1u, CountPendingBeacons()); |
- EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 1u, 0u)); |
+ EXPECT_EQ(1u, CountQueuedBeacons(context)); |
monitor_.ClearBrowsingData(CLEAR_BEACONS); |
// Make sure the beacon was cleared, but not the contexts. |
EXPECT_EQ(1u, monitor_.contexts_size_for_testing()); |
- EXPECT_EQ(0u, CountPendingBeacons()); |
- EXPECT_TRUE(CheckRequestCounts(kAlwaysReportIndex, 0u, 0u)); |
- EXPECT_TRUE(CheckRequestCounts(kNeverReportIndex, 0u, 0u)); |
+ EXPECT_EQ(0u, CountQueuedBeacons(context)); |
} |
TEST_F(DomainReliabilityMonitorTest, ClearContexts) { |
+ CreateAndAddContext(); |
+ |
// Initially the monitor should have just the test context. |
EXPECT_EQ(1u, monitor_.contexts_size_for_testing()); |
@@ -340,67 +312,85 @@ TEST_F(DomainReliabilityMonitorTest, ClearContexts) { |
} |
TEST_F(DomainReliabilityMonitorTest, WildcardMatchesSelf) { |
- DomainReliabilityContext* context = CreateAndAddContext("*.wildcard"); |
+ DomainReliabilityContext* context = |
+ CreateAndAddContextForOrigin(GURL("https://wildcard/"), true); |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://wildcard/always_report"); |
+ request.url = GURL("http://wildcard/"); |
+ request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET); |
OnRequestLegComplete(request); |
- EXPECT_TRUE(CheckRequestCounts(context, kAlwaysReportIndex, 1u, 0u)); |
+ |
+ EXPECT_EQ(1u, CountQueuedBeacons(context)); |
} |
TEST_F(DomainReliabilityMonitorTest, WildcardMatchesSubdomain) { |
- DomainReliabilityContext* context = CreateAndAddContext("*.wildcard"); |
+ DomainReliabilityContext* context = |
+ CreateAndAddContextForOrigin(GURL("https://wildcard/"), true); |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://test.wildcard/always_report"); |
+ request.url = GURL("http://test.wildcard/"); |
+ request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET); |
OnRequestLegComplete(request); |
- EXPECT_TRUE(CheckRequestCounts(context, kAlwaysReportIndex, 1u, 0u)); |
+ |
+ EXPECT_EQ(1u, CountQueuedBeacons(context)); |
} |
TEST_F(DomainReliabilityMonitorTest, WildcardDoesntMatchSubsubdomain) { |
- DomainReliabilityContext* context = CreateAndAddContext("*.wildcard"); |
+ DomainReliabilityContext* context = |
+ CreateAndAddContextForOrigin(GURL("https://wildcard/"), true); |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://test.test.wildcard/always_report"); |
+ request.url = GURL("http://test.test.wildcard/"); |
+ request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET); |
OnRequestLegComplete(request); |
- EXPECT_TRUE(CheckRequestCounts(context, kAlwaysReportIndex, 0u, 0u)); |
+ |
+ EXPECT_EQ(0u, CountQueuedBeacons(context)); |
} |
TEST_F(DomainReliabilityMonitorTest, WildcardPrefersSelfToSelfWildcard) { |
- DomainReliabilityContext* context1 = CreateAndAddContext("wildcard"); |
- DomainReliabilityContext* context2 = CreateAndAddContext("*.wildcard"); |
+ DomainReliabilityContext* context1 = |
+ CreateAndAddContextForOrigin(GURL("https://wildcard/"), false); |
+ DomainReliabilityContext* context2 = |
+ CreateAndAddContextForOrigin(GURL("https://wildcard/"), true); |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://wildcard/always_report"); |
+ request.url = GURL("http://wildcard/"); |
+ request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET); |
OnRequestLegComplete(request); |
- EXPECT_TRUE(CheckRequestCounts(context1, kAlwaysReportIndex, 1u, 0u)); |
- EXPECT_TRUE(CheckRequestCounts(context2, kAlwaysReportIndex, 0u, 0u)); |
+ EXPECT_EQ(1u, CountQueuedBeacons(context1)); |
+ EXPECT_EQ(0u, CountQueuedBeacons(context2)); |
} |
TEST_F(DomainReliabilityMonitorTest, WildcardPrefersSelfToParentWildcard) { |
- DomainReliabilityContext* context1 = CreateAndAddContext("test.wildcard"); |
- DomainReliabilityContext* context2 = CreateAndAddContext("*.wildcard"); |
+ DomainReliabilityContext* context1 = |
+ CreateAndAddContextForOrigin(GURL("https://test.wildcard/"), false); |
+ DomainReliabilityContext* context2 = |
+ CreateAndAddContextForOrigin(GURL("https://wildcard/"), true); |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://test.wildcard/always_report"); |
+ request.url = GURL("http://test.wildcard/"); |
+ request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET); |
OnRequestLegComplete(request); |
- EXPECT_TRUE(CheckRequestCounts(context1, kAlwaysReportIndex, 1u, 0u)); |
- EXPECT_TRUE(CheckRequestCounts(context2, kAlwaysReportIndex, 0u, 0u)); |
+ EXPECT_EQ(1u, CountQueuedBeacons(context1)); |
+ EXPECT_EQ(0u, CountQueuedBeacons(context2)); |
} |
TEST_F(DomainReliabilityMonitorTest, |
WildcardPrefersSelfWildcardToParentWildcard) { |
- DomainReliabilityContext* context1 = CreateAndAddContext("*.test.wildcard"); |
- DomainReliabilityContext* context2 = CreateAndAddContext("*.wildcard"); |
+ DomainReliabilityContext* context1 = |
+ CreateAndAddContextForOrigin(GURL("https://test.wildcard/"), true); |
+ DomainReliabilityContext* context2 = |
+ CreateAndAddContextForOrigin(GURL("https://wildcard/"), true); |
RequestInfo request = MakeRequestInfo(); |
- request.url = GURL("http://test.wildcard/always_report"); |
+ request.url = GURL("http://test.wildcard/"); |
+ request.status = net::URLRequestStatus::FromError(net::ERR_CONNECTION_RESET); |
OnRequestLegComplete(request); |
- EXPECT_TRUE(CheckRequestCounts(context1, kAlwaysReportIndex, 1u, 0u)); |
- EXPECT_TRUE(CheckRequestCounts(context2, kAlwaysReportIndex, 0u, 0u)); |
+ EXPECT_EQ(1u, CountQueuedBeacons(context1)); |
+ EXPECT_EQ(0u, CountQueuedBeacons(context2)); |
} |
} // namespace |