Skip to content

Commit 7552b85

Browse files
authored
Add malformed authorization unit test (#2442)
Add malformed authorization header unit tests
1 parent 5f35537 commit 7552b85

File tree

4 files changed

+40
-32
lines changed

4 files changed

+40
-32
lines changed

lib/pbench/test/unit/server/conftest.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from pbench.server.api import create_app, get_server_config
1212
from pbench.server.api.auth import Auth
1313
from pbench.server.database.database import Database
14+
from pbench.server.database.models.datasets import Dataset
1415
from pbench.server.database.models.template import Template
1516
from pbench.server.database.models.users import User
1617
from pbench.test.unit.server.headertypes import HeaderTypes
@@ -491,6 +492,25 @@ def pbench_token(client, server_config):
491492
return data["auth_token"]
492493

493494

495+
@pytest.fixture()
496+
def attach_dataset(pbench_token, create_user):
497+
"""
498+
Mock a Dataset attach call to return an object. We mock the Dataset.attach
499+
method to avoid DB access here, however the user authentication mechanism
500+
is not yet mocked so we have to look up User data.
501+
502+
Args:
503+
pbench_token: create a "drb" user for testing
504+
create_user: create a "test" user
505+
"""
506+
Dataset(
507+
owner="drb", controller="node", name="drb", access="private"
508+
).add() # Created by pbench_token fixture
509+
Dataset(
510+
owner="test", controller="node", name="test", access="private"
511+
).add() # Created by create_user fixture
512+
513+
494514
@pytest.fixture(params=[header for header in HeaderTypes])
495515
def build_auth_header(request, server_config, pbench_token, pbench_admin_token, client):
496516
if request.param == HeaderTypes.VALID_ADMIN:

lib/pbench/test/unit/server/query_apis/commons.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,19 @@ def date_range(self, start: AnyStr, end: AnyStr) -> list:
7979
date_range.append(f"{m.year:04}-{m.month:02}")
8080
return date_range
8181

82+
@pytest.mark.parametrize(
83+
"malformed_token", ("malformed", "bear token" "Bearer malformed"),
84+
)
85+
def test_malformed_authorization_header(
86+
self, client, server_config, malformed_token, attach_dataset
87+
):
88+
response = client.post(
89+
server_config.rest_uri + self.pbench_endpoint,
90+
headers={"Authorization": malformed_token},
91+
json=self.payload,
92+
)
93+
assert response.status_code == HTTPStatus.FORBIDDEN
94+
8295
def test_non_accessible_user_data(self, client, server_config, pbench_token):
8396
"""
8497
Test behavior when Authorization header does not have access to other user's data

lib/pbench/test/unit/server/query_apis/test_datasets_publish.py

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,35 +8,6 @@
88
from pbench.test.unit.server.query_apis.commons import Commons
99

1010

11-
@pytest.fixture()
12-
def attach_dataset(pbench_token, create_user):
13-
"""
14-
Mock a Dataset attach call to return an object. We mock the Dataset.attach
15-
method to avoid DB access here, however the user authentication mechanism
16-
is not yet mocked so we have to look up User data.
17-
18-
Args:
19-
monkeypatch: patching fixture
20-
pbench_token: create a "drb" user for testing
21-
create_user: create a "test" user
22-
"""
23-
datasets = {}
24-
datasets["drb"] = Dataset(
25-
owner="drb", # Created by pbench_token fixture
26-
controller="node",
27-
name="drb",
28-
access="private",
29-
)
30-
datasets["drb"].add()
31-
datasets["test"] = Dataset(
32-
owner="test", # Created by create_user fixture
33-
controller="node",
34-
name="test",
35-
access="private",
36-
)
37-
datasets["test"].add()
38-
39-
4011
@pytest.fixture()
4112
def get_document_map(monkeypatch, attach_dataset):
4213
"""

lib/pbench/test/unit/server/test_requests.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,14 @@ def test_missing_authorization_header(self, client, caplog, server_config):
125125
assert response.status_code == HTTPStatus.UNAUTHORIZED
126126
self.verify_logs(caplog)
127127

128-
def test_malformed_authorization_header(self, client, caplog, server_config):
128+
@pytest.mark.parametrize(
129+
"malformed_token", ("malformed", "bear token" "Bearer malformed"),
130+
)
131+
def test_malformed_authorization_header(
132+
self, client, caplog, server_config, malformed_token
133+
):
129134
response = client.put(
130-
self.gen_uri(server_config),
131-
headers={"Authorization": "Bearer " + "malformed"},
135+
self.gen_uri(server_config), headers={"Authorization": malformed_token},
132136
)
133137
assert response.status_code == HTTPStatus.UNAUTHORIZED
134138
self.verify_logs(caplog)

0 commit comments

Comments
 (0)