| # Copyright 2014 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 dbus |
| import time |
| |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.cros import dbus_util |
| |
| MANAGER_INTERFACE = 'org.chromium.Buffet.Manager' |
| SERVICE_NAME = 'org.chromium.Buffet' |
| MANAGER_OBJECT_PATH = '/org/chromium/Buffet/Manager' |
| COMMAND_INTERFACE = 'org.chromium.Buffet.Command' |
| MANAGER_INTERFACE = 'org.chromium.Buffet.Manager' |
| OBJECT_MANAGER_PATH = '/org/chromium/Buffet' |
| DBUS_OBJECT_MANAGER_INTERFACE = 'org.freedesktop.DBus.ObjectManager' |
| DBUS_PROPERTY_INTERFACE = 'org.freedesktop.DBus.Properties' |
| |
| TEST_MESSAGE = 'Hello world!' |
| |
| class BuffetDBusHelper(object): |
| """Delegate representing an instance of buffet.""" |
| |
| def __init__(self): |
| """Construct a BuffetDBusHelper. |
| |
| You should probably use get_helper() above rather than call this |
| directly. |
| |
| @param manager_proxy: DBus proxy for the Manager object. |
| |
| """ |
| start_time = time.time() |
| while time.time() - start_time < 10: |
| try: |
| self._init() |
| if self.manager.TestMethod(TEST_MESSAGE) == TEST_MESSAGE: |
| return |
| except: |
| pass |
| time.sleep(0.5) |
| raise error.TestFail('Buffet failed to restart in time.') |
| |
| |
| def _init(self): |
| """Init members. |
| |
| """ |
| bus = dbus.SystemBus() |
| manager_proxy = bus.get_object(SERVICE_NAME, MANAGER_OBJECT_PATH) |
| self.manager = dbus.Interface(manager_proxy, MANAGER_INTERFACE) |
| self.properties = dbus.Interface(manager_proxy, DBUS_PROPERTY_INTERFACE) |
| self.object_manager = dbus.Interface( |
| bus.get_object(SERVICE_NAME, OBJECT_MANAGER_PATH), |
| dbus_interface=DBUS_OBJECT_MANAGER_INTERFACE) |
| |
| |
| def __getattr__(self, name): |
| components = name.split('_') |
| name = ''.join(x.title() for x in components) |
| dbus_value = self.properties.Get(MANAGER_INTERFACE, name) |
| return dbus_util.dbus2primitive(dbus_value) |