From 23860cfe6b93d6c93844a643b30af0abf98637a1 Mon Sep 17 00:00:00 2001 From: mbierma <3448579-mbierma@users.noreply.gitlab.com> Date: Mon, 20 May 2024 10:05:14 -0700 Subject: [PATCH] fix: FastEnforcer not fast --- casbin/fast_enforcer.py | 2 +- tests/test_fast_enforcer.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/casbin/fast_enforcer.py b/casbin/fast_enforcer.py index 72e38ce..fd000dd 100644 --- a/casbin/fast_enforcer.py +++ b/casbin/fast_enforcer.py @@ -31,7 +31,7 @@ def enforce(self, *rvals): """decides whether a "subject" can access a "object" with the operation "action", input parameters are usually: (sub, obj, act). """ - if FastEnforcer._cache_key_order is None: + if self._cache_key_order is None: result, _ = self.enforce_ex(*rvals) else: keys = [rvals[x] for x in self._cache_key_order] diff --git a/tests/test_fast_enforcer.py b/tests/test_fast_enforcer.py index b2a2ecc..ee55de5 100644 --- a/tests/test_fast_enforcer.py +++ b/tests/test_fast_enforcer.py @@ -13,6 +13,7 @@ # limitations under the License. import os +import time from typing import Sequence from unittest import TestCase @@ -35,6 +36,24 @@ def get_enforcer(self, model=None, adapter=None, cache_key_order: Sequence[int] class TestFastEnforcer(TestCaseBase): + def test_performance(self) -> None: + e1 = self.get_enforcer( + get_examples("performance/rbac_with_pattern_large_scale_model.conf"), + get_examples("performance/rbac_with_pattern_large_scale_policy.csv"), + ) + e2 = self.get_enforcer( + get_examples("performance/rbac_with_pattern_large_scale_model.conf"), + get_examples("performance/rbac_with_pattern_large_scale_policy.csv"), + [2, 1], + ) + s_e1 = time.perf_counter() + e1.enforce("alice", "data1", "read") + t_e1 = time.perf_counter() - s_e1 + s_e2 = time.perf_counter() + e2.enforce("alice", "data1", "read") + t_e2 = time.perf_counter() - s_e2 + assert t_e1 > t_e2 * 5 + def test_creates_proper_policy(self) -> None: e = self.get_enforcer( get_examples("basic_model.conf"),