Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(663)

Unified Diff: server/site_host_route.py

Issue 6689026: Add a route backwards from the DUT to the test host (Closed) Base URL: http://git.chromium.org/git/autotest.git@master
Patch Set: Tpyo Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | server/site_wifitest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: server/site_host_route.py
diff --git a/server/site_host_route.py b/server/site_host_route.py
new file mode 100644
index 0000000000000000000000000000000000000000..78ea0b854d3f4f1700d7ba06f793c81d7c596389
--- /dev/null
+++ b/server/site_host_route.py
@@ -0,0 +1,62 @@
+# Copyright (c) 2011 The Chromium OS 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 re, socket, subprocess
+from autotest_lib.client.common_lib import error
+
+class HostRoute(object):
+ """
+ Host Route: A utility for retrieving information about our route to a host
+
+ """
+
+ def __init__(self, host):
+ self.host = host # Remote host
+ self.calculate()
+
+ def calculate(self):
+ output = self.run_command(["ip", "route", "get", self.host])
+ # This converts "172.22.18.53 via 10.0.0.1 dev eth0 src 10.0.0.200 \n.."
+ # into ("via", "10.0.0.1", "dev", "eth0", "src", "10.0.0.200")
+ route_info = re.split("\s*", output.split("\n")[0].rstrip(' '))[1:]
+
+ # Further, convert the list into a dict {"via": "10.0.0.1", ...}
+ self.route_info = dict(tuple(route_info[i:i+2])
+ for i in range(0, len(route_info), 2))
+
+ if 'src' not in self.route_info:
+ raise error.TestFail('Cannot find route to host %s' % self.host)
+
+class LocalHostRoute(HostRoute):
+ """
+ Self Host Route: Retrieve host route for the test-host machine
+
+ """
+ def __init__(self, host):
+ # TODO(pstew): If we could depend on the host having the "ip" command
+ # we would just be able to do this:
+ #
+ # HostRoute.__init__(self, host)
+ #
+ # but alas, we can't depend on this, so we fake it by creating a
+ # socket and figuring out what local address we bound to if we
+ # connected to the client
+ sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ sock.connect((host, 22)) # NB: Port doesn't matter
+ self.route_info = { 'src': sock.getsockname()[0] }
+
+ def run_command(self, args):
+ return subprocess.Popen(args, stdout=subprocess.PIPE).communicate()[0]
+
+class RemoteHostRoute(HostRoute):
+ """
+ Remote Host Route: Retrieve host route for a remote (DUT, server) machine
+
+ """
+ def __init__(self, remote, host):
+ self.remote = remote
+ HostRoute.__init__(self, host)
+
+ def run_command(self, args):
+ return self.remote.run(' '.join(args)).stdout
« no previous file with comments | « no previous file | server/site_wifitest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698