| # 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. |
| |
| """Module containing methods and classes to interact with a devserver instance. |
| """ |
| |
| import os |
| import threading |
| |
| import cros_build_lib as cros_lib |
| |
| def GenerateUpdateId(target, src, key): |
| """Returns a simple representation id of target and src paths.""" |
| update_id = target |
| if src: update_id = '->'.join([src, update_id]) |
| if key: update_id = '+'.join([update_id, key]) |
| return update_id |
| |
| class DevServerWrapper(threading.Thread): |
| """A Simple wrapper around a dev server instance.""" |
| |
| def __init__(self, test_root): |
| self.proc = None |
| self.test_root = test_root |
| threading.Thread.__init__(self) |
| |
| def run(self): |
| # Kill previous running instance of devserver if it exists. |
| cros_lib.RunCommand(['sudo', 'pkill', '-f', 'devserver.py'], error_ok=True, |
| print_cmd=False) |
| cros_lib.RunCommand(['sudo', |
| 'start_devserver', |
| '--archive_dir=./static', |
| '--client_prefix=ChromeOSUpdateEngine', |
| '--production', |
| ], enter_chroot=True, print_cmd=False, |
| log_to_file=os.path.join(self.test_root, |
| 'dev_server.log'), |
| cwd=cros_lib.GetCrosUtilsPath()) |
| |
| def Stop(self): |
| """Kills the devserver instance.""" |
| cros_lib.RunCommand(['sudo', 'pkill', '-f', 'devserver.py'], error_ok=True, |
| print_cmd=False) |
| |
| @classmethod |
| def GetDevServerURL(cls, port, sub_dir): |
| """Returns the dev server url for a given port and sub directory.""" |
| ip_addr = cros_lib.GetIPAddress() |
| if not port: port = 8080 |
| url = 'http://%(ip)s:%(port)s/%(dir)s' % {'ip': ip_addr, |
| 'port': str(port), |
| 'dir': sub_dir} |
| return url |