1+ -- Copyright 2021 The casbin Authors. All Rights Reserved.
2+ --
3+ -- Licensed under the Apache License, Version 2.0 (the "License");
4+ -- you may not use this file except in compliance with the License.
5+ -- You may obtain a copy of the License at
6+ --
7+ -- http://www.apache.org/licenses/LICENSE-2.0
8+ --
9+ -- Unless required by applicable law or agreed to in writing, software
10+ -- distributed under the License is distributed on an "AS IS" BASIS,
11+ -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+ -- See the License for the specific language governing permissions and
13+ -- limitations under the License.
14+
15+ local filtered_adapter_module = require (" src.persist.file_adapter.FilteredAdapter" )
16+ local enforcer_module = require (" src.main.Enforcer" )
17+ local path = os.getenv (" PWD" ) or io.popen (" cd" ):read ()
18+
19+ describe (" FilteredAdapter tests" , function ()
20+ it (" init FilteredAdapter test" , function ()
21+ local adapter = FilteredAdapter :new (path .. " /examples/rbac_with_domains_policy.csv" )
22+ local e = Enforcer :new (path .. " /examples/rbac_with_domains_model.conf" , adapter )
23+ assert .is .False (e :HasPolicy (" admin" , " domain1" , " data1" , " read" ))
24+ end )
25+
26+ it (" load filtered policy test" , function ()
27+ local adapter = FilteredAdapter :new (path .. " /examples/rbac_with_domains_policy.csv" )
28+ local e = Enforcer :new (path .. " /examples/rbac_with_domains_model.conf" , path .. " /examples/rbac_with_domains_policy.csv" )
29+ e :setAdapter (adapter )
30+
31+ assert .is .True (e :HasPolicy (" admin" , " domain1" , " data1" , " read" ))
32+ assert .is .True (e :HasPolicy (" admin" , " domain2" , " data2" , " read" ))
33+
34+ local filter = {}
35+ setmetatable (filter , Filter )
36+ filter .G = {" " , " " , " domain1" }
37+ filter .P = {" " , " domain1" }
38+
39+ e :loadFilteredPolicy (filter )
40+
41+ assert .is .True (e :HasPolicy (" admin" , " domain1" , " data1" , " read" ))
42+ assert .is .False (e :HasPolicy (" admin" , " domain2" , " data2" , " read" ))
43+ end )
44+
45+ it (" invalid filter test" , function ()
46+ local adapter = FilteredAdapter :new (path .. " /examples/rbac_with_domains_policy.csv" )
47+ local e = Enforcer :new (path .. " /examples/rbac_with_domains_model.conf" , path .. " /examples/rbac_with_domains_policy.csv" )
48+ e :setAdapter (adapter )
49+
50+ local filter = {" " , " domain1" }
51+ assert .has_error (function ()
52+ e :loadFilteredPolicy (filter )
53+ end )
54+ end )
55+
56+ it (" empty filter test" , function ()
57+ local adapter = FilteredAdapter :new (path .. " /examples/rbac_with_domains_policy.csv" )
58+ local e = Enforcer :new (path .. " /examples/rbac_with_domains_model.conf" , path .. " /examples/rbac_with_domains_policy.csv" )
59+ e :setAdapter (adapter )
60+
61+ e :loadFilteredPolicy (nil )
62+
63+ assert .is .False (e .adapter .isFiltered )
64+ end )
65+
66+ it (" unsupported filtered policy test" , function ()
67+ local e = Enforcer :new (path .. " /examples/rbac_with_domains_model.conf" , path .. " /examples/rbac_with_domains_policy.csv" )
68+
69+ local filter = {}
70+ setmetatable (filter , Filter )
71+ filter .G = {" " , " " , " domain1" }
72+ filter .P = {" " , " domain1" }
73+ assert .has_error (function ()
74+ e :loadFilteredPolicy (filter )
75+ end )
76+ end )
77+
78+ it (" invalid file path test" , function ()
79+ local adapter = FilteredAdapter :new (path .. " /examples/does_not_exist_policy.csv" )
80+ local e = Enforcer :new (path .. " /examples/rbac_with_domains_model.conf" , path .. " /examples/rbac_with_domains_policy.csv" )
81+ e :setAdapter (adapter )
82+
83+ assert .has_error (function ()
84+ e :loadFilteredPolicy (nil )
85+ end )
86+ end )
87+ end )
0 commit comments