| Index: tools/telemetry/telemetry/core/platform/network_controller_backend_unittest.py
|
| diff --git a/tools/telemetry/telemetry/core/platform/network_controller_backend_unittest.py b/tools/telemetry/telemetry/core/platform/network_controller_backend_unittest.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..148d9ecfdcbd707aba38f8becad995d643396089
|
| --- /dev/null
|
| +++ b/tools/telemetry/telemetry/core/platform/network_controller_backend_unittest.py
|
| @@ -0,0 +1,129 @@
|
| +# Copyright 2014 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 tempfile
|
| +import unittest
|
| +
|
| +from telemetry.core import wpr_modes
|
| +from telemetry.core.platform import network_controller_backend
|
| +
|
| +
|
| +class FakePlatformBackend(object):
|
| + pass
|
| +
|
| +
|
| +class FakeBrowserBackend(object):
|
| + pass
|
| +
|
| +
|
| +class FakeReplayServer(object):
|
| + def __init__(self, browser_backend, **replay_args):
|
| + self.browser_backend = browser_backend
|
| + self.replay_args = replay_args
|
| + self.is_closed = False
|
| +
|
| + def Close(self):
|
| + assert not self.is_closed
|
| + self.is_closed = True
|
| +
|
| +
|
| +class TestNetworkControllerBackend(
|
| + network_controller_backend.NetworkControllerBackend):
|
| + """NetworkControllerBackend with a fake ReplayServer."""
|
| +
|
| + def __init__(self, platform_backend):
|
| + super(TestNetworkControllerBackend, self).__init__(platform_backend)
|
| + self.fake_replay_server = None
|
| +
|
| + def _ReplayServer(self, browser_backend, replay_args):
|
| + self.fake_replay_server = FakeReplayServer(browser_backend, **replay_args)
|
| + return self.fake_replay_server
|
| +
|
| +
|
| +class NetworkControllerBackendTest(unittest.TestCase):
|
| +
|
| + def testSameArgsReusesServer(self):
|
| + b = TestNetworkControllerBackend(FakePlatformBackend())
|
| + with tempfile.NamedTemporaryFile() as temp_file:
|
| + archive_file = temp_file.name
|
| + # Create Replay server.
|
| + b.SetReplayArgs(archive_file, wpr_modes.WPR_REPLAY, '3g', ['--some-arg'])
|
| + browser_backend = FakeBrowserBackend()
|
| + b.UpdateReplay(browser_backend)
|
| + self.assertIs(browser_backend, b.fake_replay_server.browser_backend)
|
| + expected_replay_args = dict(
|
| + archive_path=archive_file,
|
| + wpr_mode=wpr_modes.WPR_REPLAY,
|
| + netsim='3g',
|
| + extra_wpr_args=['--some-arg'],
|
| + make_javascript_deterministic=False)
|
| + self.assertEqual(expected_replay_args, b.fake_replay_server.replay_args)
|
| +
|
| + # Reuse Replay server.
|
| + fake_replay_server = b.fake_replay_server
|
| + b.SetReplayArgs(archive_file, wpr_modes.WPR_REPLAY, '3g', ['--some-arg'])
|
| + b.UpdateReplay(browser_backend)
|
| +
|
| + self.assertIs(fake_replay_server, b.fake_replay_server)
|
| + b.StopReplay()
|
| + self.assertTrue(b.fake_replay_server.is_closed)
|
| +
|
| + def testDifferentArgsUsesDifferentServer(self):
|
| + b = TestNetworkControllerBackend(FakePlatformBackend())
|
| + with tempfile.NamedTemporaryFile() as temp_file:
|
| + archive_file = temp_file.name
|
| + # Create Replay server.
|
| + b.SetReplayArgs(archive_file, wpr_modes.WPR_REPLAY, '3g', ['--some-arg'])
|
| + browser_backend = FakeBrowserBackend()
|
| + b.UpdateReplay(browser_backend)
|
| + self.assertIs(browser_backend, b.fake_replay_server.browser_backend)
|
| + expected_replay_args = dict(
|
| + archive_path=archive_file,
|
| + wpr_mode=wpr_modes.WPR_REPLAY,
|
| + netsim='3g',
|
| + extra_wpr_args=['--some-arg'],
|
| + make_javascript_deterministic=False)
|
| + self.assertEqual(expected_replay_args, b.fake_replay_server.replay_args)
|
| + fake_replay_server = b.fake_replay_server
|
| +
|
| + # Create different Replay server.
|
| + # Set netsim to None instead of '3g'.
|
| + b.SetReplayArgs(archive_file, wpr_modes.WPR_REPLAY, None, ['--some-arg'])
|
| + b.UpdateReplay(browser_backend)
|
| +
|
| + self.assertIsNot(fake_replay_server, b.fake_replay_server)
|
| + self.assertTrue(fake_replay_server.is_closed)
|
| + self.assertFalse(b.fake_replay_server.is_closed)
|
| + different_replay_args = dict(
|
| + archive_path=archive_file,
|
| + wpr_mode=wpr_modes.WPR_REPLAY,
|
| + netsim=None, # first call used '3g'
|
| + extra_wpr_args=['--some-arg'],
|
| + make_javascript_deterministic=False)
|
| +
|
| + self.assertEqual(different_replay_args, b.fake_replay_server.replay_args)
|
| + b.StopReplay()
|
| + self.assertTrue(b.fake_replay_server.is_closed)
|
| +
|
| + def testUpdateReplayWithoutArgsIsOkay(self):
|
| + b = TestNetworkControllerBackend(FakePlatformBackend())
|
| + b.UpdateReplay(FakeBrowserBackend()) # does not raise
|
| +
|
| + def testBadArchivePathRaises(self):
|
| + b = TestNetworkControllerBackend(FakePlatformBackend())
|
| + b.SetReplayArgs('/tmp/nonexistant', wpr_modes.WPR_REPLAY, '3g', [])
|
| + with self.assertRaises(network_controller_backend.ArchiveDoesNotExistError):
|
| + b.UpdateReplay(FakeBrowserBackend())
|
| +
|
| + def testBadArchivePathOnRecordIsOkay(self):
|
| + """No ArchiveDoesNotExistError for record mode."""
|
| + b = TestNetworkControllerBackend(FakePlatformBackend())
|
| + b.SetReplayArgs('/tmp/nonexistant', wpr_modes.WPR_RECORD, '3g', [])
|
| + b.UpdateReplay(FakeBrowserBackend()) # does not raise
|
| +
|
| + def testModeOffDoesNotCreateReplayServer(self):
|
| + b = TestNetworkControllerBackend(FakePlatformBackend())
|
| + b.SetReplayArgs('/tmp/nonexistant', wpr_modes.WPR_OFF, '3g', [])
|
| + b.UpdateReplay(FakeBrowserBackend())
|
| + self.assertIsNone(b.fake_replay_server)
|
|
|