blob: e04f33786b1e20882668cc98ad45f70549a9f4ca [file] [log] [blame]
# Copyright 2013 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 unittest
from telemetry.core import forwarders
from telemetry.core import wpr_modes
from telemetry.core.backends.chrome import chrome_browser_backend
class FakeBrowserOptions(object):
def __init__(self, netsim=False, wpr_mode=wpr_modes.WPR_OFF):
self.netsim = netsim
self.wpr_mode = wpr_mode
self.browser_type = 'chrome'
self.dont_override_profile = False
class FakeForwarderFactory(object):
host_ip = '127.0.0.1'
def __init__(self, does_forwarder_override_dns):
self.does_forwarder_override_dns = does_forwarder_override_dns
class TestChromeBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
# The test does not need to define the abstract methods. pylint: disable=W0223
def __init__(self, browser_options, does_forwarder_override_dns=False):
super(TestChromeBrowserBackend, self).__init__(
supports_tab_control=False,
supports_extensions=False,
browser_options=browser_options,
output_profile_path=None,
extensions_to_load=None)
self._forwarder_factory = FakeForwarderFactory(does_forwarder_override_dns)
class ReplayStartupArgsTest(unittest.TestCase):
"""Test expected inputs for GetReplayBrowserStartupArgs."""
def testReplayOffGivesEmptyArgs(self):
browser_options = FakeBrowserOptions()
browser_backend = TestChromeBrowserBackend(browser_options)
self.assertEqual([], browser_backend.GetReplayBrowserStartupArgs())
def testReplayOnGivesBasicArgs(self):
browser_options = FakeBrowserOptions(
wpr_mode=wpr_modes.WPR_REPLAY,
netsim=False)
browser_backend = TestChromeBrowserBackend(browser_options)
self.assertEqual((0, 0), tuple(browser_backend.wpr_port_pairs.http))
self.assertEqual((0, 0), tuple(browser_backend.wpr_port_pairs.https))
self.assertEqual(None, browser_backend.wpr_port_pairs.dns)
# When Replay is started, it fills in the actual port values.
# Use different values here to show that the args get the
# remote port values.
browser_backend.wpr_port_pairs = forwarders.PortPairs(
http=forwarders.PortPair(123, 456),
https=forwarders.PortPair(234, 567),
dns=None)
expected_args = [
'--host-resolver-rules=MAP * 127.0.0.1,EXCLUDE localhost',
'--ignore-certificate-errors',
'--testing-fixed-http-port=456',
'--testing-fixed-https-port=567'
]
self.assertEqual(
expected_args,
sorted(browser_backend.GetReplayBrowserStartupArgs()))
def testNetsimGivesNoHostResolver(self):
browser_options = FakeBrowserOptions(
wpr_mode=wpr_modes.WPR_REPLAY,
netsim=True)
browser_backend = TestChromeBrowserBackend(browser_options)
self.assertEqual((80, 80), tuple(browser_backend.wpr_port_pairs.http))
self.assertEqual((443, 443), tuple(browser_backend.wpr_port_pairs.https))
self.assertEqual((53, 53), tuple(browser_backend.wpr_port_pairs.dns))
expected_args = ['--ignore-certificate-errors']
self.assertEqual(
expected_args,
sorted(browser_backend.GetReplayBrowserStartupArgs()))
def testForwaderOverridesDnsGivesNoHostResolver(self):
# Android with --use-rndis uses standard remote ports and
# relies on the forwarder to override DNS resolution.
browser_options = FakeBrowserOptions(
wpr_mode=wpr_modes.WPR_REPLAY,
netsim=False)
browser_backend = TestChromeBrowserBackend(
browser_options, does_forwarder_override_dns=True)
browser_backend.wpr_port_pairs = forwarders.PortPairs(
http=forwarders.PortPair(123, 80),
https=forwarders.PortPair(234, 443),
dns=forwarders.PortPair(345, 53))
expected_args = ['--ignore-certificate-errors']
self.assertEqual(
expected_args,
sorted(browser_backend.GetReplayBrowserStartupArgs()))