blob: 85f6b516ec436ed50557acc4dd68b87aaba95697 [file] [log] [blame]
"""gRPC mock target for testing purposes.
Example MH testbed config for Hostside:
- name: GrpcBtTargetStub-1
devices:
- type: MiscTestbedSubDevice
dimensions:
mobly_type: DerivedBtDevice
properties:
ModuleName: grpc_bt_target_mock
ClassName: GrpcBtTargetMock
Params:
config:
mac_address: FE:ED:BE:EF:CA:FE
dimensions:
device: GrpcBtTargetStub
"""
import subprocess
from absl import flags
from absl import logging
import grpc
# Internal import
from blueberry.grpc.proto import blueberry_device_controller_pb2
from blueberry.grpc.proto import blueberry_device_controller_pb2_grpc
FLAGS = flags.FLAGS
class GrpcBtTargetMock(object):
"""BT Mock Target for testing the GRPC interface."""
def __init__(self, config):
"""Initialize GRPC object."""
super(GrpcBtTargetMock, self).__init__()
self.mac_address = config['mac_address']
def __del__(self):
self.server_proc.terminate()
del self.channel_creds
del self.channel
del self.stub
def setup(self):
"""Setup the gRPC server that the target mock will respond to."""
server_path = self.get_user_params()['mh_files']['grpc_server'][0]
logging.info('Start gRPC server: %s', server_path)
self.server_proc = subprocess.Popen([server_path],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
bufsize=0)
self.channel_creds = loas2.loas2_channel_credentials()
self.channel = grpc.secure_channel(FLAGS.server, self.channel_creds)
grpc.channel_ready_future(self.channel).result()
self.stub = blueberry_device_controller_pb2_grpc.BlueberryDeviceControllerStub(
self.channel)
def activate_pairing_mode(self):
logging.info('activate pairing mode TO BE IMPLEMENTED')
request = blueberry_device_controller_pb2.DiscoverableMode(mode=True)
try:
response = self.stub.SetDiscoverableMode(request)
logging.info('set discoverageble response: %s', response)
return 0
except grpc.RpcError as rpc_error:
print(rpc_error)
return -1
def factory_reset_bluetooth(self):
logging.info('factory reset TO BE IMPLEMENTED')
def get_bluetooth_mac_address(self):
logging.info('mac_address: %s', self.mac_address)
return self.mac_address