def test_local_testing_read(self, *_: Any) -> None: gateway = Gateway(operation=RX, local_test=True, dd_sockets=False, qubes=False) self.assertEqual(gateway.read(), b'data') with self.assertRaises(SystemExit): gateway.read()
def test_serial_uninitialized_socket_interface_for_read_raises_critical_error(self, *_) -> None: # Setup gateway = Gateway(operation=RX, local_test=True, dd_sockets=False, qubes=False) gateway.rx_socket = None # Test with self.assertRaises(SystemExit): gateway.read()
def test_qubes_read_file(self, *_: Any) -> None: # Setup ensure_dir(f"{QUBES_BUFFER_INCOMING_DIR}/") def packet_delayer() -> None: """Create packets one at a time.""" time.sleep(0.1) with open(f"{QUBES_BUFFER_INCOMING_DIR}/{QUBES_BUFFER_INCOMING_PACKET}.invalid", 'wb+') as fp: fp.write(base64.b85encode(b'data')) time.sleep(0.1) with open(f"{QUBES_BUFFER_INCOMING_DIR}/{QUBES_BUFFER_INCOMING_PACKET}.0", 'wb+') as fp: fp.write(base64.b85encode(b'data')) threading.Thread(target=packet_delayer).start() gateway = Gateway(operation=RX, local_test=False, dd_sockets=False, qubes=True) # Test self.assert_se("No packet was available.", gateway.read) time.sleep(0.3) self.assertIsInstance(gateway, Gateway) self.assertEqual(gateway.read(), b'data') # Test invalid packet content is handled with open(f"{QUBES_BUFFER_INCOMING_DIR}/{QUBES_BUFFER_INCOMING_PACKET}.1", 'wb+') as f: f.write(os.urandom(32)) self.assert_se("Error: Received packet had invalid Base85 encoding.", gateway.read)
def test_read_serial(self, *_) -> None: gateway = Gateway(operation=RX, local_test=False, dd_sockets=False, qubes=False) data = gateway.read() self.assertEqual(data, b"12")
class TestMultiProcessingServer(unittest.TestCase): class MockMultiprocessingListener(object): def __init__(self, args): self.hostname = args[0] self.socket_no = args[1] self.written = [] def accept(self): class Interface(object): def __init__(self, hostname, socket_no): self.hostname = hostname self.socket_no = socket_no @staticmethod def recv(): return b'mock_message' return Interface(self.hostname, self.socket_no) def setUp(self): self.settings = Settings(software_operation=RX, local_testing_mode=True) multiprocessing.connection.Listener = TestMultiProcessingServer.MockMultiprocessingListener self.gateway = Gateway(self.settings) def test_listener(self): self.assertEqual(self.gateway.interface.socket_no, RXM_LISTEN_SOCKET) self.assertEqual(self.gateway.interface.hostname, 'localhost') self.assertEqual(self.gateway.read(), b'mock_message')
def test_qubes_socket_server_raises_critical_error_if_interface_is_not_initialized(self, *_: Any) -> None: # Setup gateway = Gateway(operation=RX, local_test=False, dd_sockets=False, qubes=True) gateway.rxq_socket = None # Test with self.assertRaises(SystemExit): self.assertEqual(gateway.read(), b'data')
class TestGatewaySerial(unittest.TestCase): class MockSerial(object): def __init__(self, iface_name, baudrate, timeout): self.iface = iface_name self.baudrate = baudrate self.timeout = timeout self.written = [] output_list = [b'', bytearray(b'a'), bytearray(b'b'), b''] self.gen = iter(output_list) def write(self, output): self.written.append(output) def read(self, _): time.sleep(0.1) return next(self.gen) def flush(self): pass def setUp(self): self.settings = Settings(session_usb_serial_adapter=True) self.o_listdir = os.listdir self.o_serial = serial.Serial input_list = ['ttyUSB0', 'ttyS0', 'ttyUSB0', 'ttyS0', 'ttyUSB0'] gen = iter(input_list) os.listdir = lambda _: [next(gen)] serial.Serial = TestGatewaySerial.MockSerial self.gateway = Gateway(self.settings) def tearDown(self): os.listdir = self.o_listdir serial.Serial = self.o_serial def test_serial(self): self.assertIsNone(self.gateway.write(b'test')) self.assertEqual(self.gateway.search_serial_interface(), '/dev/ttyUSB0') self.assertEqual(self.gateway.read(), b'ab') self.gateway.settings.session_usb_serial_adapter = False self.assertEqual(self.gateway.search_serial_interface(), '/dev/ttyS0') with self.assertRaises(SystemExit): self.gateway.search_serial_interface()
def test_qubes_socket_server(self, *_: Any) -> None: gateway = Gateway(operation=RX, local_test=False, dd_sockets=False, qubes=True) self.assertIsInstance(gateway, Gateway) self.assertEqual(gateway.read(), b'data')