1+ #pragma once
2+
3+ #include " pch.h"
4+
5+ #include < rbac.h>
6+
7+ using namespace std ;
8+
9+ namespace test_role_manager
10+ {
11+ TEST_CLASS (TestRoleManager)
12+ {
13+ public:
14+ void TestRole (RoleManager* rm, string name1, string name2, bool res) {
15+ bool my_res = rm->HasLink (name1, name2);
16+
17+ Assert::AreEqual (res, my_res);
18+ }
19+
20+ void TestDomainRole (RoleManager* rm, string name1, string name2, vector<string> domain, bool res) {
21+ bool my_res = rm->HasLink (name1, name2, domain);
22+
23+ Assert::AreEqual (res, my_res);
24+ }
25+
26+ TEST_METHOD (TestRole) {
27+ RoleManager* rm = DefaultRoleManager :: NewRoleManager (3 );
28+ rm->AddLink (" u1" , " g1" );
29+ rm->AddLink (" u2" , " g1" );
30+ rm->AddLink (" u3" , " g2" );
31+ rm->AddLink (" u4" , " g2" );
32+ rm->AddLink (" u4" , " g3" );
33+ rm->AddLink (" g1" , " g3" );
34+
35+ // Current role inheritance tree:
36+ // g3 g2
37+ // / \ / \
38+ // g1 u4 u3
39+ // / \
40+ // u1 u2
41+
42+ TestRole (rm, " u1" , " g1" , true );
43+ TestRole (rm, " u1" , " g2" , false );
44+ TestRole (rm, " u1" , " g3" , true );
45+ TestRole (rm, " u2" , " g1" , true );
46+ TestRole (rm, " u2" , " g2" , false );
47+ TestRole (rm, " u2" , " g3" , true );
48+ TestRole (rm, " u3" , " g1" , false );
49+ TestRole (rm, " u3" , " g2" , true );
50+ TestRole (rm, " u3" , " g3" , false );
51+ TestRole (rm, " u4" , " g1" , false );
52+ TestRole (rm, " u4" , " g2" , true );
53+ TestRole (rm, " u4" , " g3" , true );
54+
55+ rm->DeleteLink (" g1" , " g3" );
56+ rm->DeleteLink (" u4" , " g2" );
57+
58+ // Current role inheritance tree after deleting the links:
59+ // g3 g2
60+ // \ \
61+ // g1 u4 u3
62+ // / \
63+ // u1 u2
64+
65+ TestRole (rm, " u1" , " g1" , true );
66+ TestRole (rm, " u1" , " g2" , false );
67+ TestRole (rm, " u1" , " g3" , false );
68+ TestRole (rm, " u2" , " g1" , true );
69+ TestRole (rm, " u2" , " g2" , false );
70+ TestRole (rm, " u2" , " g3" , false );
71+ TestRole (rm, " u3" , " g1" , false );
72+ TestRole (rm, " u3" , " g2" , true );
73+ TestRole (rm, " u3" , " g3" , false );
74+ TestRole (rm, " u4" , " g1" , false );
75+ TestRole (rm, " u4" , " g2" , false );
76+ TestRole (rm, " u4" , " g3" , true );
77+ }
78+
79+ TEST_METHOD (TestDomainRole) {
80+ RoleManager* rm = DefaultRoleManager :: NewRoleManager (3 );
81+ vector<string> domain1{ " domain1" };
82+ vector<string> domain2{ " domain2" };
83+ rm->AddLink (" u1" , " g1" , domain1);
84+ rm->AddLink (" u2" , " g1" , domain1);
85+ rm->AddLink (" u3" , " admin" , domain2);
86+ rm->AddLink (" u4" , " admin" , domain2);
87+ rm->AddLink (" u4" , " admin" , domain1);
88+ rm->AddLink (" g1" , " admin" , domain1);
89+
90+ // Current role inheritance tree:
91+ // domain1:admin domain2:admin
92+ // / \ / \
93+ // domain1:g1 u4 u3
94+ // / \
95+ // u1 u2
96+
97+ TestDomainRole (rm, " u1" , " g1" , domain1, true );
98+ TestDomainRole (rm, " u1" , " g1" , domain2, false );
99+ TestDomainRole (rm, " u1" , " admin" , domain1, true );
100+ TestDomainRole (rm, " u1" , " admin" , domain2, false );
101+
102+ TestDomainRole (rm, " u2" , " g1" , domain1, true );
103+ TestDomainRole (rm, " u2" , " g1" , domain2, false );
104+ TestDomainRole (rm, " u2" , " admin" , domain1, true );
105+ TestDomainRole (rm, " u2" , " admin" , domain2, false );
106+
107+ TestDomainRole (rm, " u3" , " g1" , domain1, false );
108+ TestDomainRole (rm, " u3" , " g1" , domain2, false );
109+ TestDomainRole (rm, " u3" , " admin" , domain1, false );
110+ TestDomainRole (rm, " u3" , " admin" , domain2, true );
111+
112+ TestDomainRole (rm, " u4" , " g1" , domain1, false );
113+ TestDomainRole (rm, " u4" , " g1" , domain2, false );
114+ TestDomainRole (rm, " u4" , " admin" , domain1, true );
115+ TestDomainRole (rm, " u4" , " admin" , domain2, true );
116+
117+ rm->DeleteLink (" g1" , " admin" , domain1);
118+ rm->DeleteLink (" u4" , " admin" , domain2);
119+
120+ // Current role inheritance tree after deleting the links:
121+ // domain1:admin domain2:admin
122+ // \ \
123+ // domain1:g1 u4 u3
124+ // / \
125+ // u1 u2
126+
127+ TestDomainRole (rm, " u1" , " g1" , domain1, true );
128+ TestDomainRole (rm, " u1" , " g1" , domain2, false );
129+ TestDomainRole (rm, " u1" , " admin" , domain1, false );
130+ TestDomainRole (rm, " u1" , " admin" , domain2, false );
131+
132+ TestDomainRole (rm, " u2" , " g1" , domain1, true );
133+ TestDomainRole (rm, " u2" , " g1" , domain2, false );
134+ TestDomainRole (rm, " u2" , " admin" , domain1, false );
135+ TestDomainRole (rm, " u2" , " admin" , domain2, false );
136+
137+ TestDomainRole (rm, " u3" , " g1" , domain1, false );
138+ TestDomainRole (rm, " u3" , " g1" , domain2, false );
139+ TestDomainRole (rm, " u3" , " admin" , domain1, false );
140+ TestDomainRole (rm, " u3" , " admin" , domain2, true );
141+
142+ TestDomainRole (rm, " u4" , " g1" , domain1, false );
143+ TestDomainRole (rm, " u4" , " g1" , domain2, false );
144+ TestDomainRole (rm, " u4" , " admin" , domain1, true );
145+ TestDomainRole (rm, " u4" , " admin" , domain2, false );
146+ }
147+
148+ TEST_METHOD (TestClear) {
149+ RoleManager* rm = DefaultRoleManager::NewRoleManager (3 );
150+ rm->AddLink (" u1" , " g1" );
151+ rm->AddLink (" u2" , " g1" );
152+ rm->AddLink (" u3" , " g2" );
153+ rm->AddLink (" u4" , " g2" );
154+ rm->AddLink (" u4" , " g3" );
155+ rm->AddLink (" g1" , " g3" );
156+
157+ // Current role inheritance tree:
158+ // g3 g2
159+ // / \ / \
160+ // g1 u4 u3
161+ // / \
162+ // u1 u2
163+
164+ rm->Clear ();
165+
166+ // All data is cleared.
167+ // No role inheritance now.
168+
169+ TestRole (rm, " u1" , " g1" , false );
170+ TestRole (rm, " u1" , " g2" , false );
171+ TestRole (rm, " u1" , " g3" , false );
172+ TestRole (rm, " u2" , " g1" , false );
173+ TestRole (rm, " u2" , " g2" , false );
174+ TestRole (rm, " u2" , " g3" , false );
175+ TestRole (rm, " u3" , " g1" , false );
176+ TestRole (rm, " u3" , " g2" , false );
177+ TestRole (rm, " u3" , " g3" , false );
178+ TestRole (rm, " u4" , " g1" , false );
179+ TestRole (rm, " u4" , " g2" , false );
180+ TestRole (rm, " u4" , " g3" , false );
181+ }
182+ };
183+ }
0 commit comments