public void TestAutoCleanCache() { #if !NET452 var e = new Enforcer(_testModelFixture.GetBasicTestModel()) { Logger = new MockLogger <Enforcer>(_testOutputHelper) }; #else var e = new Enforcer(_testModelFixture.GetBasicTestModel()); #endif e.EnableCache(true); TestEnforce(e, "alice", "data1", "read", true); TestEnforce(e, "alice", "data1", "write", false); TestEnforce(e, "alice", "data2", "read", false); TestEnforce(e, "alice", "data2", "write", false); // The cache is enabled, so even if we remove a policy rule, the decision // for ("alice", "data1", "read") will still be true, as it uses the cached result. _ = e.RemovePolicy("alice", "data1", "read"); TestEnforce(e, "alice", "data1", "read", false); TestEnforce(e, "alice", "data1", "write", false); TestEnforce(e, "alice", "data2", "read", false); TestEnforce(e, "alice", "data2", "write", false); }
private void GlobalSetupFromFile(string modelFileName, string policyFileName = null) { if (policyFileName is null) { NowEnforcer = new Enforcer(GetTestFilePath(modelFileName)); NowEnforcer.EnableCache(true); return; } NowEnforcer = new Enforcer(GetTestFilePath(modelFileName), GetTestFilePath(policyFileName)); NowEnforcer.EnableCache(true); }
public void TestEnforceWithCache() { #if !NET452 var e = new Enforcer(_testModelFixture.GetBasicTestModel()) { Logger = new MockLogger <Enforcer>(_testOutputHelper) }; #else var e = new Enforcer(_testModelFixture.GetBasicTestModel()); #endif e.EnableCache(true); e.EnableAutoCleanEnforceCache(false); TestEnforce(e, "alice", "data1", "read", true); TestEnforce(e, "alice", "data1", "write", false); TestEnforce(e, "alice", "data2", "read", false); TestEnforce(e, "alice", "data2", "write", false); // The cache is enabled, so even if we remove a policy rule, the decision // for ("alice", "data1", "read") will still be true, as it uses the cached result. _ = e.RemovePolicy("alice", "data1", "read"); TestEnforce(e, "alice", "data1", "read", true); TestEnforce(e, "alice", "data1", "write", false); TestEnforce(e, "alice", "data2", "read", false); TestEnforce(e, "alice", "data2", "write", false); // Now we invalidate the cache, then all first-coming Enforce() has to be evaluated in real-time. // The decision for ("alice", "data1", "read") will be false now. e.EnforceCache.Clear(); TestEnforce(e, "alice", "data1", "read", false); TestEnforce(e, "alice", "data1", "write", false); TestEnforce(e, "alice", "data2", "read", false); TestEnforce(e, "alice", "data2", "write", false); }