Index: blimp/test/impaired_network/test_runner.py |
diff --git a/blimp/test/impaired_network/test_runner.py b/blimp/test/impaired_network/test_runner.py |
deleted file mode 100755 |
index 31562414d4ed33232580d11168520cd510dcc773..0000000000000000000000000000000000000000 |
--- a/blimp/test/impaired_network/test_runner.py |
+++ /dev/null |
@@ -1,132 +0,0 @@ |
-#!/usr/bin/env python |
- |
-# Copyright 2016 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 argparse |
-import multiprocessing |
-import os |
-import pwd |
-import subprocess |
- |
-from twisted.internet import reactor |
- |
-from packet_queue import monitoring |
-from packet_queue import nfqueue |
-from packet_queue import simulation |
- |
- |
-ENGINE_PORT = 25467 |
-MTU = 2048 |
- |
- |
-def parse_args(): |
- parser = argparse.ArgumentParser() |
- |
- parser.add_argument( |
- '--target', type=str, required=True, |
- help='path of the test binary to run') |
- parser.add_argument( |
- '--gtest_filter', type=str, default='EngineBrowserTest.LoadUrl', |
- help='which specific test to run') |
- parser.add_argument( |
- '-w', '--bandwidth', type=int, default=-1, |
- help='bandwidth cap in bytes/second, unlimited by default') |
- parser.add_argument( |
- '-b', '--buffer', type=int, default=-1, |
- help='buffer size in bytes, unlimited by default') |
- parser.add_argument( |
- '-d', '--delay', type=float, default=0.0, |
- help='one-way packet delay in seconds') |
- parser.add_argument( |
- '-l', '--loss', type=float, default=0.0, |
- help='probability of random packet loss') |
- |
- return parser.parse_args() |
- |
- |
-def run_packet_queue(params, ready_event): |
- """Runs the packet queue with parameters from command-line args. |
- |
- This function runs the Twisted reactor, which blocks until the process is |
- interrupted. |
- """ |
- event_log = monitoring.EventLog() |
- pipes = simulation.PipePair(params, event_log) |
- |
- nfqueue.configure('tcp', ENGINE_PORT, pipes, 'lo') |
- |
- reactor.callWhenRunning(ready_event.set) |
- reactor.addSystemEventTrigger( |
- 'before', 'shutdown', report_stats, event_log) |
- reactor.run() |
- |
- |
-def report_stats(event_log): |
- """Prints accumulated network stats to stdout.""" |
- dropped = 0 |
- delivered = 0 |
- |
- for event in event_log.get_pending(): |
- if event['type'] == 'drop': |
- dropped += event['value'] |
- elif event['type'] == 'deliver': |
- delivered += event['value'] |
- |
- print '%i bytes delivered' % delivered |
- print '%i bytes dropped' % dropped |
- |
- |
-def set_chrome_test_user(): |
- """If the SUDO_USER environment variable exists, sets the user to that. |
- |
- This is required because Chrome browser tests won't run as root. |
- |
- If SUDO_USER isn't present, we might be running as a non-root user with |
- the CAP_NET_ADMIN capability, so the user won't change. |
- """ |
- sudo_user = os.getenv('SUDO_USER') |
- if sudo_user: |
- uid = pwd.getpwnam(sudo_user).pw_uid |
- os.setuid(uid) |
- |
- |
-def main(): |
- """Runs a Blimp test target with network impairment. |
- |
- This works by forking to run the packet queue, and then running the test |
- binary in a subprocess when the packet queue is ready. |
- """ |
- args = parse_args() |
- |
- simulation_params = { |
- 'bandwidth': args.bandwidth, |
- 'buffer': args.buffer, |
- 'delay': args.delay, |
- 'loss': args.loss, |
- } |
- |
- ready_event = multiprocessing.Event() |
- packet_queue = multiprocessing.Process( |
- target=run_packet_queue, args=(simulation_params, ready_event)) |
- |
- if subprocess.call(['ip', 'link', 'set', 'dev', 'lo', 'mtu', str(MTU)]): |
- raise OSError('Failed to set MTU') |
- |
- packet_queue.start() |
- ready_event.wait(timeout=3) |
- |
- subprocess.call([ |
- args.target, |
- '--disable-setuid-sandbox', |
- '--single_process', |
- '--engine-port=%i' % ENGINE_PORT, |
- '--gtest_filter=%s' % args.gtest_filter, |
- ], preexec_fn=set_chrome_test_user) |
- |
- packet_queue.terminate() |
- |
- |
-if __name__ == '__main__': |
- main() |