Skip to content

Commit e4b3683

Browse files
committed
test for normalized user name
1 parent 917b928 commit e4b3683

File tree

1 file changed

+63
-38
lines changed

1 file changed

+63
-38
lines changed

tests/templates/kuttl/ad-user-info/test-regorule.py

Lines changed: 63 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,64 @@
11
#!/usr/bin/env python
22
import argparse
33
import json
4+
from dataclasses import dataclass, field
45

56
import requests
67

7-
# todo: make the test more comprehensive to check customAttributes
8-
users_and_groups = {
9-
"alice@sble.test": [
10-
"CN=Superset Admins,CN=Users,DC=sble,DC=test",
11-
"CN=Domain Users,CN=Users,DC=sble,DC=test",
12-
"CN=Users,CN=Builtin,DC=sble,DC=test",
13-
],
14-
"alice": [
15-
"CN=Superset Admins,CN=Users,DC=sble,DC=test",
16-
"CN=Domain Users,CN=Users,DC=sble,DC=test",
17-
"CN=Users,CN=Builtin,DC=sble,DC=test",
18-
],
19-
"sam-alice": [
20-
"CN=Superset Admins,CN=Users,DC=sble,DC=test",
21-
"CN=Domain Users,CN=Users,DC=sble,DC=test",
22-
"CN=Users,CN=Builtin,DC=sble,DC=test",
23-
],
24-
"bob@sble.test": [
25-
"CN=Domain Users,CN=Users,DC=sble,DC=test",
26-
"CN=Users,CN=Builtin,DC=sble,DC=test",
27-
],
28-
"charlie@CUSTOM.TEST": [
29-
"CN=Domain Users,CN=Users,DC=sble,DC=test",
30-
"CN=Users,CN=Builtin,DC=sble,DC=test",
31-
],
8+
9+
@dataclass
10+
class Fixture:
11+
expected_username: str
12+
expected_groups: list[str] = field(default_factory=list)
13+
expected_custom_attributes: dict[str, str] = field(default_factory=dict)
14+
15+
16+
fixtures = {
17+
"alice@sble.test": Fixture(
18+
expected_username="alice@sble.test",
19+
expected_groups=[
20+
"CN=Superset Admins,CN=Users,DC=sble,DC=test",
21+
"CN=Domain Users,CN=Users,DC=sble,DC=test",
22+
"CN=Users,CN=Builtin,DC=sble,DC=test",
23+
],
24+
),
25+
"alice": Fixture(
26+
expected_username="alice@sble.test",
27+
expected_groups=[
28+
"CN=Superset Admins,CN=Users,DC=sble,DC=test",
29+
"CN=Domain Users,CN=Users,DC=sble,DC=test",
30+
"CN=Users,CN=Builtin,DC=sble,DC=test",
31+
],
32+
),
33+
"sam-alice": Fixture(
34+
expected_username="alice@sble.test",
35+
expected_groups=[
36+
"CN=Superset Admins,CN=Users,DC=sble,DC=test",
37+
"CN=Domain Users,CN=Users,DC=sble,DC=test",
38+
"CN=Users,CN=Builtin,DC=sble,DC=test",
39+
],
40+
),
41+
"bob@sble.test": Fixture(
42+
expected_username="bob@SBLE.TEST",
43+
expected_groups=[
44+
"CN=Domain Users,CN=Users,DC=sble,DC=test",
45+
"CN=Users,CN=Builtin,DC=sble,DC=test",
46+
],
47+
),
48+
"charlie@CUSTOM.TEST": Fixture(
49+
expected_username="charlie@custom.test",
50+
expected_groups=[
51+
"CN=Domain Users,CN=Users,DC=sble,DC=test",
52+
"CN=Users,CN=Builtin,DC=sble,DC=test",
53+
],
54+
),
3255
}
3356

3457

35-
def assertions(
36-
username, response, opa_attribute, expected_groups, expected_attributes={}
37-
):
58+
def assertions(username, response, opa_attribute, fixture):
3859
assert "result" in response
3960
result = response["result"]
40-
print(result)
61+
# print(result)
4162
assert opa_attribute in result, f"expected {opa_attribute} in {result}"
4263

4364
# repeated the right hand side for better output on error
@@ -46,17 +67,21 @@ def assertions(
4667
assert "id" in result[opa_attribute]
4768
assert "username" in result[opa_attribute]
4869

70+
assert result[opa_attribute]["username"] == fixture.expected_username, (
71+
f"for {username=} got user name {result[opa_attribute]['username']}, expected: {fixture.expected_username}"
72+
)
73+
4974
# todo: split out group assertions
50-
print(f"Testing for {username} in groups {expected_groups}")
5175
groups = sorted(result[opa_attribute]["groups"])
52-
expected_groups = sorted(expected_groups)
53-
assert groups == expected_groups, f"got {groups}, expected: {expected_groups}"
76+
expected_groups = sorted(fixture.expected_groups)
77+
assert groups == expected_groups, (
78+
f"for {username=} got {groups=}, expected: {expected_groups=}"
79+
)
5480

5581
# todo: split out customAttribute assertions
56-
print(f"Testing for {username} with customAttributes {expected_attributes}")
5782
custom_attributes = result[opa_attribute]["customAttributes"]
58-
assert custom_attributes == expected_attributes, (
59-
f"got {custom_attributes}, expected: {expected_attributes}"
83+
assert custom_attributes == fixture.expected_custom_attributes, (
84+
f"for {username=} got {custom_attributes=}, expected: {fixture.expected_custom_attributes}"
6085
)
6186

6287

@@ -74,19 +99,19 @@ def make_request(payload):
7499
)
75100
return response.json()
76101

77-
for username, groups in users_and_groups.items():
102+
for username, fixture in fixtures.items():
78103
try:
79104
# todo: try this out locally until it works
80105
# url = 'http://test-opa-svc:8081/v1/data'
81106
payload = {"input": {"username": username}}
82107
response = make_request(payload)
83-
assertions(username, response, "currentUserInfoByUsername", groups, {})
108+
assertions(username, response, "currentUserInfoByUsername", fixture)
84109

85110
# do the reverse lookup
86111
user_id = response["result"]["currentUserInfoByUsername"]["id"]
87112
payload = {"input": {"id": user_id}}
88113
response = make_request(payload)
89-
assertions(username, response, "currentUserInfoById", groups, {})
114+
assertions(username, response, "currentUserInfoById", fixture)
90115
except Exception as e:
91116
print(f"exception: {e}")
92117
if response is not None:

0 commit comments

Comments
 (0)