Exemple #1
0
def test_send_message_without_sender():
    class SendBehaviour(OneShotBehaviour):
        async def run(self):
            msg = Message()
            await self.send(msg)
            self.kill()

    agent = make_connected_agent()
    agent.start()

    agent.aiothread.stream = MagicMock()
    agent.stream.send = CoroutineMock()
    behaviour = SendBehaviour()
    agent.add_behaviour(behaviour)

    wait_for_behaviour_is_killed(behaviour)

    msg_arg = agent.stream.send.await_args[0][0]
    assert msg_arg.from_ == aioxmpp.JID.fromstr("fake@jid")

    agent.stop()
Exemple #2
0
    async def test_can_handle_connected_frame_with_heartbeat(
            self, heartbeater_klass_mock):
        frame = Frame('CONNECTED', {
            'heart-beat': '1000,1000',
        }, '{}')

        heartbeater_mock = heartbeater_klass_mock.return_value
        heartbeater_mock.start = CoroutineMock()

        stomp = StompReader(None,
                            self.loop,
                            heartbeat={
                                'enabled': True,
                                'cx': 1000,
                                'cy': 1000
                            })
        stomp._transport = Mock()
        await stomp._handle_connect(frame)

        heartbeater_klass_mock.assert_called_with(stomp._transport, 1000)
        heartbeater_mock.start.assert_called_once()
 async def test_get_entry_by_rule_id(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_rule_id = '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_rule_id(
             mock_rule_id, 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))
    async def async_test_transition_to_validation_reported_exception(self):
        """Set up the test for transitioning to validation reported."""
        self.report_record.state = Report.VALIDATED
        self.report_record.retry_count = 0
        self.report_record.report_platform_id = self.uuid
        self.report_record.upload_ack_status = report_processor.SUCCESS_CONFIRM_STATUS
        self.report_record.save()
        self.processor.report_or_slice = self.report_record
        self.processor.status = report_processor.SUCCESS_CONFIRM_STATUS
        self.processor.upload_message = {'hash': self.uuid}

        def report_side_effect():
            """Transition the state to validation_reported."""
            raise Exception('Test')

        self.processor._send_confirmation = CoroutineMock(
            side_effect=report_side_effect)
        await self.processor.transition_to_validation_reported()
        self.assertEqual(self.report_record.state, Report.VALIDATED)
        self.assertEqual(self.report_record.retry_count, 1)
        self.check_variables_are_reset()
Exemple #5
0
async def test_game_connection_not_restored_if_no_such_game_exists(
        lobbyconnection: LobbyConnection, mocker):
    del lobbyconnection.player.game_connection
    lobbyconnection.send = CoroutineMock()
    lobbyconnection.player.state = PlayerState.IDLE
    await lobbyconnection.on_message_received({
        "command": "restore_game_session",
        "game_id": 123
    })

    assert not lobbyconnection.player.game_connection
    assert lobbyconnection.player.state == PlayerState.IDLE

    lobbyconnection.send.assert_any_call({
        "command":
        "notice",
        "style":
        "info",
        "text":
        "The game you were connected to does no longer exist"
    })
Exemple #6
0
    async def test_can_handle_message_can_nack(self, send_frame_mock):
        frame = Frame('MESSAGE', {
            'subscription': '123',
            'message-id': '321'
        }, 'blah')

        handler = CoroutineMock()
        handler.return_value = False
        subscription = Subscription('123', 1, 'client-individual', {}, handler)

        frame_handler = Mock()
        frame_handler.get.return_value = subscription

        stomp = StompReader(frame_handler, self.loop)
        await stomp._handle_message(frame)

        handler.assert_called_with(frame, frame.body)
        send_frame_mock.assert_called_with('NACK', {
            'subscription': '123',
            'message-id': '321'
        })
    def test_get_devices_cache(self, mock_get):
        # arrange
        loop = asyncio.get_event_loop()
        mock_get.return_value.__aenter__.return_value.status = 200
        mock_get.return_value.__aenter__.return_value.json = CoroutineMock(
            return_value=JSON_DEVICES
        )
        # act

        async def getDevices():
            async with Govee(API_KEY) as govee:
                result, err = await govee.get_devices()
                assert not err
                cache = govee.devices
                return result, cache

        result, cache = loop.run_until_complete(getDevices())
        # assert
        assert mock_get.call_count == 1
        assert len(result) == 2
        assert result == cache
Exemple #8
0
async def test_set_publishing_mode(opc, mocker):
    """
    test flipping the publishing parameter for an existing subscription
    """
    myhandler = MySubHandler()
    o = opc.opc.nodes.objects
    publishing_mode = ua.SetPublishingModeParameters()
    mock_set_monitoring = mocker.patch.object(ua,
                                              "SetPublishingModeParameters",
                                              return_value=publishing_mode)
    mock_client_monitoring = mocker.patch(
        "asyncua.client.ua_client.UaClient.set_publishing_mode",
        new=CoroutineMock())
    v = await o.add_variable(3, 'SubscriptionVariable3', 123)
    sub = await opc.opc.create_subscription(100, myhandler)

    await sub.set_publishing_mode(False)
    assert publishing_mode.PublishingEnabled == False

    await sub.set_publishing_mode(True)
    assert publishing_mode.PublishingEnabled == True
Exemple #9
0
def dummy_zmq_server(monkeypatch):
    """
    A fixture which provides a dummy zero mq
    socket which records the json it is asked
    to send.

    Parameters
    ----------
    monkeypatch

    Yields
    ------
    asynctest.CoroutineMock
        Coroutine mocking for the recv_json method of the socket

    """
    dummy = Mock()
    dummy.return_value.socket.return_value.recv_json = CoroutineMock()

    monkeypatch.setattr(zmq.asyncio.Context, "instance", dummy)
    yield dummy.return_value.socket.return_value.recv_json
Exemple #10
0
async def test_add_connection_record(node_instance, message_instance):
    node_instance.connections = [{
        'addr': '1.1.1.1',
        'port': '1111',
        'reader': 'reader1',
        'writer': 'writer1'
    }]
    with patch('asyncio.open_connection', new=CoroutineMock()) as mocked_open:
        mocked_open.return_value = 'reader2', 'writer2'
        await node_instance.add_connection_record(message_instance, 'reader3')
        assert node_instance.connections == [{
            'addr': '1.1.1.1',
            'port': '1111',
            'reader': 'reader1',
            'writer': 'writer1'
        }, {
            'addr': '127.0.0.1',
            'port': '54321',
            'reader': 'reader3',
            'writer': 'writer2'
        }]
Exemple #11
0
async def test_load_from_database_new_data(ladder_service, database):
    async with database.acquire() as conn:
        result = await conn.execute(matchmaker_queue.insert().values(
            technical_name="test",
            featured_mod_id=1,
            leaderboard_id=1,
            name_key="test.name"))
        await conn.execute(matchmaker_queue_map_pool.insert().values(
            matchmaker_queue_id=result.lastrowid, map_pool_id=1))

    await ladder_service.update_data()

    test_queue = ladder_service.queues["test"]

    assert test_queue.name == "test"
    assert test_queue._is_running
    # Queue pop times are 1 second for tests
    test_queue.find_matches = CoroutineMock()
    await asyncio.sleep(1.5)

    test_queue.find_matches.assert_called()
async def test_decorator_default():
    mock = CoroutineMock()

    @async_reduceable()
    async def foo(arg, *, kw):
        """My foo doc"""
        await mock(arg, kw=kw)

        return 'result {} {}'.format(arg, kw)

    assert foo.__name__ == 'foo'
    assert foo.__doc__ == 'My foo doc'

    coros = [
        foo('arg', kw='kw'),
        foo('arg', kw='kw')
    ]
    done, pending = await asyncio.wait(coros)
    assert not pending
    mock.assert_awaited_once_with('arg', kw='kw')
    assert all(f.result() == 'result arg kw' for f in done)
Exemple #13
0
def test_create_agent(mocker):
    mocker.patch("spade.agent.AioThread.connect")
    agent = Agent("jid@server", "fake_password")

    assert agent.is_alive() is False

    agent.start(auto_register=False)

    assert agent.is_alive() is True

    agent.aiothread.connect.assert_called_once()
    assert agent.stream is None

    agent.aiothread.conn_coro = mocker.Mock()
    agent.aiothread.conn_coro.__aexit__ = CoroutineMock()

    agent.stop()

    agent.aiothread.conn_coro.__aexit__.assert_called_once()

    assert agent.is_alive() is False
Exemple #14
0
async def test_set_monitoring_mode(opc, mocker):
    """
    test set_monitoring_mode parameter for all MIs of a subscription
    """
    myhandler = MySubHandler()
    o = opc.opc.nodes.objects
    monitoring_mode = ua.SetMonitoringModeParameters()
    mock_set_monitoring = mocker.patch.object(ua,
                                              "SetMonitoringModeParameters",
                                              return_value=monitoring_mode)
    mock_client_monitoring = mocker.patch(
        "asyncua.client.ua_client.UaClient.set_monitoring_mode",
        new=CoroutineMock())
    v = await o.add_variable(3, 'SubscriptionVariable2', 123)
    sub = await opc.opc.create_subscription(100, myhandler)

    await sub.set_monitoring_mode(ua.MonitoringMode.Disabled)
    assert monitoring_mode.MonitoringMode == ua.MonitoringMode.Disabled

    await sub.set_monitoring_mode(ua.MonitoringMode.Reporting)
    assert monitoring_mode.MonitoringMode == ua.MonitoringMode.Reporting
Exemple #15
0
    async def test_create_connection_max_observed_latencies(
            self, event_loop, mocker, not_closed_connection):
        mocker.patch("emcache.connection_pool.create_protocol",
                     CoroutineMock(return_value=not_closed_connection))

        connection_pool = ConnectionPool("localhost", 11211, 1, 1, None, None,
                                         lambda _: _, False, False, None)

        # Perform twice operations than the maximum observed latencies by removing
        # the connection at each operation
        for i in range(_MAX_CREATE_CONNECTION_LATENCIES_OBSERVED * 2):
            async with connection_pool.create_connection_context():
                pass

            # remove the connection explicitly, behind the scenes connection pool
            # will be forced to create a new one
            connection_pool._close_connection(not_closed_connection)

        # We should never have more than the maximum number of latencies observed
        assert len(connection_pool._create_connection_latencies
                   ) == _MAX_CREATE_CONNECTION_LATENCIES_OBSERVED
Exemple #16
0
async def test_command_game_join_game_not_found(lobbyconnection, game_service,
                                                test_game_info, players):
    lobbyconnection.send = CoroutineMock()
    lobbyconnection.game_service = game_service
    lobbyconnection.player = players.hosting
    players.hosting.in_game = False
    players.hosting.state = PlayerState.IDLE
    test_game_info["uid"] = 42

    await lobbyconnection.on_message_received({
        "command": "game_join",
        **test_game_info
    })
    lobbyconnection.send.assert_called_once_with({
        "command":
        "notice",
        "style":
        "info",
        "text":
        "The host has left the game."
    })
    async def test_post_handler(self, *args):
        with patch.object(DB, 'get') as get_mock:
            with patch('json.loads') as loads_mock:
                with patch.object(Insights, 'create') as create_mock:
                    with patch.object(Error, 'handle') as handle_mock:
                        with patch.object(
                                Validate,
                                'validate_schema') as validate_schem_mock:
                            mock_req = MagicMock()
                            mock_req.text = CoroutineMock()
                            await post_handler(mock_req)
                            mock_req.text.assert_called()
                            loads_mock.assert_called()
                            validate_schem_mock.assert_called()
                            get_mock.assert_called()
                            create_mock.assert_called()

                            mock_err = Exception()
                            create_mock.side_effect = mock_err
                            await post_handler(mock_req)
                            handle_mock.assert_called_with(mock_err)
    def test_ping(self, mock_get):
        # arrange
        loop = asyncio.get_event_loop()
        mock_get.return_value.__aenter__.return_value.status = 200
        mock_get.return_value.__aenter__.return_value.text = CoroutineMock(
            return_value="Pong"
        )
        # act

        async def ping():
            async with Govee(API_KEY) as govee:
                return await govee.ping()

        result, err = loop.run_until_complete(ping())
        # assert
        assert not err
        assert result
        assert mock_get.call_count == 1
        assert (
            mock_get.call_args.kwargs["url"] == "https://developer-api.govee.com/ping"
        )
    async def test_ok(self, mocker: MockFixture,
                      fake_model_data_provider: ModelDataProvider):
        data_length = 10
        fake_data = [mocker.Mock() for _ in range(0, data_length)]
        fake_include_settings = mocker.Mock()
        fake_include_params = mocker.Mock()
        fake_item_include_data = mocker.Mock()
        mocked_get_item_include_data = mocker.patch.object(
            fake_model_data_provider, 'get_item_include_data',
            CoroutineMock(return_value=fake_item_include_data))

        result = await fake_model_data_provider.get_list_include_data(
            fake_data, fake_include_settings, fake_include_params)

        mocked_get_item_include_data.assert_has_calls([
            mocker.call(fake_data[i], fake_include_settings,
                        fake_include_params) for i in range(0, data_length)
        ])
        assert result == [
            fake_item_include_data for _ in range(0, data_length)
        ]
Exemple #20
0
async def test_subscribe_rid(sm: SubscriptionManager):
    send_mock = CoroutineMock()
    send_mock.return_value = 'some return value'
    sm._ds.send_message = send_mock

    sm._sub_payload = Mock()
    sub_payload_value = 'some value'
    sm._sub_payload.return_value = sub_payload_value

    sub = Subscription(category=Category.MARKET,
                       events=[MarketEvents.CANCELS, MarketEvents.ORDERS],
                       topics=['ETH_AURA', 'ETH_ZRX'])

    result = await sm.subscribe(sub, 'some rid')

    sm._sub_payload.assert_called_once_with(Action.SUBSCRIBE,
                                            topics=sub.topics,
                                            events=sub.events)
    send_mock.assert_awaited_once_with(sub.category.value, sub_payload_value,
                                       'some rid')
    assert result == 'some return value'
Exemple #21
0
    async def test_waitfor(self):
        scansapi = self.api.scans
        scanschema = module.ScanSchema()
        scansapi.get = CoroutineMock(side_effect=(
            scanschema.load(
                {"id": "127d134f-0e1e-4238-87b4-29ee87ebe60a", "status": 30}
                ),
            scanschema.load(
                {"id": "127d134f-0e1e-4238-87b4-29ee87ebe60a", "status": 40}
                ),
            scanschema.load(
                {"id": "127d134f-0e1e-4238-87b4-29ee87ebe60a", "status": 50}
                ),
            scanschema.load(
                {"id": "127d134f-0e1e-4238-87b4-29ee87ebe60a", "status": 50}
                ),
        ))

        await scansapi.waitfor("127d134f-0e1e-4238-87b4-29ee87ebe60a")

        self.assertEqual(scansapi.get.call_count, 4)
Exemple #22
0
async def test_get_token():
    endpoint = 'http://*****:*****@localhost:7000/oauth/token'
                    f'?grant_type=password&username={username}&password={password}',
                    ag.aiohttp.ClientSession.post)
Exemple #23
0
    async def test_can_handle_connected_frame_with_heartbeat(
            self, heartbeater_klass_mock):
        frame = Frame("CONNECTED", {"heart-beat": "1000,1000"}, "{}")

        heartbeater_mock = heartbeater_klass_mock.return_value
        heartbeater_mock.start = CoroutineMock()

        stomp = StompReader(None,
                            self.loop,
                            heartbeat={
                                "enabled": True,
                                "cx": 1000,
                                "cy": 1000
                            })
        stomp._transport = Mock()
        await stomp._handle_connect(frame)

        heartbeater_klass_mock.assert_called_with(stomp._transport,
                                                  interval=1000,
                                                  loop=self.loop)
        heartbeater_mock.start.assert_called_once()
Exemple #24
0
    async def test_send_code_changed_flag(self, mocked_socketio, app):
        self.mocked_mappings[self.sid] = 1
        self.game_api.worker_manager.add_new_worker(
            self.mocked_mappings[self.sid])
        worker = self.game_api.worker_manager.player_id_to_worker[
            self.mocked_mappings[self.sid]]
        worker.has_code_updated = True

        with mock.patch("service.socketio_server.emit",
                        new=CoroutineMock()) as mocked_emit:
            await self.game_api.send_updates()

            user_game_state_call = mock.call("game-state", {"foo": "bar"},
                                             room=self.sid)
            user_game_code_changed_call = mock.call("feedback-avatar-updated",
                                                    {},
                                                    room=self.sid)

            mocked_emit.assert_has_calls(
                [user_game_state_call, user_game_code_changed_call],
                any_order=True)
Exemple #25
0
    async def test_can_handle_message_can_nack(self, send_frame_mock):
        frame = Frame("MESSAGE", {
            "subscription": "123",
            "message-id": "321"
        }, "blah")

        handler = CoroutineMock()
        handler.return_value = False
        subscription = Subscription("123", 1, "client-individual", {}, handler)

        frame_handler = Mock()
        frame_handler.get.return_value = subscription

        stomp = StompReader(frame_handler, self.loop)
        await stomp._handle_message(frame)

        handler.assert_called_with(frame, frame.body)
        send_frame_mock.assert_called_with("NACK", {
            "subscription": "123",
            "message-id": "321"
        })
    async def test_lock_expire_retries(self, lock_manager_redis_patched,
                                       locked_lock):
        lock_manager, redis = lock_manager_redis_patched
        redis.set_lock = CoroutineMock(side_effect=[
            LockError('Can not lock'),
            LockError('Can not lock'),
            LockError('Can not lock')
        ])

        with pytest.raises(LockError):
            await lock_manager.lock('resource')

        await real_sleep(0.1)  # wait until cleaning is completed

        calls = [
            call('resource', ANY),
            call('resource', ANY),
            call('resource', ANY)
        ]
        redis.set_lock.assert_has_calls(calls)
        redis.unset_lock.assert_called_once_with('resource', ANY)
Exemple #27
0
async def test_expired_session(http_redirect, ssl_certificate):
    with patch("asyncio.sleep", new=CoroutineMock()):
        async with CaseControlledTestServer(
                ssl=ssl_certificate.server_context()) as server:
            controller = await setup_multi_session(server, http_redirect)

            task = asyncio.create_task(controller.horn(TEST_VIN_3_G2))

            await server_js_response(server,
                                     VALIDATE_SESSION_FAIL,
                                     path=sc.API_VALIDATE_SESSION)
            await server_js_response(server,
                                     LOGIN_MULTI_REGISTERED,
                                     path=sc.API_LOGIN)
            await server_js_response(
                server,
                SELECT_VEHICLE_3,
                path=sc.API_SELECT_VEHICLE,
                query={
                    "vin": TEST_VIN_3_G2,
                    "_": str(int(time.time()))
                },
            )
            await server_js_response(
                server,
                REMOTE_SERVICE_EXECUTE,
                path=sc.API_HORN_LIGHTS,
            )
            await server_js_response(
                server,
                REMOTE_SERVICE_STATUS_STARTED,
                path=sc.API_REMOTE_SVC_STATUS,
            )
            await server_js_response(
                server,
                REMOTE_SERVICE_STATUS_FINISHED_SUCCESS,
                path=sc.API_REMOTE_SVC_STATUS,
            )

            assert await task
Exemple #28
0
    async def test_initalizes_creating_min_connection(self, mocker,
                                                      not_closed_connection,
                                                      min_connections):
        ev = asyncio.Event()
        connections_created = 0

        def f(*args, **kwargs):
            nonlocal connections_created
            connections_created += 1
            if connections_created == min_connections:
                ev.set()
            return not_closed_connection

        create_protocol = mocker.patch(
            "emcache.connection_pool.create_protocol",
            CoroutineMock(side_effect=f))

        max_connections = min_connections
        connection_pool = ConnectionPool("localhost", 11211, max_connections,
                                         min_connections, None, None,
                                         lambda _: _, False, False, None)

        # wait till the min_connections have been created.
        await ev.wait()

        create_protocol.assert_called_with("localhost",
                                           11211,
                                           ssl=False,
                                           ssl_verify=False,
                                           ssl_extra_ca=None,
                                           timeout=None)
        assert connection_pool.total_connections == min_connections

        # test specific atributes of the metrics
        assert connection_pool.metrics().cur_connections == min_connections
        assert connection_pool.metrics().connections_created == min_connections
        assert connection_pool.metrics().create_connection_avg is not None
        assert connection_pool.metrics().create_connection_p50 is not None
        assert connection_pool.metrics().create_connection_p99 is not None
        assert connection_pool.metrics().create_connection_upper is not None
Exemple #29
0
async def test_setup_no_config(hass):
    """Tests component setup with no config."""
    with patch.object(
            Hole,
            "get_data",
            new=CoroutineMock(side_effect=mock_pihole_data_call(Hole))):
        assert await async_setup_component(hass, pi_hole.DOMAIN,
                                           {pi_hole.DOMAIN: {}})

    await hass.async_block_till_done()

    assert (hass.states.get("sensor.pi_hole_ads_blocked_today").name ==
            "Pi-Hole Ads Blocked Today")
    assert (hass.states.get("sensor.pi_hole_ads_percentage_blocked_today").name
            == "Pi-Hole Ads Percentage Blocked Today")
    assert (hass.states.get("sensor.pi_hole_dns_queries_cached").name ==
            "Pi-Hole DNS Queries Cached")
    assert (hass.states.get("sensor.pi_hole_dns_queries_forwarded").name ==
            "Pi-Hole DNS Queries Forwarded")
    assert (hass.states.get("sensor.pi_hole_dns_queries_today").name ==
            "Pi-Hole DNS Queries Today")
    assert (hass.states.get("sensor.pi_hole_dns_unique_clients").name ==
            "Pi-Hole DNS Unique Clients")
    assert (hass.states.get("sensor.pi_hole_dns_unique_domains").name ==
            "Pi-Hole DNS Unique Domains")
    assert (hass.states.get("sensor.pi_hole_domains_blocked").name ==
            "Pi-Hole Domains Blocked")
    assert hass.states.get(
        "sensor.pi_hole_seen_clients").name == "Pi-Hole Seen Clients"

    assert hass.states.get("sensor.pi_hole_ads_blocked_today").state == "0"
    assert hass.states.get(
        "sensor.pi_hole_ads_percentage_blocked_today").state == "0"
    assert hass.states.get("sensor.pi_hole_dns_queries_cached").state == "0"
    assert hass.states.get("sensor.pi_hole_dns_queries_forwarded").state == "0"
    assert hass.states.get("sensor.pi_hole_dns_queries_today").state == "0"
    assert hass.states.get("sensor.pi_hole_dns_unique_clients").state == "0"
    assert hass.states.get("sensor.pi_hole_dns_unique_domains").state == "0"
    assert hass.states.get("sensor.pi_hole_domains_blocked").state == "0"
    assert hass.states.get("sensor.pi_hole_seen_clients").state == "0"
    async def test_bookmark(
        self,
        subject,
        session,
        tap,
        tap_process,
        target_process,
        plugin_invoker_factory,
        full_refresh,
        select_filter,
        payload_flag,
    ):
        lines = (b'{"line": 1}\n', b'{"line": 2}\n', b'{"line": 3}\n')

        # testing with a real subprocess proved to be pretty
        # complicated.
        target_process.stdout = mock.MagicMock()
        target_process.stdout.at_eof.side_effect = (False, False, False, True)
        target_process.stdout.readline = CoroutineMock(side_effect=lines)

        subject.context.full_refresh = full_refresh
        subject.context.select_filter = select_filter

        async with subject.context.job.run(session):
            with mock.patch.object(
                    session, "add",
                    side_effect=session.add) as add_mock, mock.patch.object(
                        session, "commit",
                        side_effect=session.commit) as commit_mock:
                bookmark_writer = subject.bookmark_writer()
                await capture_subprocess_output(target_process.stdout,
                                                bookmark_writer)

            assert add_mock.call_count == 3
            assert commit_mock.call_count == 3

            # assert the STATE's `value` was saved
            job = subject.context.job
            assert job.payload["singer_state"] == {"line": 3}
            assert job.payload_flags == payload_flag