Skip to content

Commit dc1499d

Browse files
authored
fix: SyncedEnforcer (#191)
Signed-off-by: stonex <[email protected]>
1 parent 28553b6 commit dc1499d

File tree

2 files changed

+42
-40
lines changed

2 files changed

+42
-40
lines changed

casbin/enforcer.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,12 +389,13 @@ void Enforcer::ClearPolicy() {
389389

390390
// LoadPolicy reloads the policy from file/database.
391391
void Enforcer::LoadPolicy() {
392-
this->ClearPolicy();
392+
// must use base's LoadPolicy to avoid dead lock
393+
Enforcer::ClearPolicy();
393394
m_adapter->LoadPolicy(m_model);
394395
m_model->PrintPolicy();
395396

396397
if(m_auto_build_role_links) {
397-
this->BuildRoleLinks();
398+
Enforcer::BuildRoleLinks();
398399
}
399400
}
400401

tests/enforcer_synced_test.cpp

Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -18,57 +18,58 @@
1818

1919
#include <gtest/gtest.h>
2020
#include <casbin/casbin.h>
21+
#include "config_path.h"
2122

2223
namespace {
2324

24-
// void TestSyncFn(casbin::SyncedEnforcer& e, const std::string& sub, const std::string& obj, const std::string& act, bool control) {
25-
// bool response = e.Enforce({ sub, obj, act });
26-
// ASSERT_EQ(response, control);
27-
// }
25+
void TestSyncFn(casbin::SyncedEnforcer& e, const std::string& sub, const std::string& obj, const std::string& act, bool control) {
26+
bool response = e.Enforce({ sub, obj, act });
27+
ASSERT_EQ(response, control);
28+
}
2829

29-
// TEST(TestEnforcerSynced, TestSync) {
30-
// casbin::SyncedEnforcer e(basic_model_path, basic_policy_path);
30+
TEST(TestEnforcerSynced, TestSync) {
31+
casbin::SyncedEnforcer e(basic_model_path, basic_policy_path);
3132

32-
// using namespace std::literals::chrono_literals;
33-
// auto time1 = 200ms;
34-
// e.StartAutoLoadPolicy(time1);
33+
using namespace std::literals::chrono_literals;
34+
auto time1 = 200ms;
35+
e.StartAutoLoadPolicy(time1);
3536

36-
// TestSyncFn(e, "alice", "data1", "read", true);
37-
// TestSyncFn(e, "alice", "data1", "write", false);
38-
// TestSyncFn(e, "alice", "data2", "read", false);
39-
// TestSyncFn(e, "alice", "data2", "write", false);
40-
// TestSyncFn(e, "bob", "data1", "read", false);
41-
// TestSyncFn(e, "bob", "data1", "write", false);
42-
// TestSyncFn(e, "bob", "data2", "read", false);
43-
// TestSyncFn(e, "bob", "data2", "write", true);
37+
TestSyncFn(e, "alice", "data1", "read", true);
38+
TestSyncFn(e, "alice", "data1", "write", false);
39+
TestSyncFn(e, "alice", "data2", "read", false);
40+
TestSyncFn(e, "alice", "data2", "write", false);
41+
TestSyncFn(e, "bob", "data1", "read", false);
42+
TestSyncFn(e, "bob", "data1", "write", false);
43+
TestSyncFn(e, "bob", "data2", "read", false);
44+
TestSyncFn(e, "bob", "data2", "write", true);
4445

45-
// std::this_thread::sleep_for(200ms);
46-
// e.StopAutoLoadPolicy();
47-
// }
46+
std::this_thread::sleep_for(200ms);
47+
e.StopAutoLoadPolicy();
48+
}
4849

49-
// TEST(TestEnforcerSynced, TestStopLoadPolicy) {
50-
// casbin::SyncedEnforcer e(basic_model_path, basic_policy_path);
50+
TEST(TestEnforcerSynced, TestStopLoadPolicy) {
51+
casbin::SyncedEnforcer e(basic_model_path, basic_policy_path);
5152

52-
// using namespace std::literals::chrono_literals;
53-
// std::chrono::duration<int64_t, std::nano> t = 5ms;
53+
using namespace std::literals::chrono_literals;
54+
std::chrono::duration<int64_t, std::nano> t = 5ms;
5455

55-
// e.StartAutoLoadPolicy(t);
56+
e.StartAutoLoadPolicy(t);
5657

57-
// EXPECT_EQ(e.IsAutoLoadingRunning(), true);
58+
EXPECT_EQ(e.IsAutoLoadingRunning(), true);
5859

59-
// TestSyncFn(e , "alice", "data1", "read", true);
60-
// TestSyncFn(e , "alice", "data1", "write", false);
61-
// TestSyncFn(e , "alice", "data2", "read", false);
62-
// TestSyncFn(e , "alice", "data2", "write", false);
63-
// TestSyncFn(e , "bob", "data1", "read", false);
64-
// TestSyncFn(e , "bob", "data1", "write", false);
65-
// TestSyncFn(e , "bob", "data2", "read", false);
66-
// TestSyncFn(e , "bob", "data2", "write", true);
60+
TestSyncFn(e , "alice", "data1", "read", true);
61+
TestSyncFn(e , "alice", "data1", "write", false);
62+
TestSyncFn(e , "alice", "data2", "read", false);
63+
TestSyncFn(e , "alice", "data2", "write", false);
64+
TestSyncFn(e , "bob", "data1", "read", false);
65+
TestSyncFn(e , "bob", "data1", "write", false);
66+
TestSyncFn(e , "bob", "data2", "read", false);
67+
TestSyncFn(e , "bob", "data2", "write", true);
6768

68-
// e.StopAutoLoadPolicy();
69-
// std::this_thread::sleep_for(10ms);
69+
e.StopAutoLoadPolicy();
70+
std::this_thread::sleep_for(10ms);
7071

71-
// EXPECT_EQ(e.IsAutoLoadingRunning(), false);
72-
// }
72+
EXPECT_EQ(e.IsAutoLoadingRunning(), false);
73+
}
7374

7475
} // namespace

0 commit comments

Comments
 (0)