11#!/usr/bin/env python
22import argparse
33import json
4+ from dataclasses import dataclass , field
45
56import 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