| # Copyright 2015 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 time |
| |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.common_lib import utils |
| from autotest_lib.client.common_lib.cros import dbus_send |
| |
| |
| SERVICE_NAME = 'org.chromium.peerd' |
| |
| DBUS_PATH_MANAGER = '/org/chromium/peerd/Manager' |
| DBUS_PATH_SELF = '/org/chromium/peerd/Self' |
| |
| DBUS_INTERFACE_MANAGER = 'org.chromium.peerd.Manager' |
| DBUS_INTERFACE_PEER = 'org.chromium.peerd.Peer' |
| DBUS_INTERFACE_SERVICE = 'org.chromium.peerd.Service' |
| |
| OBJECT_MANAGER_PATH = '/org/chromium/peerd' |
| |
| SERVICE_PROPERTY_SERVICE_ID = 'ServiceId' |
| |
| |
| def confirm_peerd_up(service_name=SERVICE_NAME, timeout_seconds=10, host=None): |
| """Confirm that an instance of peerd is running. |
| |
| @param service_name: string name of DBus connection to look for peerd on. |
| Defaults to the well known peerd bus name. |
| @param timeout_seconds: number of seconds to wait for peerd to answer |
| queries. |
| @param host: Host object if peerd is running on a remote host. |
| |
| """ |
| start_time = time.time() |
| while time.time() - start_time < timeout_seconds: |
| result = dbus_send.dbus_send( |
| service_name, DBUS_INTERFACE_MANAGER, DBUS_PATH_MANAGER, |
| 'Ping', host=host, tolerate_failures=True) |
| if result is not None and result.response == 'Hello world!': |
| return |
| time.sleep(0.5) |
| raise error.TestFail('Timed out before peerd at %s started.' % service_name) |
| |
| |
| class PeerdConfig(object): |
| """An object that knows how to restart peerd in various configurations.""" |
| |
| def __init__(self, mdns_prefix=None, verbosity_level=None): |
| """Construct a peerd configuration. |
| |
| @param verbosity_level: int level of log verbosity from peerd (e.g. 0 |
| will log INFO level, 3 is verbosity level 3). |
| @param mdns_prefix: string prefix for mDNS records. Will be ignored if |
| using that prefix causes name conflicts. |
| |
| """ |
| self.mdns_prefix = mdns_prefix |
| self.verbosity_level = verbosity_level |
| |
| |
| def restart_with_config(self, host=None, timeout_seconds=10): |
| """Restart peerd with this config. |
| |
| @param host: Host object if peerd is running on a remote host. |
| @param timeout_seconds: number of seconds to wait for peerd to start. |
| Pass None to return without confirming peerd startup. |
| |
| """ |
| run = utils.run if host is None else host.run |
| flag_list = [] |
| if self.verbosity_level is not None: |
| flag_list.append('PEERD_LOG_LEVEL=%d' % self.verbosity_level) |
| if self.mdns_prefix is not None: |
| flag_list.append('PEERD_INITIAL_MDNS_PREFIX=%s' % self.mdns_prefix) |
| run('stop peerd', ignore_status=True) |
| run('start peerd %s' % ' '.join(flag_list)) |
| if timeout_seconds is None: |
| return |
| confirm_peerd_up(service_name=SERVICE_NAME, |
| timeout_seconds=timeout_seconds, |
| host=host) |