blob: cff3eb8a25d4618848383556aef9725a7f5b447f [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
from common import TestDriver
from common import IntegrationTest
from decorators import ChromeVersionEqualOrAfterM
from decorators import SkipIfForcedBrowserArg
import json
class ClientConfig(IntegrationTest):
# Ensure client config is fetched at the start of the Chrome session, and the
# session ID is correctly set in the chrome-proxy request header.
def testClientConfig(self):
with TestDriver() as t:
t.AddChromeArg('--enable-spdy-proxy-auth')
t.SleepUntilHistogramHasEntry(
'DataReductionProxy.ConfigService.FetchResponseCode')
t.LoadURL('http://check.googlezip.net/test.html')
responses = t.GetHTTPResponses()
self.assertEqual(2, len(responses))
for response in responses:
chrome_proxy_header = response.request_headers['chrome-proxy']
header_values = [v.strip(' ') for v in chrome_proxy_header.split(',')]
self.assertTrue(any(v[:2] == 's=' for v in header_values))
self.assertFalse(any(v[:3] == 'ps=' for v in header_values))
self.assertFalse(any(v[:4] == 'sid=' for v in header_values))
# Verify that the proxy server honored the session ID.
self.assertHasChromeProxyViaHeader(response)
self.assertEqual(200, response.status)
# Ensure Chrome uses a direct connection when no valid client config is given.
@SkipIfForcedBrowserArg('data-reduction-proxy-config-url')
def testNoClientConfigUseDirect(self):
with TestDriver() as t:
t.AddChromeArg('--enable-spdy-proxy-auth')
# The test server won't respond with a valid client config.
t.UseNetLog()
t.AddChromeArg('--data-reduction-proxy-config-url='
'https://chromeproxy-test.appspot.com')
t.SleepUntilHistogramHasEntry(
'DataReductionProxy.ConfigService.FetchResponseCode')
t.LoadURL('http://check.googlezip.net/test.html')
responses = t.GetHTTPResponses()
self.assertEqual(2, len(responses))
for response in responses:
self.assertNotHasChromeProxyViaHeader(response)
# Ensure client config is fetched at the start of the Chrome session, and the
# variations ID is set in the request.
# Disabled on android because the net log is not copied yet. crbug.com/761507
@ChromeVersionEqualOrAfterM(62)
def testClientConfigVariationsHeader(self):
with TestDriver() as t:
t.UseNetLog()
t.AddChromeArg('--enable-spdy-proxy-auth')
# Force set the variations ID, so they are send along with the client
# config fetch request.
t.AddChromeArg('--force-variation-ids=42')
t.LoadURL('http://check.googlezip.net/test.html')
variation_header_count = 0
# Look for the request made to data saver client config server.
data = t.StopAndGetNetLog()
for i in data["events"]:
dumped_event = json.dumps(i)
if dumped_event.find("datasaver.") !=-1 and\
dumped_event.find(".googleapis.com") !=-1 and\
dumped_event.find("clientConfigs") != -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)
# Ensure client config is fetched at the start of the Chrome session, and the
# variations ID is not set in the request.
# Disabled on android because the net log is not copied yet. crbug.com/761507
@ChromeVersionEqualOrAfterM(62)
def testClientConfigNoVariationsHeader(self):
with TestDriver() as t:
t.UseNetLog()
t.AddChromeArg('--enable-spdy-proxy-auth')
t.LoadURL('http://check.googlezip.net/test.html')
variation_header_count = 0
# Look for the request made to data saver client config server.
data = t.StopAndGetNetLog()
for i in data["events"]:
dumped_event = json.dumps(i)
if dumped_event.find("datasaver.") !=-1 and\
dumped_event.find(".googleapis.com") !=-1 and\
dumped_event.find("clientConfigs") != -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 not set. x-client-data should not be present in the
# request headers.
self.assertEqual(0, variation_header_count)
if __name__ == '__main__':
IntegrationTest.RunAllTests()