Add infrastructure for Interactive tests
Inspired by the SemiAuto tests used by the test team, this uses a
similar approach but wrapped in an XML-RPC server deployed to the
client.
BUG=chromium:256771
TEST=server test that uses interactive_client
Change-Id: I8420a2a2ed6fc031b97044d6bbcf32e50cbcf4a4
Reviewed-on: https://gerrit.chromium.org/gerrit/63640
Reviewed-by: Simran Basi <sbasi@chromium.org>
Commit-Queue: Scott James Remnant <keybuk@chromium.org>
Tested-by: Scott James Remnant <keybuk@chromium.org>
diff --git a/server/cros/bluetooth/bluetooth_client.py b/server/cros/bluetooth/bluetooth_client.py
index 4e6ae4b..38d8a9b 100644
--- a/server/cros/bluetooth/bluetooth_client.py
+++ b/server/cros/bluetooth/bluetooth_client.py
@@ -2,30 +2,28 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import logging
-from autotest_lib.client.common_lib import error
from autotest_lib.client.cros import constants
from autotest_lib.server import autotest
class BluetoothClient(object):
- """BluetoothClient is a thin layer of logic over a remote DUT."""
+ """BluetoothClient is a thin layer of logic over a remote DUT.
+
+ The Autotest host object representing the remote DUT, passed to this
+ class on initialization, can be accessed from its host property.
+
+ """
XMLRPC_BRINGUP_TIMEOUT_SECONDS = 60
- @property
- def host(self):
- """@return host object representing the remote DUT."""
- return self._host
-
def __init__(self, client_host):
"""Construct a BluetoothClient.
- @param client_host host object representing a remote host.
+ @param client_host: host object representing a remote host.
"""
- self._host = client_host
+ self.host = client_host
# Make sure the client library is on the device so that the proxy code
# is there when we try to call it.
client_at = autotest.Autotest(self.host)
@@ -40,6 +38,7 @@
constants.BLUETOOTH_CLIENT_XMLRPC_SERVER_READY_METHOD,
timeout_seconds=self.XMLRPC_BRINGUP_TIMEOUT_SECONDS)
+
def reset_on(self):
"""Reset the adapter and settings and power up the adapter.
@@ -48,6 +47,7 @@
"""
return self._proxy.reset_on()
+
def reset_off(self):
"""Reset the adapter and settings, leave the adapter powered off.
@@ -56,39 +56,43 @@
"""
return self._proxy.reset_off()
+
def set_powered(self, powered):
"""Set the adapter power state.
- @param powered adapter power state to set (True or False).
+ @param powered: adapter power state to set (True or False).
@return True on success, False otherwise.
"""
return self._proxy.set_powered(powered)
+
def set_discoverable(self, discoverable):
"""Set the adapter discoverable state.
- @param powered adapter discoverable state to set (True or False).
+ @param discoverable: adapter discoverable state to set (True or False).
@return True on success, False otherwise.
"""
return self._proxy.set_discoverable(discoverable)
+
def set_pairable(self, pairable):
"""Set the adapter pairable state.
- @param powered adapter pairable state to set (True or False).
+ @param pairable: adapter pairable state to set (True or False).
@return True on success, False otherwise.
"""
return self._proxy.set_pairable(pairable)
+
def close(self):
"""Tear down state associated with the client."""
# Leave the adapter powered off, but don't do a full reset.
self._proxy.set_powered(False)
# This kills the RPC server.
- self._host.close()
+ self.host.close()