예제 #1
0
    async def test_non_existent(self):
        c1, c2 = pipe_bidi()
        srv = MockReqRespServer(c1)
        cli = MockReqRespClient(c2)

        async with srv, cli:
            with self.assertRaises(CallFailed):
                await wait_for(cli.non_existent(), 5)
예제 #2
0
    async def test_echo(self):
        c1, c2 = pipe_bidi()
        srv = MockReqRespServer(c1)
        cli = MockReqRespClient(c2)

        async with srv, cli:
            result: Message = await wait_for(cli.echo(), 5)
            self.assertEqual(Message({}, []), result)
    async def test_remote_clip_map(self):
        c_client, c_server = pipe_bidi()

        rs = MockScript({})
        rss = RemoteScriptServer(rs, c_server)
        rsc = RemoteScript(c_client)

        async with timeout_context(rss, 10), timeout_context(rsc, 10):
            clips = await wait_for(rsc.retrieve_clips(), 10)
            self.assertEqual(len(clips), 1)
            self.assertEqual(list(clips), ["test"])
예제 #4
0
    async def test_clip_metadata_transmit(self):
        c_client, c_server = pipe_bidi()
        mock_clip = MockClip()
        async with mock_clip:
            server = ClipServer(mock_clip, c_server)
            client = RemoteClip(c_client)

            # Make sure the server is acquired first, as otherwise
            # there will be a deadlock.
            async with server, client:
                self.assertEqual(await wait_for(client.get_metadata(), 5), {"id": id(mock_clip)})
예제 #5
0
    async def test_clip_length(self):
        c_client, c_server = pipe_bidi()
        mock_clip = MockClip()
        async with mock_clip:
            server = ClipServer(mock_clip, c_server)
            client = RemoteClip(c_client)

            # Make sure the server is acquired first, as otherwise
            # there will be a deadlock.
            async with server, client:
                self.assertEqual(len(client), len(mock_clip))
예제 #6
0
    async def test_invalid_packet__unset_method(self):
        c1, c2 = pipe_bidi()
        srv = MockReqRespServer(c1)
        async with srv, c2:
            await c2.write(Message({'id': 0, 'type': 'request', 'params': {}}))
            msg: Message = await wait_for(c2.read(), 5)

            self.assertIsInstance(msg.values, dict)
            self.assertIn('type', msg.values)
            self.assertEqual('error', msg.values['type'])
            self.assertIn('id', msg.values)
            self.assertEqual(0, msg.values['id'])
            self.assertIn('error', msg.values)
    async def test_get_script(self):
        c_client, c_server = pipe_bidi()

        ms = MockScript({"id": id(self)})
        sp = SingleScriptProvider(ms)

        rsps = RemoteScriptProviderServer(sp, c_server)
        rspc = RemoteScriptProvider(c_client)

        async with timeout_context(rsps, 10), timeout_context(rspc, 10):
            rsc = await rspc.get()
            async with timeout_context(rsc, 10):
                self.assertEqual(await wait_for(rsc.get_config("id"), 10),
                                 id(self))
예제 #8
0
    async def test_clip_frame_size(self):
        c_client, c_server = pipe_bidi()
        mock_frame = MockFrame()
        mock_clip = SingleFrameMockClip(mock_frame)
        async with mock_clip, mock_frame:
            server = ClipServer(mock_clip, c_server)
            client = RemoteClip(c_client)

            # Make sure the server is acquired first, as otherwise
            # there will be a deadlock.
            async with timeout_context(server, 10), timeout_context(client, 10):
                remote_frame = client[0]
                async with remote_frame:
                    self.assertEqual(remote_frame.size, mock_frame.size)
예제 #9
0
    async def test_clip_frame_render(self):
        c_client, c_server = pipe_bidi()
        mock_clip = MockClip()
        async with mock_clip:
            server = ClipServer(mock_clip, c_server)
            client = RemoteClip(c_client)

            # Make sure the server is acquired first, as otherwise
            # there will be a deadlock.
            async with timeout_context(server, 10), timeout_context(client, 10):
                remote_frame = client[0]
                async with remote_frame:
                    data = bytearray(remote_frame.native_format.get_plane_size(0, remote_frame.size))
                    self.assertEqual(await remote_frame.render_into(data, 0, remote_frame.native_format, 0), 0)
    async def test_multiplexer_reject(self):
        c_faked_networking, c_multiplexed = pipe_bidi()
        muliplexer = Multiplexer(c_multiplexed)
        async with c_faked_networking, muliplexer:
            await c_faked_networking.write(
                Message({
                    'target': 'non-existent',
                    'payload': {}
                }))
            msg: Message = await wait_for(c_faked_networking.read(), 5)

        self.assertIsInstance(msg.values, dict)
        self.assertIn('type', msg.values)
        self.assertEqual('close', msg.values['type'])
예제 #11
0
    async def test_clip_frame_can_render(self):
        c_client, c_server = pipe_bidi()
        mock_clip = MockClip()
        async with mock_clip:
            server = ClipServer(mock_clip, c_server)
            client = RemoteClip(c_client)

            # Make sure the server is acquired first, as otherwise
            # there will be a deadlock.
            async with timeout_context(server, 10), timeout_context(client, 10):
                remote_frame = client[0]
                async with remote_frame:
                    self.assertFalse(await remote_frame.can_render(GRAY8))
                    self.assertTrue(await remote_frame.can_render(RGB24))
예제 #12
0
    async def test_clip_frame_metadata(self):
        c_client, c_server = pipe_bidi()
        mock_frame = MockFrame()
        mock_clip = SingleFrameMockClip(mock_frame)
        async with mock_clip, mock_frame:
            server = ClipServer(mock_clip, c_server)
            client = RemoteClip(c_client)

            # Make sure the server is acquired first, as otherwise
            # there will be a deadlock.
            async with timeout_context(server, 10), timeout_context(client, 10):
                remote_frame = client[0]
                async with remote_frame:
                    metadata = await wait_for(remote_frame.get_metadata(), 5)
                    self.assertEqual(metadata, {"id": id(mock_frame)})
    async def test_multiplexer_illegal(self):
        c_faked_networking, c_multiplexed = pipe_bidi()
        muliplexer = Multiplexer(c_multiplexed)
        async with c_faked_networking, muliplexer:
            async with muliplexer.connect('existing') as f:
                await c_faked_networking.write(
                    Message({
                        'target': 'existing',
                        'type': 'message'
                    }))
                msg: Message = await wait_for(c_faked_networking.read(), 5)

        self.assertIsInstance(msg.values, dict)
        self.assertIn('type', msg.values)
        self.assertEqual('illegal', msg.values['type'])
    async def test_multiplexer_forward_close(self):
        c_m1, c_m2 = pipe_bidi()
        m1 = Multiplexer(c_m1)
        m2 = Multiplexer(c_m2)

        async with m1, m2:
            m1_ch = m1.connect('channel')
            m2_ch = m2.connect('channel')

            async with m1_ch, m2_ch:
                await m1_ch.close()
                self.assertTrue(m1_ch.closed)

                await wait_for(m2_ch.read(), 5)
                self.assertTrue(m2_ch.closed)
    async def test_multiplexer_delivered(self):
        value = {'v': 'test'}

        c_faked_networking, c_multiplexed = pipe_bidi()
        muliplexer = Multiplexer(c_multiplexed)
        async with c_faked_networking, muliplexer:
            async with muliplexer.connect('existing') as f:
                await c_faked_networking.write(
                    Message({
                        'target': 'existing',
                        'type': 'message',
                        'payload': value
                    }))
                msg: Message = await wait_for(f.read(), 5)

        self.assertIs(value, msg.values)
    async def test_remote_script_run(self):
        c_client, c_server = pipe_bidi()

        rs = MockScript({})
        rss = RemoteScriptServer(rs, c_server)
        rsc = RemoteScript(c_client)

        async with timeout_context(rss, 10), timeout_context(rsc, 10):
            await wait_for(rsc.run("test-code-string"), 10)
            self.assertEqual(
                await wait_for(rsc.get_config("last-command"), 10),
                "test-code-string")

            await wait_for(rsc.run(b"test-code-binary"), 10)
            self.assertEqual(
                await wait_for(rsc.get_config("last-command"), 10),
                b"test-code-binary")
    async def test_multiplexer_send(self):
        values = {}

        c_faked_networking, c_multiplexed = pipe_bidi()
        muliplexer = Multiplexer(c_multiplexed)
        async with c_faked_networking, muliplexer:
            async with muliplexer.connect('existing') as f:
                await f.write(Message(values, []))
                msg: Message = await wait_for(c_faked_networking.read(), 5)

        self.assertIsInstance(msg.values, dict)
        self.assertIn('target', msg.values)
        self.assertEqual('existing', msg.values['target'])
        self.assertIn('type', msg.values)
        self.assertEqual('message', msg.values['type'])
        self.assertIn('payload', msg.values)
        self.assertIs(values, msg.values['payload'])
    async def test_bidi_multiplexer_comm(self):
        c_m1, c_m2 = pipe_bidi()
        m1 = Multiplexer(c_m1)
        m2 = Multiplexer(c_m2)

        async with m1, m2:
            m1_ch = m1.connect('channel')
            m2_ch = m2.connect('channel')

            async with m1_ch, m2_ch:
                await m1_ch.write(Message({'someval': 123456}))
                msg: Message = await m2_ch.read()

                self.assertIsInstance(msg.values, dict)
                self.assertIn('someval', msg.values)
                self.assertEqual(123456, msg.values['someval'])

            self.assertTrue(m1_ch.closed)
            self.assertTrue(m2_ch.closed)
    async def test_remote_script_config(self):
        c_client, c_server = pipe_bidi()

        rs = MockScript({
            "test-int": 1,
            "test-bytes": b"abc",
            "test-null": None,
            "test-string": "foo",
            "test-float": 3.1415926
        })
        unset = object()

        rss = RemoteScriptServer(rs, c_server)
        rsc = RemoteScript(c_client)

        async with timeout_context(rss, 10), timeout_context(rsc, 10):
            self.assertEqual(await wait_for(rsc.list_config(), 10), [
                "test-int", "test-bytes", "test-null", "test-string",
                "test-float"
            ])
            self.assertEqual(await wait_for(rsc.get_config("test-int"), 10), 1)
            self.assertEqual(await wait_for(rsc.get_config("test-bytes"), 10),
                             b"abc")
            self.assertIsNone(await wait_for(rsc.get_config("test-null"), 10))
            self.assertEqual(await wait_for(rsc.get_config("test-float"), 10),
                             3.1415926)
            self.assertEqual(await wait_for(rsc.get_config("test-string"), 10),
                             "foo")
            with self.assertRaises(KeyError):
                await wait_for(rsc.get_config("test-unset"), 10)
            self.assertIs(
                await wait_for(rsc.get_config("test-unset", unset), 10), unset)

            for val in [2, b"def", None, 6.2831852, "bar"]:
                await wait_for(rsc.set_config("test-set", val), 10)
                self.assertEqual(await wait_for(rsc.list_config(), 10), [
                    "test-int", "test-bytes", "test-null", "test-string",
                    "test-float", "test-set"
                ])
                self.assertEqual(
                    await wait_for(rsc.get_config("test-set"), 10), val)
    async def test_multiplexer_channel_death(self):
        c_faked_networking, c_multiplexed = pipe_bidi()
        muliplexer = Multiplexer(c_multiplexed)
        async with c_faked_networking, muliplexer:
            async with muliplexer.connect('temporary'):
                pass

            msg: Message = await wait_for(c_faked_networking.read(), 5)
            self.assertIsInstance(msg.values, dict)
            self.assertIn('type', msg.values)
            self.assertEqual('close', msg.values['type'])

            await c_faked_networking.write(
                Message({
                    'target': 'temporary',
                    'payload': {}
                }))
            msg: Message = await wait_for(c_faked_networking.read(), 5)
            self.assertIsInstance(msg.values, dict)
            self.assertIn('type', msg.values)
            self.assertEqual('close', msg.values['type'])