blob: 94beafe7c4329588744af7f8589f08f3ebbfd6d5 [file]
local Adapter = require("migrations.sqlite3")
local Enforcer = require("casbin")
local path = os.getenv("PWD") or io.popen("cd"):read()
local function initDB()
local a = Adapter:new("casbin")
a.conn:execute("DELETE FROM " .. a.tableName)
a.conn:execute("INSERT INTO " .. a.tableName .. " (ptype, v0, v1, v2) VALUES ( 'p', 'alice', 'data1', 'read')")
a.conn:execute("INSERT INTO " .. a.tableName .. " (ptype, v0, v1, v2) VALUES ( 'p', 'bob', 'data2', 'write')")
a.conn:execute("INSERT INTO " .. a.tableName .. " (ptype, v0, v1, v2) VALUES ( 'p', 'data2_admin', 'data2', 'read')")
a.conn:execute("INSERT INTO " .. a.tableName .. " (ptype, v0, v1, v2) VALUES ( 'p', 'data2_admin', 'data2', 'write')")
a.conn:execute("INSERT INTO " .. a.tableName .. " (ptype, v0, v1) VALUES ( 'g', 'alice', 'data2_admin')")
return a
end
local function getEnforcer()
local e = Enforcer:new(path .. "/tests/rbac_model.conf", path .. "/tests/empty_policy.csv")
local a = initDB()
e.adapter = a
e:loadPolicy()
return e
end
describe("Casbin SQLite3 Adapter tests", function ()
it("Load Policy test", function ()
local e = getEnforcer()
assert.is.True(e:enforce("alice", "data1", "read"))
assert.is.False(e:enforce("bob", "data1", "read"))
assert.is.True(e:enforce("bob", "data2", "write"))
assert.is.True(e:enforce("alice", "data2", "read"))
assert.is.True(e:enforce("alice", "data2", "write"))
end)
it("Load Filtered Policy test", function ()
local e = getEnforcer()
e:clearPolicy()
assert.is.Same({}, e:GetPolicy())
assert.has.error(function ()
local filter = {"alice", "data1"}
e:loadFilteredPolicy(filter)
end)
local filter = {
["v0"] = "bob"
}
e:loadFilteredPolicy(filter)
assert.is.Same({{"bob", "data2", "write"}}, e:GetPolicy())
e:clearPolicy()
filter = {
["v2"] = "read"
}
e:loadFilteredPolicy(filter)
assert.is.Same({
{"alice", "data1", "read"},
{"data2_admin", "data2", "read"}
}, e:GetPolicy())
e:clearPolicy()
filter = {
["v0"] = "data2_admin",
["v2"] = "write"
}
e:loadFilteredPolicy(filter)
assert.is.Same({{"data2_admin", "data2", "write"}}, e:GetPolicy())
end)
it("Add Policy test", function ()
local e = getEnforcer()
assert.is.False(e:enforce("eve", "data3", "read"))
e:AddPolicy("eve", "data3", "read")
assert.is.True(e:enforce("eve", "data3", "read"))
end)
it("Add Policies test", function ()
local e = getEnforcer()
local policies = {
{"u1", "d1", "read"},
{"u2", "d2", "read"},
{"u3", "d3", "read"}
}
e:clearPolicy()
e.adapter:savePolicy(e.model)
assert.is.Same({}, e:GetPolicy())
e:AddPolicies(policies)
e:clearPolicy()
e:loadPolicy()
assert.is.Same(policies, e:GetPolicy())
end)
it("Save Policy test", function ()
local e = getEnforcer()
assert.is.False(e:enforce("alice", "data4", "read"))
e.model:clearPolicy()
e.model:addPolicy("p", "p", {"alice", "data4", "read"})
e.adapter:savePolicy(e.model)
e:loadPolicy()
assert.is.True(e:enforce("alice", "data4", "read"))
end)
it("Remove Policy test", function ()
local e = getEnforcer()
assert.is.True(e:HasPolicy("alice", "data1", "read"))
e:RemovePolicy("alice", "data1", "read")
assert.is.False(e:HasPolicy("alice", "data1", "read"))
end)
it("Remove Policies test", function ()
local e = getEnforcer()
local policies = {
{"alice", "data1", "read"},
{"bob", "data2", "write"},
{"data2_admin", "data2", "read"},
{"data2_admin", "data2", "write"}
}
assert.is.Same(policies, e:GetPolicy())
e:RemovePolicies({
{"data2_admin", "data2", "read"},
{"data2_admin", "data2", "write"}
})
policies = {
{"alice", "data1", "read"},
{"bob", "data2", "write"}
}
assert.is.Same(policies, e:GetPolicy())
end)
it("Update Policy test", function ()
local e = getEnforcer()
local policies = {
{"alice", "data1", "read"},
{"bob", "data2", "write"},
{"data2_admin", "data2", "read"},
{"data2_admin", "data2", "write"}
}
assert.is.Same(policies, e:GetPolicy())
e:UpdatePolicy(
{"bob", "data2", "write"},
{"bob", "data2", "read"}
)
policies = {
{"alice", "data1", "read"},
{"bob", "data2", "read"},
{"data2_admin", "data2", "read"},
{"data2_admin", "data2", "write"}
}
assert.is.Same(policies, e:GetPolicy())
end)
it("Update Policies test", function ()
local e = getEnforcer()
local policies = {
{"alice", "data1", "read"},
{"bob", "data2", "write"},
{"data2_admin", "data2", "read"},
{"data2_admin", "data2", "write"}
}
assert.is.Same(policies, e:GetPolicy())
e:UpdatePolicies(
{{"alice", "data1", "read"},{"bob", "data2", "write"}},
{{"alice", "data1", "write"},{"bob", "data2", "read"}}
)
policies = {
{"alice", "data1", "write"},
{"bob", "data2", "read"},
{"data2_admin", "data2", "read"},
{"data2_admin", "data2", "write"}
}
assert.is.Same(policies, e:GetPolicy())
end)
it("Update Filtered Policies test", function ()
local e = getEnforcer()
assert.is.True(e:enforce("alice", "data1", "read"))
e:UpdateFilteredPolicies({{"alice", "data1", "write"}},1, {"data1"})
assert.is.False(e:enforce("alice", "data1", "read"))
assert.is.True(e:enforce("alice", "data1", "write"))
assert.is.True(e:enforce("bob", "data2", "write"))
assert.is.True(e:enforce("alice", "data2", "read"))
assert.is.True(e:enforce("alice", "data2", "write"))
e:UpdateFilteredPolicies({{"bob", "data2","read"},{"admin", "data2","read"}},1, {"data2","write"})
assert.is.False(e:enforce("bob", "data2", "write"))
assert.is.True(e:enforce("alice", "data2", "read"))
assert.is.False(e:enforce("alice", "data2", "write"))
assert.is.True(e:enforce("bob", "data2","read"))
assert.is.True(e:enforce("admin", "data2","read"))
end)
it("Remove Filtered Policy test", function ()
local e = getEnforcer()
assert.is.True(e:enforce("alice", "data1", "read"))
e:RemoveFilteredPolicy(1, "data1")
assert.is.False(e:enforce("alice", "data1", "read"))
assert.is.True(e:enforce("bob", "data2", "write"))
assert.is.True(e:enforce("alice", "data2", "read"))
assert.is.True(e:enforce("alice", "data2", "write"))
e:RemoveFilteredPolicy(1, "data2", "read")
assert.is.True(e:enforce("bob", "data2", "write"))
assert.is.False(e:enforce("alice", "data2", "read"))
assert.is.True(e:enforce("alice", "data2", "write"))
e:RemoveFilteredPolicy(1, "data2")
assert.is.False(e:enforce("bob", "data2", "write"))
assert.is.False(e:enforce("alice", "data2", "read"))
assert.is.False(e:enforce("alice", "data2", "write"))
end)
end)