Skip to content

Commit 7daac09

Browse files
committed
feat: Added CTest
Signed-off-by: Yash Pandey (YP) <[email protected]>
1 parent 7143cc4 commit 7daac09

File tree

8 files changed

+97
-0
lines changed

8 files changed

+97
-0
lines changed

CMakeLists.txt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
cmake_minimum_required(VERSION 3.19)
22

3+
set(CMAKE_MODULE_PATH
4+
${CMAKE_MODULE_PATH}
5+
${CMAKE_SOURCE_DIR}/cmake/modules
6+
)
7+
38
set(CMAKE_WARN_DEPRECATED ON)
49

510
if(APPLE AND NOT DEFINED CMAKE_OSX_DEPLOYMENT_TARGET)
@@ -34,6 +39,9 @@ if(NOT DEFINED CMAKE_INSTALL_MESSAGE)
3439
set(CMAKE_INSTALL_MESSAGE "NEVER")
3540
endif()
3641

42+
enable_testing()
43+
add_subdirectory(tests)
44+
3745
# Change the path max size to avoid problem on Windows.
3846
if(NOT DEFINED CMAKE_OBJECT_PATH_MAX)
3947
set(CMAKE_OBJECT_PATH_MAX 300)
@@ -42,4 +50,12 @@ endif()
4250
# Setting to C++ standard to C++17
4351
set(CMAKE_CXX_STANDARD 17)
4452

53+
###############################################################################
54+
# Find or install external dependencies
55+
# Some required targets may be created by third-party CMake configs, which
56+
# don't generally produce global targets. To guarantee all imported targets are
57+
# global, this module is included at the project root level.
58+
59+
include(FindExtPackages)
60+
4561
add_subdirectory(casbin)

casbin/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,16 @@ include_directories(${CMAKE_SOURCE_DIR}/casbin)
77

88
target_precompile_headers(casbin PUBLIC "pch.h")
99

10+
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR})
11+
1012
set_target_properties(casbin PROPERTIES PREFIX "")
1113
if(WIN32 OR MSVC)
1214
set_target_properties(casbin PROPERTIES SUFFIX ".lib")
1315
elseif(UNIX)
1416
set_target_properties(casbin PROPERTIES SUFFIX ".a")
1517
endif()
18+
19+
install(
20+
TARGETS casbin
21+
DESTINATION lib
22+
)

casbin/casbin.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#include "enforcer.h"
2+
#include "enforcer_cached.h"
3+
#include "enforcer_synced.h"
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
###############################################################################
2+
### Global package options ###
3+
4+
set(CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY ON CACHE BOOL
5+
"Disable CMake User Package Registry when finding packages")
6+
7+
set(CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY ON CACHE BOOL
8+
"Disable CMake System Package Registry when finding packages")
9+
10+
###############################################################################
11+
### Packages and versions ###
12+
13+
# googletest
14+
# https://github.com/google/googletest
15+
find_package(googletest 1.11.0 REQUIRED)

cmake/modules/Findgoogletest.cmake

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
include(FetchContent)
2+
FetchContent_Declare(
3+
googletest
4+
URL https://github.com/google/googletest/archive/refs/tags/release-1.11.0.zip
5+
)
6+
# For Windows: Prevent overriding the parent project's compiler/linker settings
7+
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
8+
FetchContent_MakeAvailable(googletest)

tests/CMakeLists.txt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
add_executable(
2+
casbintest
3+
test_enforcer.cpp
4+
main.cpp
5+
)
6+
7+
target_include_directories(casbintest PUBLIC ${CMAKE_SOURCE_DIR})
8+
9+
target_link_libraries(
10+
casbintest
11+
gtest_main
12+
casbin
13+
)
14+
15+
include(GoogleTest)
16+
gtest_discover_tests(casbintest)

tests/main.cpp

Whitespace-only changes.

tests/test_enforcer.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#include <gtest/gtest.h>
2+
#include <casbin/casbin.h>
3+
4+
TEST(TestEnforcer, TestFourParams) {
5+
std::string model = "../../examples/rbac_with_domains_model.conf";
6+
std::string policy = "../../examples/rbac_with_domains_policy.csv";
7+
casbin::Enforcer e = casbin::Enforcer(model, policy);
8+
9+
ASSERT_EQ(e.Enforce({ "alice", "domain1", "data1", "read" }), true);
10+
ASSERT_EQ(e.Enforce({ "alice", "domain1", "data1", "write" }), true);
11+
ASSERT_EQ(e.Enforce({ "alice", "domain1", "data2", "read" }), false);
12+
ASSERT_EQ(e.Enforce({ "alice", "domain1", "data2", "write" }), false);
13+
ASSERT_EQ(e.Enforce({ "bob", "domain2", "data1", "read" }), false);
14+
ASSERT_EQ(e.Enforce({ "bob", "domain2", "data1", "write" }), false);
15+
ASSERT_EQ(e.Enforce({ "bob", "domain2", "data2", "read" }), true);
16+
ASSERT_EQ(e.Enforce({ "bob", "domain2", "data2", "write" }), true);
17+
}
18+
19+
TEST(TestEnforcer, TestThreeParams) {
20+
std::string model = "../../examples/basic_model_without_spaces.conf";
21+
std::string policy = "../../examples/basic_policy.csv";
22+
casbin::Enforcer e(model, policy);
23+
24+
ASSERT_EQ(e.Enforce({ "alice", "data1", "read" }), true);
25+
ASSERT_EQ(e.Enforce({ "alice", "data1", "write" }), false);
26+
ASSERT_EQ(e.Enforce({ "alice", "data2", "read" }), false);
27+
ASSERT_EQ(e.Enforce({ "alice", "data2", "write" }), false);
28+
ASSERT_EQ(e.Enforce({ "bob", "data1", "read" }), false);
29+
ASSERT_EQ(e.Enforce({ "bob", "data1", "write" }), false);
30+
ASSERT_EQ(e.Enforce({ "bob", "data2", "read" }), false);
31+
ASSERT_EQ(e.Enforce({ "bob", "data2", "write" }), true);
32+
}

0 commit comments

Comments
 (0)