Exemplo n.º 1
0
 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()
Exemplo n.º 2
0
    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()
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
 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")
Exemplo n.º 5
0
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')
Exemplo n.º 6
0
    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')
Exemplo n.º 7
0
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()
Exemplo n.º 8
0
 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')