Skip to content

Commit

Permalink
feat: add role manager test
Browse files Browse the repository at this point in the history
  • Loading branch information
divy9881 committed Jun 24, 2020
1 parent 2399831 commit 8faf959
Show file tree
Hide file tree
Showing 3 changed files with 187 additions and 0 deletions.
1 change: 1 addition & 0 deletions test/test.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@
<ClCompile Include="test_built_in_functions.cpp" />
<ClCompile Include="test_config.cpp" />
<ClCompile Include="test_model.cpp" />
<ClCompile Include="test_role_manager.cpp" />
<ClCompile Include="test_util.cpp" />
</ItemGroup>
<ItemGroup>
Expand Down
3 changes: 3 additions & 0 deletions test/test.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@
<ClCompile Include="test_built_in_functions.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="test_role_manager.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="pch.h">
Expand Down
183 changes: 183 additions & 0 deletions test/test_role_manager.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
#pragma once

#include "pch.h"

#include <rbac.h>

using namespace std;

namespace test_role_manager
{
TEST_CLASS(TestRoleManager)
{
public:
void TestRole(RoleManager* rm, string name1, string name2, bool res) {
bool my_res = rm->HasLink(name1, name2);

Assert::AreEqual(res, my_res);
}

void TestDomainRole(RoleManager* rm, string name1, string name2, vector<string> domain, bool res) {
bool my_res = rm->HasLink(name1, name2, domain);

Assert::AreEqual(res, my_res);
}

TEST_METHOD(TestRole) {
RoleManager* rm = DefaultRoleManager :: NewRoleManager(3);
rm->AddLink("u1", "g1");
rm->AddLink("u2", "g1");
rm->AddLink("u3", "g2");
rm->AddLink("u4", "g2");
rm->AddLink("u4", "g3");
rm->AddLink("g1", "g3");

// Current role inheritance tree:
// g3 g2
// / \ / \
// g1 u4 u3
// / \
// u1 u2

TestRole(rm, "u1", "g1", true);
TestRole(rm, "u1", "g2", false);
TestRole(rm, "u1", "g3", true);
TestRole(rm, "u2", "g1", true);
TestRole(rm, "u2", "g2", false);
TestRole(rm, "u2", "g3", true);
TestRole(rm, "u3", "g1", false);
TestRole(rm, "u3", "g2", true);
TestRole(rm, "u3", "g3", false);
TestRole(rm, "u4", "g1", false);
TestRole(rm, "u4", "g2", true);
TestRole(rm, "u4", "g3", true);

rm->DeleteLink("g1", "g3");
rm->DeleteLink("u4", "g2");

// Current role inheritance tree after deleting the links:
// g3 g2
// \ \
// g1 u4 u3
// / \
// u1 u2

TestRole(rm, "u1", "g1", true);
TestRole(rm, "u1", "g2", false);
TestRole(rm, "u1", "g3", false);
TestRole(rm, "u2", "g1", true);
TestRole(rm, "u2", "g2", false);
TestRole(rm, "u2", "g3", false);
TestRole(rm, "u3", "g1", false);
TestRole(rm, "u3", "g2", true);
TestRole(rm, "u3", "g3", false);
TestRole(rm, "u4", "g1", false);
TestRole(rm, "u4", "g2", false);
TestRole(rm, "u4", "g3", true);
}

TEST_METHOD(TestDomainRole) {
RoleManager* rm = DefaultRoleManager :: NewRoleManager(3);
vector<string> domain1{ "domain1" };
vector<string> domain2{ "domain2" };
rm->AddLink("u1", "g1", domain1);
rm->AddLink("u2", "g1", domain1);
rm->AddLink("u3", "admin", domain2);
rm->AddLink("u4", "admin", domain2);
rm->AddLink("u4", "admin", domain1);
rm->AddLink("g1", "admin", domain1);

// Current role inheritance tree:
// domain1:admin domain2:admin
// / \ / \
// domain1:g1 u4 u3
// / \
// u1 u2

TestDomainRole(rm, "u1", "g1", domain1, true);
TestDomainRole(rm, "u1", "g1", domain2, false);
TestDomainRole(rm, "u1", "admin", domain1, true);
TestDomainRole(rm, "u1", "admin", domain2, false);

TestDomainRole(rm, "u2", "g1", domain1, true);
TestDomainRole(rm, "u2", "g1", domain2, false);
TestDomainRole(rm, "u2", "admin", domain1, true);
TestDomainRole(rm, "u2", "admin", domain2, false);

TestDomainRole(rm, "u3", "g1", domain1, false);
TestDomainRole(rm, "u3", "g1", domain2, false);
TestDomainRole(rm, "u3", "admin", domain1, false);
TestDomainRole(rm, "u3", "admin", domain2, true);

TestDomainRole(rm, "u4", "g1", domain1, false);
TestDomainRole(rm, "u4", "g1", domain2, false);
TestDomainRole(rm, "u4", "admin", domain1, true);
TestDomainRole(rm, "u4", "admin", domain2, true);

rm->DeleteLink("g1", "admin", domain1);
rm->DeleteLink("u4", "admin", domain2);

// Current role inheritance tree after deleting the links:
// domain1:admin domain2:admin
// \ \
// domain1:g1 u4 u3
// / \
// u1 u2

TestDomainRole(rm, "u1", "g1", domain1, true);
TestDomainRole(rm, "u1", "g1", domain2, false);
TestDomainRole(rm, "u1", "admin", domain1, false);
TestDomainRole(rm, "u1", "admin", domain2, false);

TestDomainRole(rm, "u2", "g1", domain1, true);
TestDomainRole(rm, "u2", "g1", domain2, false);
TestDomainRole(rm, "u2", "admin", domain1, false);
TestDomainRole(rm, "u2", "admin", domain2, false);

TestDomainRole(rm, "u3", "g1", domain1, false);
TestDomainRole(rm, "u3", "g1", domain2, false);
TestDomainRole(rm, "u3", "admin", domain1, false);
TestDomainRole(rm, "u3", "admin", domain2, true);

TestDomainRole(rm, "u4", "g1", domain1, false);
TestDomainRole(rm, "u4", "g1", domain2, false);
TestDomainRole(rm, "u4", "admin", domain1, true);
TestDomainRole(rm, "u4", "admin", domain2, false);
}

TEST_METHOD(TestClear) {
RoleManager* rm = DefaultRoleManager::NewRoleManager(3);
rm->AddLink("u1", "g1");
rm->AddLink("u2", "g1");
rm->AddLink("u3", "g2");
rm->AddLink("u4", "g2");
rm->AddLink("u4", "g3");
rm->AddLink("g1", "g3");

// Current role inheritance tree:
// g3 g2
// / \ / \
// g1 u4 u3
// / \
// u1 u2

rm->Clear();

// All data is cleared.
// No role inheritance now.

TestRole(rm, "u1", "g1", false);
TestRole(rm, "u1", "g2", false);
TestRole(rm, "u1", "g3", false);
TestRole(rm, "u2", "g1", false);
TestRole(rm, "u2", "g2", false);
TestRole(rm, "u2", "g3", false);
TestRole(rm, "u3", "g1", false);
TestRole(rm, "u3", "g2", false);
TestRole(rm, "u3", "g3", false);
TestRole(rm, "u4", "g1", false);
TestRole(rm, "u4", "g2", false);
TestRole(rm, "u4", "g3", false);
}
};
}

0 comments on commit 8faf959

Please sign in to comment.