예제 #1
0
class AirPlayPlayerTest(AioHTTPTestCase):
    def setUp(self):
        AioHTTPTestCase.setUp(self)

        # This is a hack that overrides asyncio.sleep to avoid making the test
        # slow. It also counts number of calls, since this is quite important
        # to the general function.
        player.asyncio.sleep = self.fake_asyncio_sleep
        self.no_of_sleeps = 0

    async def get_application(self, loop=None):
        self.fake_device = FakeAirPlayDevice(self)
        self.usecase = AirPlayUseCases(self.fake_device)
        return self.fake_device

    async def fake_asyncio_sleep(self, time, loop):
        self.no_of_sleeps += 1

    @unittest_run_loop
    async def test_play_video(self):
        self.usecase.airplay_playback_idle()
        self.usecase.airplay_playback_playing()
        self.usecase.airplay_playback_idle()

        session = ClientSession(loop=self.loop)
        aplay = player.AirPlayPlayer(self.loop,
                                     session,
                                     '127.0.0.1',
                                     port=self.server.port)
        await aplay.play_url(STREAM, position=START_POSITION)

        self.assertEqual(self.fake_device.last_airplay_url, STREAM)
        self.assertEqual(self.fake_device.last_airplay_start, START_POSITION)
        self.assertEqual(self.no_of_sleeps, 2)  # playback + idle = 3

        await session.close()

    @unittest_run_loop
    async def test_play_video_no_permission(self):
        self.usecase.airplay_playback_playing_no_permission()

        session = ClientSession(loop=self.loop)
        aplay = player.AirPlayPlayer(self.loop,
                                     session,
                                     '127.0.0.1',
                                     port=self.server.port)

        with self.assertRaises(exceptions.NoCredentialsError):
            await aplay.play_url(STREAM, position=START_POSITION)
예제 #2
0
class AirPlayPlayerTest(AioHTTPTestCase):
    async def setUpAsync(self):
        await AioHTTPTestCase.setUpAsync(self)

        # This is a hack that overrides asyncio.sleep to avoid making the test
        # slow. It also counts number of calls, since this is quite important
        # to the general function.
        player.asyncio.sleep = self.fake_asyncio_sleep
        self.no_of_sleeps = 0

        self.session = ClientSession(loop=self.loop)
        http = net.HttpSession(
            self.session, 'http://127.0.0.1:{0}/'.format(self.server.port))
        self.player = player.AirPlayPlayer(self.loop, http)

    async def tearDownAsync(self):
        await AioHTTPTestCase.tearDownAsync(self)
        await self.session.close()

    async def get_application(self, loop=None):
        self.fake_device = FakeAirPlayDevice(self)
        self.usecase = AirPlayUseCases(self.fake_device)
        return self.fake_device.app

    async def fake_asyncio_sleep(self, time, loop=None):
        self.no_of_sleeps += 1

    @unittest_run_loop
    async def test_play_video(self):
        self.usecase.airplay_playback_idle()
        self.usecase.airplay_playback_playing()
        self.usecase.airplay_playback_idle()

        await self.player.play_url(STREAM, position=START_POSITION)

        self.assertEqual(self.fake_device.last_airplay_url, STREAM)
        self.assertEqual(self.fake_device.last_airplay_start, START_POSITION)
        self.assertIsNotNone(self.fake_device.last_airplay_uuid)
        self.assertEqual(self.no_of_sleeps, 2)  # playback + idle = 3

    @unittest_run_loop
    async def test_play_video_no_permission(self):
        self.usecase.airplay_playback_playing_no_permission()

        with self.assertRaises(exceptions.NoCredentialsError):
            await self.player.play_url(STREAM, position=START_POSITION)

    @unittest_run_loop
    async def test_play_with_retries(self):
        self.usecase.airplay_play_failure(2)
        self.usecase.airplay_playback_playing()
        self.usecase.airplay_playback_idle()

        await self.player.play_url(STREAM, position=START_POSITION)

        self.assertEqual(self.fake_device.play_count,
                         3)  # Two retries + success

    @unittest_run_loop
    async def test_play_with_too_many_retries(self):
        self.usecase.airplay_play_failure(10)
        self.usecase.airplay_playback_playing()
        self.usecase.airplay_playback_idle()

        with self.assertRaises(exceptions.PlaybackError):
            await self.player.play_url(STREAM, position=START_POSITION)