Ejemplo n.º 1
0
def test_request_header_zero_padded(
    spanid_random_mock,
    traceid_random_mock,
    app,
):
    request_id_init_app(app)

    traceid_random_mock.randrange.side_effect = assert_args_and_return(
        0xbeef, 1 << 128)
    spanid_random_mock.randrange.side_effect = assert_args_and_return(
        0xa, 1 << 64)

    with app.test_request_context():
        assert request.request_id == request.trace_id == "0000000000000000000000000000beef"
        assert request.span_id is None
        assert request.get_onwards_request_headers() == {
            "DM-Request-ID": "0000000000000000000000000000beef",
            "X-B3-TraceId": "0000000000000000000000000000beef",
            "X-B3-SpanId": "000000000000000a",
        }
        assert request.get_extra_log_context() == AnySupersetOf({
            'parent_span_id':
            None,
            'span_id':
            None,
            'trace_id':
            '0000000000000000000000000000beef',
        })

    assert traceid_random_mock.randrange.called is True
    assert spanid_random_mock.randrange.called is True
Ejemplo n.º 2
0
def test_response_headers_error_response(
        spanid_random_mock,
        traceid_random_mock,
        app,
        extra_config,
        extra_req_headers,
        expected_trace_id,  # unused here
        expect_trace_random_call,
        expected_span_id,  # unused here
        expected_parent_span_id,  # unused here
        expected_is_sampled,  # unused here
        expected_debug_flag,  # unused here
        expected_onwards_req_headers,  # unused here
        expected_resp_headers,
        expected_dm_request_id_header_final_value,  # unused here
):
    app.config.update(extra_config)
    request_id_init_app(app)
    client = app.test_client()

    traceid_random_mock.randrange.side_effect = assert_args_and_return(
        _GENERATED_TRACE_VALUE, 1 << 128)

    @app.route('/')
    def error_route():
        raise Exception()

    with app.app_context():
        response = client.get('/', headers=extra_req_headers)
        assert response.status_code == 500
        assert dict(response.headers) == AnySupersetOf(expected_resp_headers)

    assert traceid_random_mock.randrange.called is expect_trace_random_call
    assert spanid_random_mock.randrange.called is False
Ejemplo n.º 3
0
def test_response_headers_regular_response(
        spanid_random_mock,
        traceid_random_mock,
        app,
        extra_config,
        extra_req_headers,
        expected_trace_id,  # unused here
        expect_trace_random_call,
        expected_span_id,  # unused here
        expected_parent_span_id,  # unused here
        expected_is_sampled,  # unused here
        expected_debug_flag,  # unused here
        expected_onwards_req_headers,  # unused here
        expected_resp_headers,
        expected_dm_request_id_header_final_value,  # unused here
):
    app.config.update(extra_config)
    request_id_init_app(app)
    client = app.test_client()

    traceid_random_mock.randrange.side_effect = assert_args_and_return(
        _GENERATED_TRACE_VALUE, 1 << 128)

    with app.app_context():
        response = client.get('/', headers=extra_req_headers)
        # note using these mechanisms we're not able to test for the *absence* of a header
        assert dict(response.headers) == AnySupersetOf(expected_resp_headers)

    assert traceid_random_mock.randrange.called is expect_trace_random_call
    assert spanid_random_mock.randrange.called is False
Ejemplo n.º 4
0
def test_request_header(
    spanid_random_mock,
    traceid_random_mock,
    app,
    extra_config,
    extra_req_headers,
    expected_trace_id,
    expect_trace_random_call,
    expected_span_id,
    expected_parent_span_id,
    expected_is_sampled,
    expected_debug_flag,
    expected_onwards_req_headers,
    expected_resp_headers,  # unused here
    expected_dm_request_id_header_final_value,
):
    app.config.update(extra_config)
    request_id_init_app(app)

    assert app.config.get(
        "DM_REQUEST_ID_HEADER") == expected_dm_request_id_header_final_value

    traceid_random_mock.randrange.side_effect = assert_args_and_return(
        _GENERATED_TRACE_VALUE, 1 << 128)
    spanid_random_mock.randrange.side_effect = assert_args_and_return(
        _GENERATED_SPAN_VALUE, 1 << 64)

    with app.test_request_context(headers=extra_req_headers):
        assert request.request_id == request.trace_id == expected_trace_id
        assert request.span_id == expected_span_id
        assert request.parent_span_id == expected_parent_span_id
        assert request.is_sampled == expected_is_sampled
        assert request.debug_flag == expected_debug_flag
        assert request.get_onwards_request_headers(
        ) == expected_onwards_req_headers
        assert app.config.get("DM_REQUEST_ID_HEADER"
                              ) == expected_dm_request_id_header_final_value
        assert request.get_extra_log_context() == {
            "trace_id": expected_trace_id,
            "span_id": expected_span_id,
            "parent_span_id": expected_parent_span_id,
            "is_sampled": "1" if expected_is_sampled else "0",
            "debug_flag": "1" if expected_debug_flag else "0",
        }

    assert traceid_random_mock.randrange.called is expect_trace_random_call
    assert spanid_random_mock.randrange.called is True
def test_assert_args_and_return():
    mymock = Mock()
    mymock.side_effect = assert_args_and_return("two eggs",
                                                "two bottles",
                                                yards=50)
    assert mymock('two bottles', yards=50) == "two eggs"

    with pytest.raises(AssertionError):
        mymock('two bottles', metres=50)
Ejemplo n.º 6
0
 def test_post_requires_role(self, send_user_account_email):
     self.data_api_client.get_user.side_effect = assert_args_and_return(
         None, email_address='*****@*****.**')
     res = self.client.post('/admin/admin-users/invite',
                            data={'email_address': '*****@*****.**'})
     assert res.status_code == 400
     assert self.get_validation_message(
         res) == "You must choose a permission"
     assert send_user_account_email.called is False
Ejemplo n.º 7
0
 def test_successful_post_flashes(self, send_user_account_email):
     self.data_api_client.get_user.side_effect = assert_args_and_return(
         None, email_address='*****@*****.**')
     self.data_api_client.email_is_valid_for_admin_user.return_value = True
     res = self.client.post('/admin/admin-users/invite',
                            data={
                                'role': 'admin',
                                'email_address': '*****@*****.**'
                            })
     assert res.status_code == 302
     self.assert_flashes('An invitation has been sent to [email protected].')
     assert self.data_api_client.get_user.called is True
Ejemplo n.º 8
0
 def test_post_requires_valid_role(self, send_user_account_email):
     """This case won't happen unless they mess with the post."""
     self.data_api_client.get_user.side_effect = assert_args_and_return(
         None, email_address='*****@*****.**')
     res = self.client.post('/admin/admin-users/invite',
                            data={
                                'email_address': '*****@*****.**',
                                'role': 'not_a_valid_role'
                            })
     assert res.status_code == 400
     assert self.get_validation_message(res) == "Not a valid choice"
     assert send_user_account_email.called is False
Ejemplo n.º 9
0
 def test_post_is_successful_for_valid_roles(self, send_user_account_email,
                                             role):
     self.data_api_client.get_user.side_effect = assert_args_and_return(
         None, email_address='*****@*****.**')
     self.data_api_client.email_is_valid_for_admin_user.return_value = True
     res = self.client.post('/admin/admin-users/invite',
                            data={
                                'role': role,
                                'email_address': '*****@*****.**'
                            })
     assert res.status_code == 302
     assert send_user_account_email.called is True
     assert self.data_api_client.get_user.called is True
Ejemplo n.º 10
0
    def test_successful_post_sends_email(self, send_user_account_email):
        self.data_api_client.get_user.side_effect = assert_args_and_return(
            None, email_address='*****@*****.**')
        self.data_api_client.email_is_valid_for_admin_user.return_value = True
        res = self.client.post('/admin/admin-users/invite',
                               data={
                                   'role': 'admin',
                                   'email_address': '*****@*****.**'
                               })

        assert res.status_code == 302
        send_user_account_email.assert_called_once_with(
            'admin',
            '*****@*****.**',
            '08ab7791-6038-4ad2-9560-740bbcb675b7',
            personalisation={'name': 'tester'})
        assert self.data_api_client.get_user.called is True