def __init__(self, grpc_port, grpc_root_server_port, signal_port, cmd, label, serial_number): super().__init__(grpc_port, grpc_root_server_port, signal_port, cmd, label, ACTS_CONTROLLER_CONFIG_NAME, serial_number) # Facade stubs self.rootservice = facade_rootservice_pb2_grpc.RootFacadeStub( self.grpc_root_server_channel) self.hal = hal_facade_pb2_grpc.HciHalFacadeStub(self.grpc_channel) self.controller_read_only_property = facade_rootservice_pb2_grpc.ReadOnlyPropertyStub( self.grpc_channel) self.hci = hci_facade_pb2_grpc.HciLayerFacadeStub(self.grpc_channel) self.hci.register_for_events = self.__register_for_hci_events self.hci.new_event_stream = lambda: EventStream(self.hci.FetchEvents(empty_proto.Empty())) self.hci.send_command_with_complete = self.__send_hci_command_with_complete self.hci.send_command_with_status = self.__send_hci_command_with_status self.l2cap = l2cap_facade_pb2_grpc.L2capClassicModuleFacadeStub( self.grpc_channel) self.hci_acl_manager = acl_manager_facade_pb2_grpc.AclManagerFacadeStub( self.grpc_channel) self.hci_le_acl_manager = le_acl_manager_facade_pb2_grpc.LeAclManagerFacadeStub( self.grpc_channel) self.hci_controller = controller_facade_pb2_grpc.ControllerFacadeStub( self.grpc_channel) self.hci_controller.GetMacAddressSimple = lambda : self.hci_controller.GetMacAddress(empty_proto.Empty()).address self.hci_controller.GetLocalNameSimple = lambda : self.hci_controller.GetLocalName(empty_proto.Empty()).name self.hci_le_advertising_manager = le_advertising_manager_facade_pb2_grpc.LeAdvertisingManagerFacadeStub( self.grpc_channel) self.hci_le_scanning_manager = le_scanning_manager_facade_pb2_grpc.LeScanningManagerFacadeStub( self.grpc_channel) self.neighbor = neighbor_facade_pb2_grpc.NeighborFacadeStub( self.grpc_channel) self.security = security_facade_pb2_grpc.SecurityModuleFacadeStub( self.grpc_channel)
def __init__(self, grpc_port, grpc_root_server_port, signal_port, cmd, label, serial_number): super().__init__(grpc_port, grpc_root_server_port, signal_port, cmd, label, ACTS_CONTROLLER_CONFIG_NAME, serial_number) # Facade stubs self.rootservice = facade_rootservice_pb2_grpc.RootFacadeStub( self.grpc_root_server_channel) self.hal = hal_facade_pb2_grpc.HciHalFacadeStub(self.grpc_channel) self.controller_read_only_property = facade_rootservice_pb2_grpc.ReadOnlyPropertyStub( self.grpc_channel) self.hci = hci_facade_pb2_grpc.HciLayerFacadeStub(self.grpc_channel) self.l2cap = l2cap_facade_pb2_grpc.L2capClassicModuleFacadeStub( self.grpc_channel) self.hci_acl_manager = acl_manager_facade_pb2_grpc.AclManagerFacadeStub( self.grpc_channel) self.hci_le_acl_manager = le_acl_manager_facade_pb2_grpc.LeAclManagerFacadeStub( self.grpc_channel) self.hci_controller = controller_facade_pb2_grpc.ControllerFacadeStub( self.grpc_channel) self.hci_le_advertising_manager = le_advertising_manager_facade_pb2_grpc.LeAdvertisingManagerFacadeStub( self.grpc_channel) self.hci_le_scanning_manager = le_scanning_manager_facade_pb2_grpc.LeScanningManagerFacadeStub( self.grpc_channel) self.neighbor = neighbor_facade_pb2_grpc.NeighborFacadeStub( self.grpc_channel) self.security = security_facade_pb2_grpc.SecurityModuleFacadeStub( self.grpc_channel)
def setup(self): """Set up this device for test, must run before using this device - After calling this, teardown() must be called when test finishes - Should be executed after children classes' setup() methods :return: """ # Ensure signal port is available # signal port is the only port that always listen on the host machine asserts.assert_true( make_ports_available([self.signal_port]), "[%s] Failed to make signal port available" % self.label) # Start backing process with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as signal_socket: # Setup signaling socket signal_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) signal_socket.bind(("localhost", self.signal_port)) signal_socket.listen(1) signal_socket.settimeout(300) # 5 minute timeout for blocking socket operations # Start backing process logging.debug("Running %s" % " ".join(self.cmd)) self.backing_process = subprocess.Popen( self.cmd, cwd=get_gd_root(), env=self.environment, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True) asserts.assert_true(self.backing_process, msg="Cannot start backing_process at " + " ".join(self.cmd)) asserts.assert_true( is_subprocess_alive(self.backing_process), msg="backing_process stopped immediately after running " + " ".join(self.cmd)) # Wait for process to be ready logging.debug("Waiting for backing_process accept.") signal_socket.accept() self.backing_process_logger = AsyncSubprocessLogger( self.backing_process, [self.backing_process_log_path], log_to_stdout=self.verbose_mode, tag=self.label, color=self.terminal_color) # Setup gRPC management channels self.grpc_root_server_channel = grpc.insecure_channel("localhost:%d" % self.grpc_root_server_port) self.grpc_channel = grpc.insecure_channel("localhost:%d" % self.grpc_port) if self.verbose_mode: self.grpc_channel = grpc.intercept_channel(self.grpc_channel, LoggingClientInterceptor(self.label)) # Establish services from facades self.rootservice = facade_rootservice_pb2_grpc.RootFacadeStub(self.grpc_root_server_channel) self.hal = hal_facade_pb2_grpc.HciHalFacadeStub(self.grpc_channel) self.controller_read_only_property = facade_rootservice_pb2_grpc.ReadOnlyPropertyStub(self.grpc_channel) self.hci = hci_facade_pb2_grpc.HciFacadeStub(self.grpc_channel) self.l2cap = l2cap_facade_pb2_grpc.L2capClassicModuleFacadeStub(self.grpc_channel) self.l2cap_le = l2cap_le_facade_pb2_grpc.L2capLeModuleFacadeStub(self.grpc_channel) self.iso = iso_facade_pb2_grpc.IsoModuleFacadeStub(self.grpc_channel) self.hci_acl_manager = acl_manager_facade_pb2_grpc.AclManagerFacadeStub(self.grpc_channel) self.hci_le_acl_manager = le_acl_manager_facade_pb2_grpc.LeAclManagerFacadeStub(self.grpc_channel) self.hci_le_initiator_address = le_initiator_address_facade_pb2_grpc.LeInitiatorAddressFacadeStub( self.grpc_channel) self.hci_controller = controller_facade_pb2_grpc.ControllerFacadeStub(self.grpc_channel) self.hci_controller.GetMacAddressSimple = lambda: self.hci_controller.GetMacAddress(empty_proto.Empty()).address self.hci_controller.GetLocalNameSimple = lambda: self.hci_controller.GetLocalName(empty_proto.Empty()).name self.hci_le_advertising_manager = le_advertising_manager_facade_pb2_grpc.LeAdvertisingManagerFacadeStub( self.grpc_channel) self.hci_le_scanning_manager = le_scanning_manager_facade_pb2_grpc.LeScanningManagerFacadeStub( self.grpc_channel) self.neighbor = neighbor_facade_pb2_grpc.NeighborFacadeStub(self.grpc_channel) self.security = security_facade_pb2_grpc.SecurityModuleFacadeStub(self.grpc_channel) self.shim = shim_facade_pb2_grpc.ShimFacadeStub(self.grpc_channel)
def setup(self): """Set up this device for test, must run before using this device - After calling this, teardown() must be called when test finishes - Should be executed after children classes' setup() methods :return: """ # Ensure signal port is available # signal port is the only port that always listen on the host machine asserts.assert_true( make_ports_available([self.signal_port]), "[%s] Failed to make signal port available" % self.label) # Start backing process with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as signal_socket: # Setup signaling socket signal_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) signal_socket.bind(("localhost", self.signal_port)) signal_socket.listen(1) # Start backing process self.backing_process_logs = open(self.backing_process_log_path, 'w') self.backing_process = subprocess.Popen( self.cmd, cwd=get_gd_root(), env=self.environment, stdout=self.backing_process_logs, stderr=self.backing_process_logs) asserts.assert_true( self.backing_process, msg="Cannot start backing_process at " + " ".join(self.cmd)) asserts.assert_true( is_subprocess_alive(self.backing_process), msg="backing_process stopped immediately after running " + " ".join(self.cmd)) # Wait for process to be ready signal_socket.accept() # Setup gRPC management channels self.grpc_root_server_channel = grpc.insecure_channel( "localhost:%d" % self.grpc_root_server_port) self.grpc_channel = grpc.insecure_channel( "localhost:%d" % self.grpc_port) # Establish services from facades self.rootservice = facade_rootservice_pb2_grpc.RootFacadeStub( self.grpc_root_server_channel) self.hal = hal_facade_pb2_grpc.HciHalFacadeStub(self.grpc_channel) self.controller_read_only_property = facade_rootservice_pb2_grpc.ReadOnlyPropertyStub( self.grpc_channel) self.hci = hci_facade_pb2_grpc.HciLayerFacadeStub(self.grpc_channel) self.l2cap = l2cap_facade_pb2_grpc.L2capClassicModuleFacadeStub( self.grpc_channel) self.l2cap_le = l2cap_le_facade_pb2_grpc.L2capLeModuleFacadeStub( self.grpc_channel) self.hci_acl_manager = acl_manager_facade_pb2_grpc.AclManagerFacadeStub( self.grpc_channel) self.hci_le_acl_manager = le_acl_manager_facade_pb2_grpc.LeAclManagerFacadeStub( self.grpc_channel) self.hci_controller = controller_facade_pb2_grpc.ControllerFacadeStub( self.grpc_channel) self.hci_controller.GetMacAddressSimple = lambda: self.hci_controller.GetMacAddress( empty_proto.Empty()).address self.hci_controller.GetLocalNameSimple = lambda: self.hci_controller.GetLocalName( empty_proto.Empty()).name self.hci_le_advertising_manager = le_advertising_manager_facade_pb2_grpc.LeAdvertisingManagerFacadeStub( self.grpc_channel) self.hci_le_scanning_manager = le_scanning_manager_facade_pb2_grpc.LeScanningManagerFacadeStub( self.grpc_channel) self.neighbor = neighbor_facade_pb2_grpc.NeighborFacadeStub( self.grpc_channel) self.security = security_facade_pb2_grpc.SecurityModuleFacadeStub( self.grpc_channel)