Skip to content

Commit 8faf959

Browse files
committed
feat: add role manager test
1 parent 2399831 commit 8faf959

File tree

3 files changed

+187
-0
lines changed

3 files changed

+187
-0
lines changed

test/test.vcxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@
168168
<ClCompile Include="test_built_in_functions.cpp" />
169169
<ClCompile Include="test_config.cpp" />
170170
<ClCompile Include="test_model.cpp" />
171+
<ClCompile Include="test_role_manager.cpp" />
171172
<ClCompile Include="test_util.cpp" />
172173
</ItemGroup>
173174
<ItemGroup>

test/test.vcxproj.filters

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
<ClCompile Include="test_built_in_functions.cpp">
3131
<Filter>Source Files</Filter>
3232
</ClCompile>
33+
<ClCompile Include="test_role_manager.cpp">
34+
<Filter>Source Files</Filter>
35+
</ClCompile>
3336
</ItemGroup>
3437
<ItemGroup>
3538
<ClInclude Include="pch.h">

test/test_role_manager.cpp

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
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

Comments
 (0)