Skip to content

Commit

Permalink
fix: SyncedEnforcer (#191)
Browse files Browse the repository at this point in the history
Signed-off-by: stonex <[email protected]>
  • Loading branch information
sheny1xuan authored Mar 13, 2022
1 parent 28553b6 commit dc1499d
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 40 deletions.
5 changes: 3 additions & 2 deletions casbin/enforcer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -389,12 +389,13 @@ void Enforcer::ClearPolicy() {

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

if(m_auto_build_role_links) {
this->BuildRoleLinks();
Enforcer::BuildRoleLinks();
}
}

Expand Down
77 changes: 39 additions & 38 deletions tests/enforcer_synced_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,57 +18,58 @@

#include <gtest/gtest.h>
#include <casbin/casbin.h>
#include "config_path.h"

namespace {

// void TestSyncFn(casbin::SyncedEnforcer& e, const std::string& sub, const std::string& obj, const std::string& act, bool control) {
// bool response = e.Enforce({ sub, obj, act });
// ASSERT_EQ(response, control);
// }
void TestSyncFn(casbin::SyncedEnforcer& e, const std::string& sub, const std::string& obj, const std::string& act, bool control) {
bool response = e.Enforce({ sub, obj, act });
ASSERT_EQ(response, control);
}

// TEST(TestEnforcerSynced, TestSync) {
// casbin::SyncedEnforcer e(basic_model_path, basic_policy_path);
TEST(TestEnforcerSynced, TestSync) {
casbin::SyncedEnforcer e(basic_model_path, basic_policy_path);

// using namespace std::literals::chrono_literals;
// auto time1 = 200ms;
// e.StartAutoLoadPolicy(time1);
using namespace std::literals::chrono_literals;
auto time1 = 200ms;
e.StartAutoLoadPolicy(time1);

// TestSyncFn(e, "alice", "data1", "read", true);
// TestSyncFn(e, "alice", "data1", "write", false);
// TestSyncFn(e, "alice", "data2", "read", false);
// TestSyncFn(e, "alice", "data2", "write", false);
// TestSyncFn(e, "bob", "data1", "read", false);
// TestSyncFn(e, "bob", "data1", "write", false);
// TestSyncFn(e, "bob", "data2", "read", false);
// TestSyncFn(e, "bob", "data2", "write", true);
TestSyncFn(e, "alice", "data1", "read", true);
TestSyncFn(e, "alice", "data1", "write", false);
TestSyncFn(e, "alice", "data2", "read", false);
TestSyncFn(e, "alice", "data2", "write", false);
TestSyncFn(e, "bob", "data1", "read", false);
TestSyncFn(e, "bob", "data1", "write", false);
TestSyncFn(e, "bob", "data2", "read", false);
TestSyncFn(e, "bob", "data2", "write", true);

// std::this_thread::sleep_for(200ms);
// e.StopAutoLoadPolicy();
// }
std::this_thread::sleep_for(200ms);
e.StopAutoLoadPolicy();
}

// TEST(TestEnforcerSynced, TestStopLoadPolicy) {
// casbin::SyncedEnforcer e(basic_model_path, basic_policy_path);
TEST(TestEnforcerSynced, TestStopLoadPolicy) {
casbin::SyncedEnforcer e(basic_model_path, basic_policy_path);

// using namespace std::literals::chrono_literals;
// std::chrono::duration<int64_t, std::nano> t = 5ms;
using namespace std::literals::chrono_literals;
std::chrono::duration<int64_t, std::nano> t = 5ms;

// e.StartAutoLoadPolicy(t);
e.StartAutoLoadPolicy(t);

// EXPECT_EQ(e.IsAutoLoadingRunning(), true);
EXPECT_EQ(e.IsAutoLoadingRunning(), true);

// TestSyncFn(e , "alice", "data1", "read", true);
// TestSyncFn(e , "alice", "data1", "write", false);
// TestSyncFn(e , "alice", "data2", "read", false);
// TestSyncFn(e , "alice", "data2", "write", false);
// TestSyncFn(e , "bob", "data1", "read", false);
// TestSyncFn(e , "bob", "data1", "write", false);
// TestSyncFn(e , "bob", "data2", "read", false);
// TestSyncFn(e , "bob", "data2", "write", true);
TestSyncFn(e , "alice", "data1", "read", true);
TestSyncFn(e , "alice", "data1", "write", false);
TestSyncFn(e , "alice", "data2", "read", false);
TestSyncFn(e , "alice", "data2", "write", false);
TestSyncFn(e , "bob", "data1", "read", false);
TestSyncFn(e , "bob", "data1", "write", false);
TestSyncFn(e , "bob", "data2", "read", false);
TestSyncFn(e , "bob", "data2", "write", true);

// e.StopAutoLoadPolicy();
// std::this_thread::sleep_for(10ms);
e.StopAutoLoadPolicy();
std::this_thread::sleep_for(10ms);

// EXPECT_EQ(e.IsAutoLoadingRunning(), false);
// }
EXPECT_EQ(e.IsAutoLoadingRunning(), false);
}

} // namespace

0 comments on commit dc1499d

Please sign in to comment.