blob: f0182cba884744daa075694a54bf1b3a0bb622f1 [file] [log] [blame]
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import common
import time
from common import TestDriver
from common import IntegrationTest
from decorators import NotAndroid
from decorators import ChromeVersionEqualOrAfterM
import json
class Smoke(IntegrationTest):
# Ensure Chrome does not use DataSaver in Incognito mode.
# Clank does not honor the --incognito flag.
@NotAndroid
def testCheckPageWithIncognito(self):
with TestDriver() as t:
t.AddChromeArg('--enable-spdy-proxy-auth')
t.AddChromeArg('--incognito')
t.LoadURL('http://check.googlezip.net/test.html')
responses = t.GetHTTPResponses()
self.assertNotEqual(0, len(responses))
for response in responses:
self.assertNotHasChromeProxyViaHeader(response)
# Ensure Chrome does not use DataSaver when holdback is enabled.
def testCheckPageWithHoldback(self):
with TestDriver() as t:
t.AddChromeArg('--enable-spdy-proxy-auth')
t.AddChromeArg('--force-fieldtrials=DataCompressionProxyHoldback/'
'Enabled')
t.LoadURL('http://check.googlezip.net/test.html')
responses = t.GetHTTPResponses()
self.assertNotEqual(0, len(responses))
num_chrome_proxy_request_headers = 0
for response in responses:
self.assertNotHasChromeProxyViaHeader(response)
if ('chrome-proxy' in response.request_headers):
num_chrome_proxy_request_headers += 1
# DataSaver histograms must still be logged.
t.SleepUntilHistogramHasEntry('PageLoad.Clients.DataReductionProxy.'
'ParseTiming.NavigationToParseStart')
self.assertEqual(num_chrome_proxy_request_headers, 0)
# Ensure that Chrome did not attempt to use DataSaver and got a bypass.
histogram = t.GetHistogram('DataReductionProxy.BypassedBytes.'
'Status502HttpBadGateway', 5)
self.assertEqual(histogram, {})
histogram = t.GetHistogram('DataReductionProxy.BlockTypePrimary', 5)
self.assertEqual(histogram, {})
histogram = t.GetHistogram('DataReductionProxy.BypassTypePrimary', 5)
self.assertEqual(histogram, {})
# Ensure Chrome uses DataSaver in normal mode.
def testCheckPageWithNormalMode(self):
with TestDriver() as t:
t.AddChromeArg('--enable-spdy-proxy-auth')
t.LoadURL('http://check.googlezip.net/test.html')
responses = t.GetHTTPResponses()
self.assertNotEqual(0, len(responses))
num_chrome_proxy_request_headers = 0
for response in responses:
self.assertHasChromeProxyViaHeader(response)
if ('chrome-proxy' in response.request_headers):
num_chrome_proxy_request_headers += 1
t.SleepUntilHistogramHasEntry('PageLoad.Clients.DataReductionProxy.'
'ParseTiming.NavigationToParseStart')
self.assertGreater(num_chrome_proxy_request_headers, 0)
# Ensure pageload metric pingback with DataSaver.
def testPingback(self):
with TestDriver() as t:
t.AddChromeArg('--enable-spdy-proxy-auth')
t.AddChromeArg('--enable-data-reduction-proxy-force-pingback')
t.LoadURL('http://check.googlezip.net/test.html')
t.LoadURL('http://check.googlezip.net/test.html')
t.SleepUntilHistogramHasEntry("DataReductionProxy.Pingback.Succeeded")
# Verify one pingback attempt that was successful.
attempted = t.GetHistogram('DataReductionProxy.Pingback.Attempted')
self.assertEqual(1, attempted['count'])
succeeded = t.GetHistogram('DataReductionProxy.Pingback.Succeeded')
self.assertEqual(1, succeeded['count'])
# Ensure pageload metric pingback with DataSaver has the variations header.
@ChromeVersionEqualOrAfterM(62)
def testPingbackHasVariations(self):
with TestDriver() as t:
t.AddChromeArg('--enable-spdy-proxy-auth')
t.AddChromeArg('--enable-data-reduction-proxy-force-pingback')
t.UseNetLog()
# Force set the variations ID, so they are send along with the pingback
# request.
t.AddChromeArg('--force-variation-ids=42')
t.LoadURL('http://check.googlezip.net/test.html')
t.LoadURL('http://check.googlezip.net/test.html')
t.SleepUntilHistogramHasEntry("DataReductionProxy.Pingback.Succeeded")
# Look for the request made to data saver pingback server.
data = t.StopAndGetNetLog()
variation_header_count = 0
for i in data["events"]:
dumped_event = json.dumps(i)
if dumped_event.find("datasaver.googleapis.com") !=-1 and\
dumped_event.find("recordPageloadMetrics") != -1 and\
dumped_event.find("headers") != -1 and\
dumped_event.find("accept-encoding") != -1 and\
dumped_event.find("x-client-data") !=-1:
variation_header_count = variation_header_count + 1
# Variation IDs are set. x-client-data should be present in the request
# headers.
self.assertLessEqual(1, variation_header_count)
# Verify unique page IDs are sent in the Chrome-Proxy header.
@ChromeVersionEqualOrAfterM(59)
def testPageID(self):
with TestDriver() as t:
t.AddChromeArg('--enable-spdy-proxy-auth')
page_identifiers = []
page_loads = 5
for i in range (0, page_loads):
t.LoadURL('http://check.googlezip.net/test.html')
responses = t.GetHTTPResponses()
self.assertEqual(2, len(responses))
pid_in_page_count = 0
page_id = ''
for response in responses:
self.assertHasChromeProxyViaHeader(response)
self.assertEqual(200, response.status)
chrome_proxy_header = response.request_headers['chrome-proxy']
chrome_proxy_directives = chrome_proxy_header.split(',')
for directive in chrome_proxy_directives:
if 'pid=' in directive:
pid_in_page_count = pid_in_page_count+1
page_id = directive.split('=')[1]
self.assertNotEqual('', page_id)
self.assertNotIn(page_id, page_identifiers)
page_identifiers.append(page_id)
self.assertEqual(1, pid_in_page_count)
# Ensure that block causes resources to load from the origin directly.
def testCheckBlockIsWorking(self):
with TestDriver() as t:
t.AddChromeArg('--enable-spdy-proxy-auth')
t.LoadURL('http://check.googlezip.net/block')
responses = t.GetHTTPResponses()
self.assertNotEqual(0, len(responses))
for response in responses:
self.assertNotHasChromeProxyViaHeader(response)
# Ensure image resources are compressed.
def testCheckImageIsCompressed(self):
with TestDriver() as t:
t.AddChromeArg('--enable-spdy-proxy-auth')
t.LoadURL('http://check.googlezip.net/static')
# http://check.googlezip.net/static is a test page that has
# image resources.
responses = t.GetHTTPResponses()
self.assertNotEqual(0, len(responses))
for response in responses:
self.assertHasChromeProxyViaHeader(response)
if __name__ == '__main__':
IntegrationTest.RunAllTests()