async def test_remove_status_code(self, *args):
        mock_cache = {
            'endpoint': 'some-endpoint',
            'timeout': 10,
            '_id': 'some-id'
        }
        mock_status_codes = [200]
        mock_id = 'some-value'
        mock_db = MagicMock()
        mock_hgetall = CoroutineMock()
        mock_srem = CoroutineMock()
        mock_hgetall.return_value = mock_cache
        mock_db.hgetall = mock_hgetall
        mock_db.srem = mock_srem

        try:
            await EndpointCacher.remove_status_codes(mock_status_codes,
                                                     mock_id, mock_db)
        except Exception as err:
            mock_hgetall.assert_awaited()
            expect(mock_hgetall.await_args[0][0]).to(equal(mock_id))

        mock_cache = pydash.merge(mock_cache, {'response_codes': 'some-value'})
        await EndpointCacher.remove_status_codes(mock_status_codes, mock_id,
                                                 mock_db)
        expect(mock_srem.await_count).to(equal(len(mock_status_codes)))
示例#2
0
 async def test_play_track_list_creates_a_task_to_play_the_track_list(
         self, example_music_manager, monkeypatch):
     """
     Calling play_track_list() should create a task for running _play_track_list() and set the currently_playing
     attribute.
     """
     cancel_mock = CoroutineMock()
     play_track_list_mock = CoroutineMock()
     monkeypatch.setattr("src.music.music_manager.asyncio.sleep",
                         CoroutineMock())
     monkeypatch.setattr("src.music.music_manager.MusicManager.cancel",
                         cancel_mock)
     monkeypatch.setattr(
         "src.music.music_manager.MusicManager._play_track_list",
         play_track_list_mock)
     assert example_music_manager._currently_playing is None
     await example_music_manager.play_track_list(request=None,
                                                 group_index=0,
                                                 track_list_index=0)
     cancel_mock.assert_awaited()
     assert example_music_manager._currently_playing is not None
     assert isinstance(example_music_manager._currently_playing,
                       CurrentlyPlaying)
     assert example_music_manager._currently_playing.group_index == 0
     assert example_music_manager._currently_playing.track_list_index == 0
     assert isinstance(example_music_manager._currently_playing.task,
                       asyncio.Task)
 async def test_get_by_id(self, *args):
     response_codes_id = 'some-id'
     expected_cache = {
         'endpoint': 'some-endpoint',
         'timeout': 10,
         'response_codes': response_codes_id,
         '_id': 'some-id'
     }
     expected_response_codes = [200, 300]
     mock_id = 'some-value'
     mock_db = MagicMock()
     mock_hgetall = CoroutineMock()
     mock_smembers = CoroutineMock()
     mock_hgetall.return_value = expected_cache
     mock_smembers.return_value = expected_response_codes
     mock_db.hgetall = mock_hgetall
     mock_db.smembers = mock_smembers
     cache = await EndpointCacher.get_by_id(mock_id, mock_db)
     mock_hgetall.assert_awaited()
     expect(mock_hgetall.await_args[0][0]).to(equal(mock_id))
     mock_smembers.assert_awaited()
     expect(mock_smembers.await_args[0][0]).to(equal(response_codes_id))
     expect(cache).to(
         equal(
             pydash.merge(expected_cache,
                          {'response_codes': expected_response_codes})))
 async def test_get_all(self, *args):
     with asynctest.patch.object(DB, 'fetch_members') as fetch_members_mock:
         response_codes_id = 'some-id'
         expected_cache = {
             'endpoint': 'some-endpoint',
             'timeout': 10,
             'response_codes': response_codes_id,
             '_id': 'some-id'
         }
         expected_response_codes = [200, 300]
         mock_keys = ['some-id']
         mock_db = MagicMock()
         mock_hgetall = CoroutineMock()
         mock_smembers = CoroutineMock()
         fetch_members_mock.return_value = mock_keys
         mock_hgetall.return_value = expected_cache
         mock_db.hgetall = mock_hgetall
         mock_db.smembers = mock_smembers
         mock_smembers.return_value = expected_response_codes
         caches = await EndpointCacher.get_all(mock_db)
         fetch_members_mock.assert_awaited()
         mock_hgetall.assert_awaited()
         mock_smembers.assert_awaited()
         expect(mock_smembers.await_args[0][0]).to(equal(response_codes_id))
         expect(caches).to(have_len(1))
         expect(caches[0]).to(
             equal(
                 pydash.merge(expected_cache,
                              {'response_codes': expected_response_codes})))
示例#5
0
async def test_worker_exception_failed_to_send_message(mock_aioredis,
                                                       monkeypatch,
                                                       mock_redis_db):

    send_mock = CoroutineMock()

    def raise_connect_error(*_, **__):
        raise FailedToSendMessage("")

    send_mock.side_effect = raise_connect_error

    stopped_event = Event()
    monkeypatch.setattr(pyuubin.connectors.smtp, "send", send_mock)

    await mock_redis_db.connect()
    [await mock_redis_db.add_mail(mail) for mail in mail_generator(4)]

    await worker("test", "redis://localhost", stopped_event=stopped_event)

    send_mock.assert_awaited()

    assert not stopped_event.is_set()

    assert (await
            mock_aioredis.llen(f"{settings.redis_mail_queue}::failed") == 4)
    failed_msg = unpack(
        await
        mock_aioredis.rpop(f"{settings.redis_mail_queue}::failed"))["mail"]
    assert failed_msg["parameters"]["secret_data"] == "XXXXXX"
示例#6
0
 async def test__search_indexes(self, *args):
     expected_id = 'some-id'
     mock_index = 'some-index'
     mock_search = 'some-search'
     mock_db = MagicMock()
     mock_hscan = CoroutineMock()
     mock_hscan.return_value = (None, [(expected_id.encode('utf-8'),
                                        mock_search.encode('utf-8'))])
     mock_db.hscan = mock_hscan
     keys = await RateLimiter._search_indexes(mock_index, mock_search,
                                              mock_db)
     mock_hscan.assert_awaited()
     expect(keys).to(contain(expected_id))
示例#7
0
 async def test_delete_entry(self, *args):
     with asynctest.patch.object(RateLimiter,
                                 '_clear_indexes') as _clear_indexes_mock:
         mock_id = 'some-value'
         mock_db = MagicMock()
         mock_delete = CoroutineMock()
         mock_sadd = CoroutineMock()
         mock_db.delete = mock_delete
         mock_db.srem = mock_sadd
         await RateLimiter.delete_entry(mock_id, mock_db)
         mock_delete.assert_awaited_with(mock_id)
         _clear_indexes_mock.assert_awaited_with(mock_id, mock_db)
         mock_sadd.assert_awaited()
         expect(mock_sadd.await_args[0][1]).to(equal(mock_id))
示例#8
0
 async def test_get_entry_by_id(self, *args):
     expected_entry = {
         'rule_id': 'some-id',
         'host': 'some-host',
         'timeout': 1,
     }
     mock_id = 'some-value'
     mock_db = MagicMock()
     mock_hgetall = CoroutineMock()
     mock_hgetall.return_value = expected_entry
     mock_db.hgetall = mock_hgetall
     cache = await RateLimiter.get_entry_by_id(mock_id, mock_db)
     mock_hgetall.assert_awaited()
     expect(mock_hgetall.await_args[0][0]).to(equal(mock_id))
     expect(cache).to(equal(expected_entry))
示例#9
0
async def test_worker(mock_aioredis, monkeypatch, mock_redis_db):

    send_mock = CoroutineMock()

    monkeypatch.setattr(pyuubin.connectors.smtp, "send", send_mock)

    await mock_redis_db.connect()
    [await mock_redis_db.add_mail(mail) for mail in mail_generator(4)]

    await worker("test", "redis://localhost")

    assert await mock_aioredis.llen(get_consumer_queue_name("test")) == 0
    assert await mock_redis_db.mail_queue_size() == 0

    send_mock.assert_awaited()

    assert send_mock.await_count == 4
    async def test_call_rpc_successful_response(self):
        method = "method"
        expected = {"Action": method}

        mock_send = CoroutineMock()
        self._client.send = mock_send

        mock_wait = CoroutineMock()
        asyncio.wait_for = mock_wait

        await self._client.call_rpc(method)

        mock_send.assert_awaited()

        handlers = self._client._handlers
        self.assertIn(method, handlers)
        self.assertFalse(handlers[method])
示例#11
0
 async def test_get_rule_by_id(self, *args):
     expected_rule = {
         'path': 'some-path',
         'max_requests': 1,
         'timeout': 1,
         'host': 'some-host',
         'message': 'some-message'
     }
     mock_id = 'some-value'
     mock_db = MagicMock()
     mock_hgetall = CoroutineMock()
     mock_hgetall.return_value = expected_rule
     mock_db.hgetall = mock_hgetall
     cache = await RateLimiter.get_rule_by_id(mock_id, mock_db)
     mock_hgetall.assert_awaited()
     expect(mock_hgetall.await_args[0][0]).to(equal(mock_id))
     expect(cache).to(equal(expected_rule))
示例#12
0
 async def test_get_all_entries(self, *args):
     with asynctest.patch.object(DB, 'fetch_members') as fetch_members_mock:
         mock_entry = {
             'rule_id': 'some-id',
             'host': 'some-host',
             'timeout': 1,
         }
         mock_keys = ['some-value']
         mock_db = MagicMock()
         mock_hgetall = CoroutineMock()
         mock_db.hgetall = mock_hgetall
         fetch_members_mock.return_value = mock_keys
         mock_hgetall.return_value = mock_entry
         entries = await RateLimiter.get_all_entries(mock_db)
         fetch_members_mock.assert_awaited()
         mock_hgetall.assert_awaited()
         expect(mock_hgetall.await_args[0][0]).to(equal(mock_keys[0]))
         expect(entries).to(contain(mock_entry))
示例#13
0
 async def test_get_entry_by_host(self, *args):
     with asynctest.patch.object(RateLimiter,
                                 '_search_indexes') as _search_indexes_mock:
         mock_rule = {
             'rule_id': 'some-id',
             'host': 'some-host',
             'timeout': 1,
         }
         mock_host = 'some-value'
         mock_keys = ['some-value']
         mock_db = MagicMock()
         mock_hgetall = CoroutineMock()
         mock_db.hgetall = mock_hgetall
         _search_indexes_mock.return_value = mock_keys
         mock_hgetall.return_value = mock_rule
         rules = await RateLimiter.get_entry_by_host(mock_host, mock_db)
         _search_indexes_mock.assert_awaited()
         mock_hgetall.assert_awaited()
         expect(mock_hgetall.await_args[0][0]).to(equal(mock_keys[0]))
         expect(rules).to(contain(mock_rule))
示例#14
0
 async def test_get_all_rules(self, *args):
     with asynctest.patch.object(DB, 'fetch_members') as fetch_members_mock:
         mock_rule = {
             'path': 'some-path',
             'max_requests': 1,
             'timeout': 1,
             'host': 'some-host',
             'message': 'some-message'
         }
         mock_keys = ['some-value']
         mock_db = MagicMock()
         mock_hgetall = CoroutineMock()
         mock_db.hgetall = mock_hgetall
         fetch_members_mock.return_value = mock_keys
         mock_hgetall.return_value = mock_rule
         rules = await RateLimiter.get_all_rules(mock_db)
         fetch_members_mock.assert_awaited()
         mock_hgetall.assert_awaited()
         expect(mock_hgetall.await_args[0][0]).to(equal(mock_keys[0]))
         expect(rules).to(contain(mock_rule))
示例#15
0
async def test_worker_exception_cannot_send_messages(mock_aioredis,
                                                     monkeypatch,
                                                     mock_redis_db):

    send_mock = CoroutineMock()

    def raise_connect_error(*_, **__):
        raise CannotSendMessages("")

    send_mock.side_effect = raise_connect_error

    stopped_event = Event()
    monkeypatch.setattr(pyuubin.connectors.smtp, "send", send_mock)

    await mock_redis_db.connect()
    [await mock_redis_db.add_mail(mail) for mail in mail_generator(4)]

    await worker("test", "redis://localhost", stopped_event=stopped_event)

    send_mock.assert_awaited()

    assert stopped_event.is_set()
示例#16
0
 async def test_create_rule(self, *args):
     with asynctest.patch.object(RateLimiter,
                                 '_set_indexes') as _set_indexes_mock:
         mock_ctx = {
             'path': 'some-path',
             'max_requests': 1,
             'timeout': 1,
             'host': 'some-host',
             'message': 'some-message'
         }
         mock_db = MagicMock()
         mock_service_db = MagicMock()
         mock_sadd = CoroutineMock()
         mock_hmset_dict = CoroutineMock()
         mock_db.sadd = mock_sadd
         mock_db.hmset_dict = mock_hmset_dict
         await RateLimiter.create_rule(mock_ctx, mock_db)
         _set_indexes_mock.assert_called()
         mock_sadd.assert_awaited()
         for key in mock_ctx.keys():
             expect(mock_hmset_dict.await_args[0][1]).to(have_key(key))
             expect(mock_hmset_dict.await_args[0][1][key]).to(
                 equal(mock_ctx[key]))
示例#17
0
 async def test_create_entry(self, *args):
     with asynctest.patch.object(RateLimiter,
                                 '_set_indexes') as _set_indexes_mock:
         mock_ctx = {
             'rule_id': 'some-id',
             'host': 'some-host',
             'timeout': 1,
         }
         mock_db = MagicMock()
         mock_service_db = MagicMock()
         mock_sadd = CoroutineMock()
         mock_hmset_dict = CoroutineMock()
         mock_expire = CoroutineMock()
         mock_db.sadd = mock_sadd
         mock_db.hmset_dict = mock_hmset_dict
         mock_db.expire = mock_expire
         await RateLimiter.create_entry(mock_ctx, mock_db)
         _set_indexes_mock.assert_called()
         mock_sadd.assert_awaited()
         for key in mock_ctx.keys():
             expect(mock_hmset_dict.await_args[0][1]).to(have_key(key))
             expect(mock_hmset_dict.await_args[0][1][key]).to(
                 equal(mock_ctx[key]))