blob: 4b1a9b3718d2d746f2a3da31c66d3b03e2623f62 [file]
-- Licensed to the Apache Software Foundation (ASF) under one
-- or more contributor license agreements. See the NOTICE file
-- distributed with this work for additional information
-- regarding copyright ownership. The ASF licenses this file
-- to you under the Apache License, Version 2.0 (the
-- "License"); you may not use this file except in compliance
-- with the License. You may obtain a copy of the License at
--
-- https://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing,
-- software distributed under the License is distributed on an
-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-- KIND, either express or implied. See the License for the
-- specific language governing permissions and limitations
-- under the License.
local Enforcer = require("src.main.Enforcer")
local path = os.getenv("PWD") or io.popen("cd"):read()
describe("Internal API tests", function ()
it("Add Policy test", function ()
local model = path .. "/examples/rbac_model.conf"
local policy = path .. "/examples/rbac_policy.csv"
local e = Enforcer:new(model, policy)
assert.is.False(e:enforce("alice", "data1", "write"))
e:addPolicy("p", "p", {"alice", "data1", "write"})
assert.is.True(e:enforce("alice", "data1", "write"))
assert.is.False(e:enforce("bob", "data2", "read"))
e:addPolicy("g", "g", {"bob", "data2_admin"})
assert.is.True(e:enforce("bob", "data2", "read"))
end)
it("Remove Policy tests", function ()
local model = path .. "/examples/rbac_model.conf"
local policy = path .. "/examples/rbac_policy.csv"
local e = Enforcer:new(model, policy)
assert.is.True(e:enforce("alice", "data1", "read"))
e:removePolicy("p", "p", {"alice", "data1", "read"})
assert.is.False(e:enforce("alice", "data1", "read"))
assert.is.True(e:enforce("alice", "data2", "read"))
assert.is.True(e:enforce("alice", "data2", "write"))
e:removePolicy("g", "g", {"alice", "data2_admin"})
assert.is.False(e:enforce("alice", "data2", "read"))
assert.is.False(e:enforce("alice", "data2", "write"))
end)
it("Update Policy tests", function ()
local model = path .. "/examples/rbac_model.conf"
local policy = path .. "/examples/rbac_policy.csv"
local e = Enforcer:new(model, policy)
assert.is.True(e:enforce("alice", "data1", "read"))
assert.is.False(e:enforce("alice", "data1", "write"))
e:updatePolicy("p", "p", {"alice", "data1", "read"}, {"alice", "data1", "write"})
assert.is.False(e:enforce("alice", "data1", "read"))
assert.is.True(e:enforce("alice", "data1", "write"))
assert.is.True(e:enforce("alice", "data2", "read"))
assert.is.False(e:enforce("bob", "data2", "read"))
e:updatePolicy("g", "g", {"alice", "data2_admin"}, {"bob", "data2_admin"})
assert.is.False(e:enforce("alice", "data2", "read"))
assert.is.True(e:enforce("bob", "data2", "read"))
end)
it("Add/Remove Policies test", function ()
local model = path .. "/examples/rbac_model.conf"
local policy = path .. "/examples/rbac_policy.csv"
local e = Enforcer:new(model, policy)
local rules = {
{"cathy", "data1", "read"},
{"cathy", "data1", "write"}
}
assert.is.False(e:enforce("cathy", "data1", "read"))
assert.is.False(e:enforce("cathy", "data1", "write"))
e:addPolicies("p", "p", rules)
assert.is.True(e:enforce("cathy", "data1", "read"))
assert.is.True(e:enforce("cathy", "data1", "write"))
e:removePolicies("p", "p", rules)
assert.is.False(e:enforce("cathy", "data1", "read"))
assert.is.False(e:enforce("cathy", "data1", "write"))
rules = {
{"cathy", "data2_admin"}
}
assert.is.False(e:enforce("cathy", "data2", "read"))
assert.is.False(e:enforce("cathy", "data2", "write"))
e:addPolicies("g", "g", rules)
assert.is.True(e:enforce("cathy", "data2", "read"))
assert.is.True(e:enforce("cathy", "data2", "write"))
end)
it("removeFilteredPolicy test", function ()
local model = path .. "/examples/rbac_model.conf"
local policy = path .. "/examples/rbac_policy.csv"
local e = Enforcer:new(model, policy)
local rules = {
{"cathy", "data1", "read"},
{"cathy", "data1", "write"}
}
e:addPolicies("p", "p", rules)
assert.is.True(e:enforce("cathy", "data1", "read"))
assert.is.True(e:enforce("cathy", "data1", "write"))
e:removeFilteredPolicy("p", "p", 0, {"cathy"})
assert.is.False(e:enforce("cathy", "data1", "read"))
assert.is.False(e:enforce("cathy", "data1", "write"))
assert.is.True(e:enforce("alice", "data2", "read"))
assert.is.True(e:enforce("alice", "data2", "write"))
e:removeFilteredPolicy("g", "g", 0, {"alice"})
e.model:printPolicy()
assert.is.False(e:enforce("alice", "data2", "read"))
assert.is.False(e:enforce("alice", "data2", "write"))
end)
end)