Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(812)

Unified Diff: components/data_reduction_proxy/core/browser/data_reduction_proxy_delegate_unittest.cc

Issue 2242353003: Record partial savings for incomplete responses through the DRP. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: renamed ScaleContentLength to ScaleByteCountByRatio Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | components/data_reduction_proxy/core/browser/data_reduction_proxy_metrics.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_delegate_unittest.cc
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_delegate_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_delegate_unittest.cc
index d3ddd1944d0d8d52f7138998938be9299770e22a..c19584ec22dadb5ece5f15f4559b33911abe10c8 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_delegate_unittest.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_delegate_unittest.cc
@@ -86,7 +86,7 @@ TEST(DataReductionProxyDelegate, IsTrustedSpdyProxy) {
net::ProxyServer::Scheme first_proxy_scheme;
net::ProxyServer::Scheme second_proxy_scheme;
bool expect_proxy_is_trusted;
- } tests[] = {
+ } test_cases[] = {
{false, net::ProxyServer::SCHEME_HTTP, net::ProxyServer::SCHEME_INVALID,
false},
{true, net::ProxyServer::SCHEME_HTTP, net::ProxyServer::SCHEME_INVALID,
@@ -116,23 +116,22 @@ TEST(DataReductionProxyDelegate, IsTrustedSpdyProxy) {
{true, net::ProxyServer::SCHEME_QUIC, net::ProxyServer::SCHEME_HTTPS,
true},
};
- for (size_t i = 0; i < arraysize(tests); ++i) {
- ASSERT_EQ(
- tests[i].expect_proxy_is_trusted,
- tests[i].is_in_trusted_spdy_proxy_field_trial &&
- (tests[i].first_proxy_scheme == net::ProxyServer::SCHEME_HTTPS ||
- tests[i].second_proxy_scheme == net::ProxyServer::SCHEME_HTTPS))
- << i;
+ for (const auto& test : test_cases) {
+ ASSERT_EQ(test.expect_proxy_is_trusted,
+ test.is_in_trusted_spdy_proxy_field_trial &&
+ (test.first_proxy_scheme == net::ProxyServer::SCHEME_HTTPS ||
+ test.second_proxy_scheme == net::ProxyServer::SCHEME_HTTPS))
+ << (&test - test_cases);
std::vector<net::ProxyServer> proxies_for_http;
net::ProxyServer first_proxy;
net::ProxyServer second_proxy;
- if (tests[i].first_proxy_scheme != net::ProxyServer::SCHEME_INVALID) {
- first_proxy = GetProxyWithScheme(tests[i].first_proxy_scheme);
+ if (test.first_proxy_scheme != net::ProxyServer::SCHEME_INVALID) {
+ first_proxy = GetProxyWithScheme(test.first_proxy_scheme);
proxies_for_http.push_back(first_proxy);
}
- if (tests[i].second_proxy_scheme != net::ProxyServer::SCHEME_INVALID) {
- second_proxy = GetProxyWithScheme(tests[i].second_proxy_scheme);
+ if (test.second_proxy_scheme != net::ProxyServer::SCHEME_INVALID) {
+ second_proxy = GetProxyWithScheme(test.second_proxy_scheme);
proxies_for_http.push_back(second_proxy);
}
@@ -156,12 +155,12 @@ TEST(DataReductionProxyDelegate, IsTrustedSpdyProxy) {
base::FieldTrialList field_trial_list(nullptr);
base::FieldTrialList::CreateFieldTrial(
params::GetTrustedSpdyProxyFieldTrialName(),
- tests[i].is_in_trusted_spdy_proxy_field_trial ? "Enabled" : "Control");
+ test.is_in_trusted_spdy_proxy_field_trial ? "Enabled" : "Control");
- EXPECT_EQ(tests[i].expect_proxy_is_trusted,
+ EXPECT_EQ(test.expect_proxy_is_trusted,
delegate.IsTrustedSpdyProxy(first_proxy) ||
delegate.IsTrustedSpdyProxy(second_proxy))
- << i;
+ << (&test - test_cases);
}
}
@@ -408,11 +407,11 @@ TEST_F(DataReductionProxyDelegateTest, OnResolveProxyHandler) {
// missing config are recorded properly.
TEST_F(DataReductionProxyDelegateTest, HTTPRequests) {
const struct {
- std::string url;
+ const char* url;
bool enabled_by_user;
bool use_direct_proxy;
bool expect_histogram;
- } tests[] = {
+ } test_cases[] = {
{
// Request should not be logged because data saver is disabled.
"http://www.example.com/", false, true, false,
@@ -440,16 +439,16 @@ TEST_F(DataReductionProxyDelegateTest, HTTPRequests) {
},
};
- for (size_t i = 0; i < arraysize(tests); ++i) {
- ASSERT_TRUE(tests[i].use_direct_proxy || tests[i].enabled_by_user);
- ASSERT_TRUE(tests[i].enabled_by_user || !tests[i].expect_histogram);
+ for (const auto& test : test_cases) {
+ ASSERT_TRUE(test.use_direct_proxy || test.enabled_by_user);
+ ASSERT_TRUE(test.enabled_by_user || !test.expect_histogram);
base::HistogramTester histogram_tester;
- GURL url(tests[i].url);
+ GURL url(test.url);
net::ProxyInfo data_reduction_proxy_info;
std::string data_reduction_proxy;
- if (!tests[i].use_direct_proxy) {
+ if (!test.use_direct_proxy) {
base::TrimString(params()->DefaultOrigin(), "/", &data_reduction_proxy);
data_reduction_proxy_info.UsePacString(
"PROXY " +
@@ -459,10 +458,10 @@ TEST_F(DataReductionProxyDelegateTest, HTTPRequests) {
.ToString() +
"; DIRECT");
}
- EXPECT_EQ(tests[i].use_direct_proxy, data_reduction_proxy_info.is_empty());
+ EXPECT_EQ(test.use_direct_proxy, data_reduction_proxy_info.is_empty());
net::ProxyConfig data_reduction_proxy_config;
- if (tests[i].use_direct_proxy) {
+ if (test.use_direct_proxy) {
data_reduction_proxy_config = net::ProxyConfig::CreateDirect();
} else {
@@ -470,7 +469,7 @@ TEST_F(DataReductionProxyDelegateTest, HTTPRequests) {
"http=" + data_reduction_proxy + ",direct://;");
data_reduction_proxy_config.set_id(1);
}
- config()->SetStateForTest(tests[i].enabled_by_user /* enabled */,
+ config()->SetStateForTest(test.enabled_by_user /* enabled */,
false /* at_startup */);
net::ProxyRetryInfoMap empty_proxy_retry_info;
@@ -485,29 +484,16 @@ TEST_F(DataReductionProxyDelegateTest, HTTPRequests) {
empty_proxy_retry_info, config(), &result);
histogram_tester.ExpectTotalCount(
"DataReductionProxy.ConfigService.HTTPRequests",
- tests[i].expect_histogram ? 1 : 0);
+ test.expect_histogram ? 1 : 0);
- if (tests[i].expect_histogram) {
+ if (test.expect_histogram) {
histogram_tester.ExpectUniqueSample(
"DataReductionProxy.ConfigService.HTTPRequests",
- tests[i].use_direct_proxy ? 0 : 1, 1);
+ test.use_direct_proxy ? 0 : 1, 1);
}
}
}
-#if defined(OS_ANDROID)
-#define MAYBE_OnCompletedInternalLoFi DISABLED_OnCompletedInternalLoFi
-#else
-#define MAYBE_OnCompletedInternalLoFi OnCompletedInternalLoFi
-#endif
-
-#if defined(OS_ANDROID)
-#define MAYBE_OnCompletedInternalLoFiPreview \
- DISABLED_OnCompletedInternalLoFiPreview
-#else
-#define MAYBE_OnCompletedInternalLoFiPreview OnCompletedInternalLoFiPreview
-#endif
-
TEST_F(DataReductionProxyDelegateTest, OnCompletedSizeFor200) {
int64_t baseline_received_bytes = total_received_bytes();
int64_t baseline_original_received_bytes = total_original_received_bytes();
@@ -586,10 +572,7 @@ TEST_F(DataReductionProxyDelegateTest, OnCompletedSizeForReadError) {
int64_t baseline_received_bytes = total_received_bytes();
int64_t baseline_original_received_bytes = total_original_received_bytes();
- net::MockRead reads[] = {net::MockRead("HTTP/1.1 200 OK\r\n"
- "Via: 1.1 Chrome-Compression-Proxy\r\n"
- "X-Original-Content-Length: 10000\r\n"
- "Content-Length: 1000\r\n\r\n"),
+ net::MockRead reads[] = {net::MockRead("HTTP/1.1 "),
net::MockRead(net::ASYNC, net::ERR_ABORTED)};
net::StaticSocketDataProvider socket(reads, arraysize(reads), nullptr, 0);
mock_socket_factory()->AddSocketDataProvider(&socket);
@@ -606,6 +589,107 @@ TEST_F(DataReductionProxyDelegateTest, OnCompletedSizeForReadError) {
total_original_received_bytes() - baseline_original_received_bytes);
}
+TEST_F(DataReductionProxyDelegateTest, PartialRangeSavings) {
+ const struct {
+ std::string response_headers;
+ size_t received_content_length;
+ int64_t expected_original_content_length;
+ } test_cases[] = {
+ {"HTTP/1.1 200 OK\r\n"
+ "Via: 1.1 Chrome-Compression-Proxy\r\n"
+ "Content-Length: 1000\r\n"
+ "X-Original-Content-Length: 3000\r\n\r\n",
+ 100, 300},
+ {"HTTP/1.1 200 OK\r\n"
+ "Via: 1.1 Chrome-Compression-Proxy\r\n"
+ "Content-Length: 1000\r\n"
+ "X-Original-Content-Length: 1000\r\n\r\n",
+ 100, 100},
+ {"HTTP/1.1 200 OK\r\n"
+ "Via: 1.1 Chrome-Compression-Proxy\r\n"
+ "Content-Length: 3000\r\n"
+ "X-Original-Content-Length: 1000\r\n\r\n",
+ 300, 100},
+ {"HTTP/1.1 200 OK\r\n"
+ "Via: 1.1 Chrome-Compression-Proxy\r\n"
+ "Content-Length: 1000\r\n\r\n",
+ 100, 100},
+ {"HTTP/1.1 200 OK\r\n"
+ "Via: 1.1 Chrome-Compression-Proxy\r\n"
+ "Content-Length: 1000\r\n"
+ "X-Original-Content-Length: nonsense\r\n\r\n",
+ 100, 100},
+ {"HTTP/1.1 200 OK\r\n"
+ "Via: 1.1 Chrome-Compression-Proxy\r\n"
+ "Content-Length: 0\r\n"
+ "X-Original-Content-Length: 1000\r\n\r\n",
+ 0, 1000},
+ {"HTTP/1.1 200 OK\r\n"
+ "Via: 1.1 Chrome-Compression-Proxy\r\n"
+ "X-Original-Content-Length: 1000\r\n\r\n",
+ 100, 100},
+ {"HTTP/1.1 200 OK\r\n"
+ "Via: 1.1 Chrome-Compression-Proxy\r\n"
+ "Content-Length: nonsense\r\n"
+ "X-Original-Content-Length: 3000\r\n\r\n",
+ 100, 100},
+ {"HTTP/1.1 200 OK\r\n"
+ "Via: 1.1 Chrome-Compression-Proxy\r\n"
+ "Content-Length: 1000\r\n"
+ "X-Original-Content-Length: 0\r\n\r\n",
+ 100, 0},
+ {"HTTP/1.1 200 OK\r\n"
+ "Via: 1.1 Chrome-Compression-Proxy\r\n"
+ "Content-Length: 1000\r\n"
+ "X-Original-Content-Length: 0\r\n\r\n",
+ 0, 0},
+ {"HTTP/1.1 200 OK\r\n"
+ "Via: 1.1 Chrome-Compression-Proxy\r\n"
+ "Content-Length: " +
+ base::Int64ToString(static_cast<int64_t>(1) << 60) +
+ "\r\n"
+ "X-Original-Content-Length: " +
+ base::Int64ToString((static_cast<int64_t>(1) << 60) * 3) +
+ "\r\n\r\n",
+ 100, 300},
+ };
+
+ for (const auto& test : test_cases) {
+ int64_t baseline_received_bytes = total_received_bytes();
+ int64_t baseline_original_received_bytes = total_original_received_bytes();
+
+ std::string response_body(test.received_content_length, 'a');
+
+ net::MockRead reads[] = {
+ net::MockRead(net::ASYNC, test.response_headers.data(),
+ test.response_headers.size()),
+ net::MockRead(net::ASYNC, response_body.data(), response_body.size()),
+ net::MockRead(net::SYNCHRONOUS, net::ERR_ABORTED)};
+ net::StaticSocketDataProvider socket(reads, arraysize(reads), nullptr, 0);
+ mock_socket_factory()->AddSocketDataProvider(&socket);
+
+ net::TestDelegate test_delegate;
+ std::unique_ptr<net::URLRequest> request = context()->CreateRequest(
+ GURL("http://example.com"), net::IDLE, &test_delegate);
+ request->Start();
+
+ base::RunLoop().RunUntilIdle();
+
+ int64_t expected_original_size =
+ net::HttpUtil::AssembleRawHeaders(test.response_headers.data(),
+ test.response_headers.size())
+ .size() +
+ test.expected_original_content_length;
+
+ EXPECT_EQ(request->GetTotalReceivedBytes(),
+ total_received_bytes() - baseline_received_bytes)
+ << (&test - test_cases);
+ EXPECT_EQ(expected_original_size, total_original_received_bytes() -
+ baseline_original_received_bytes)
+ << (&test - test_cases);
+ }
+}
+
} // namespace
} // namespace data_reduction_proxy
« no previous file with comments | « no previous file | components/data_reduction_proxy/core/browser/data_reduction_proxy_metrics.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698