blob: fc4e35342d50090dac0097f8fb5bedf134e2444b [file]
// Copyright 2017 The casbin Authors. All Rights Reserved.
//
// Licensed 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
//
// http://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.
package main
import (
"testing"
"github.com/casbin/casbin"
)
func testEnforce(t *testing.T, e *casbin.Enforcer, tenant string, sub string, obj string, act string, service string, res bool) {
if e.Enforce(tenant, sub, obj, act, service) != res {
t.Errorf("%s, %s, %s, %s, %s: %t, supposed to be %t", tenant, sub, obj, act, service, !res, res)
}
}
func TestEnable(t *testing.T) {
e := casbin.NewEnforcer(model_global_enable, policy_global_enable)
testEnforce(t, e,"tenant1", "user11", "/tenant1/metadata", "GET", "patron", true)
testEnforce(t, e, "tenant1", "user11", "/tenant1/metadata", "POST", "patron", true)
testEnforce(t, e, "tenant1", "user11", "/tenant1/policy", "GET", "patron", true)
testEnforce(t, e, "tenant1", "user11", "/tenant1/policy", "POST", "patron", true)
testEnforce(t, e,"tenant1", "user12", "/tenant1/metadata", "GET", "patron", false)
testEnforce(t, e, "tenant1", "user12", "/tenant1/metadata", "POST", "patron", false)
testEnforce(t, e, "tenant1", "user12", "/tenant1/policy", "GET", "patron", false)
testEnforce(t, e, "tenant1", "user12", "/tenant1/policy", "POST", "patron", false)
testEnforce(t, e,"tenant2", "user11", "/tenant2/metadata", "GET", "patron", false)
testEnforce(t, e, "tenant2", "user11", "/tenant2/metadata", "POST", "patron", false)
testEnforce(t, e, "tenant2", "user11", "/tenant2/policy", "GET", "patron", false)
testEnforce(t, e, "tenant2", "user11", "/tenant2/policy", "POST", "patron", false)
testEnforce(t, e,"tenant2", "user2", "/tenant2/metadata", "GET", "patron", true)
testEnforce(t, e, "tenant2", "user2", "/tenant2/metadata", "POST", "patron", true)
testEnforce(t, e, "tenant2", "user2", "/tenant2/policy", "GET", "patron", true)
testEnforce(t, e, "tenant2", "user2", "/tenant2/policy", "POST", "patron", true)
testEnforce(t, e,"tenant3", "user3", "/tenant3/metadata", "GET", "patron", true)
testEnforce(t, e, "tenant3", "user3", "/tenant3/metadata", "POST", "patron", true)
testEnforce(t, e, "tenant3", "user3", "/tenant3/policy", "GET", "patron", true)
testEnforce(t, e, "tenant3", "user3", "/tenant3/policy", "POST", "patron", true)
}
func TestRestrict(t *testing.T) {
e := casbin.NewEnforcer(model_global_restrict, policy_global_restrict)
testEnforce(t, e,"tenant1", "user11", "/tenant1/servers/detail", "GET", "nova", true)
testEnforce(t, e,"tenant1", "user12", "/tenant1/servers/detail", "GET", "nova", true)
testEnforce(t, e,"tenant1", "user13", "/tenant1/servers/detail", "GET", "nova", true)
testEnforce(t, e,"tenant2", "user2", "/tenant1/servers/detail", "GET", "nova", false)
testEnforce(t, e,"tenant3", "user3", "/tenant1/servers/detail", "GET", "nova", false)
testEnforce(t, e,"tenant2", "user2", "/tenant1/volumes/detail", "GET", "cinder", false)
testEnforce(t, e,"tenant3", "user3", "/tenant1/volumes/detail", "GET", "cinder", false)
testEnforce(t, e, "tenant1", "user11", "/admin/servers/detail", "GET", "nova", false)
testEnforce(t, e, "tenant2", "user2", "/admin/servers/detail", "GET", "nova", false)
testEnforce(t, e, "tenant3", "user3", "/admin/servers/detail", "GET", "nova", false)
}
func TestTenant1(t *testing.T) {
e := casbin.NewEnforcer(model_custom, policy_tenant1_custom)
testEnforce(t, e,"tenant1", "user11", "/tenant1/servers/detail", "GET", "nova", true)
testEnforce(t, e,"tenant1", "user11", "/v2/images", "GET", "glance", true)
testEnforce(t, e,"tenant1", "user11", "/networks.json", "GET", "neutron", true)
testEnforce(t, e,"tenant1", "user11", "/tenant1/volumes/detail", "GET", "cinder", true)
testEnforce(t, e,"tenant1", "user12", "/tenant1/servers/detail", "GET", "nova", true)
testEnforce(t, e,"tenant1", "user12", "/v2/images", "GET", "glance", false)
testEnforce(t, e,"tenant1", "user12", "/networks.json", "GET", "neutron", false)
testEnforce(t, e,"tenant1", "user12", "/tenant1/volumes/detail", "GET", "cinder", false)
testEnforce(t, e,"tenant1", "user13", "/tenant1/servers/detail", "GET", "nova", false)
testEnforce(t, e,"tenant1", "user13", "/v2/images", "GET", "glance", true)
testEnforce(t, e,"tenant1", "user13", "/networks.json", "GET", "neutron", false)
testEnforce(t, e,"tenant1", "user13", "/tenant1/volumes/detail", "GET", "cinder", false)
}