upd(rbac): more tests, go fmt

This commit is contained in:
Tit Petric
2018-07-23 15:53:57 +02:00
parent b1f8587ebb
commit 6aaac36b51
10 changed files with 78 additions and 28 deletions
+6 -3
View File
@@ -148,11 +148,14 @@ func (c *Client) Request(method string, url string, body interface{}) (*http.Res
}
fmt.Println("-----------------")
}
if c.debugLevel == "info" {
fmt.Println("RBAC <<< Response with", resp.StatusCode)
}
if err != nil {
if c.debugLevel == "info" {
fmt.Println("RBAC <<< Response error", err)
}
return nil, err
}
if c.debugLevel == "info" {
fmt.Println("RBAC <<< Response", resp.StatusCode)
}
return resp, nil
}
+20 -1
View File
@@ -1,7 +1,9 @@
package rbac
import (
"encoding/json"
"fmt"
"github.com/crusttech/crust/rbac/types"
"github.com/pkg/errors"
)
@@ -12,12 +14,14 @@ type (
ResourcesInterface interface {
Create(resourceID string, operations []string) error
Get(resourceID string) (*types.Resource, error)
Delete(resourceID string) error
}
)
const (
resourcesCreate = "/resources/%s"
resourcesGet = "/resources/%s"
resourcesDelete = "/resources/%s"
)
@@ -39,8 +43,23 @@ func (u *Resources) Create(resourceID string, operations []string) error {
}
}
func (u *Resources) Get(resourceID string) (*types.Resource, error) {
resp, err := u.Client.Get(fmt.Sprintf(resourcesGet, resourceID))
if err != nil {
return nil, errors.Wrap(err, "request failed")
}
defer resp.Body.Close()
switch resp.StatusCode {
case 200:
resource := &types.Resource{}
return resource, errors.Wrap(json.NewDecoder(resp.Body).Decode(resource), "decoding json failed")
default:
return nil, toError(resp)
}
}
func (u *Resources) Delete(resourceID string) error {
resp, err := u.Client.Delete(fmt.Sprintf(resourcesCreate, resourceID))
resp, err := u.Client.Delete(fmt.Sprintf(resourcesDelete, resourceID))
if err != nil {
return errors.Wrap(err, "request failed")
}
+12 -1
View File
@@ -9,17 +9,28 @@ func TestResources(t *testing.T) {
if err != nil {
t.Errorf("Unexpected error when creating RBAC instance: %+v", err)
}
rbac.Debug("info")
rbac.Debug("debug")
resources := rbac.Resources()
resources.Delete("test-resource")
if err := resources.Create("test-resource", []string{"view", "edit", "delete"}); err != nil {
t.Errorf("Error when creating test-resource, %+v", err)
return
}
// test get resources
if false {
_, err := resources.Get("test-resource")
if err != nil {
t.Errorf("Error when retrieving test-resource, %+v", err)
return
}
}
if err := resources.Delete("test-resource"); err != nil {
t.Errorf("Unexpected error deleting a resource, %+v", err)
return
}
if err := resources.Delete("test-resource"); err == nil {
+3 -4
View File
@@ -1,10 +1,10 @@
package rbac
import (
"fmt"
"encoding/json"
"github.com/pkg/errors"
"fmt"
"github.com/crusttech/crust/rbac/types"
"github.com/pkg/errors"
)
type (
@@ -21,7 +21,7 @@ type (
const (
rolesCreate = "/roles/%s"
rolesGet = "/roles/%s"
rolesGet = "/roles/%s"
rolesDelete = "/roles/%s"
)
@@ -68,5 +68,4 @@ func (u *Roles) Delete(rolepath string) error {
}
}
var _ RolesInterface = &Roles{}
+5 -1
View File
@@ -16,6 +16,7 @@ func TestRoles(t *testing.T) {
if err := roles.Create("test-role"); err != nil {
t.Errorf("Error when creating test-role: %+v", err)
return
}
if err := roles.Create("test-role/nested/role"); err == nil {
@@ -30,12 +31,15 @@ func TestRoles(t *testing.T) {
{
role, err := roles.Get("test-role")
assert(t, err == nil, "Unexpected error when getting role, %+v", err)
if !assert(t, err == nil, "Unexpected error when getting role, %+v", err) {
return
}
assert(t, role.Name == "test-role", "Unexpected role name, test-role != '%s'", role.Name)
}
if err := roles.Delete("test-role"); err != nil {
t.Errorf("Error when deleting test-role: %+v", err)
return
}
if err := roles.Delete("non-existant"); err == nil {
+4 -5
View File
@@ -23,10 +23,10 @@ type (
)
const (
sessionsCreate = "/sessions/%s"
sessionsGet = "/sessions/%s"
sessionsDelete = "/sessions/%s"
sessionsActivateRole = "/sessions/%s/activateRole"
sessionsCreate = "/sessions/%s"
sessionsGet = "/sessions/%s"
sessionsDelete = "/sessions/%s"
sessionsActivateRole = "/sessions/%s/activateRole"
sessionsDeactivateRole = "/sessions/%s/deactivateRole"
)
@@ -114,5 +114,4 @@ func (u *Sessions) DeactivateRole(sessionID string, roles ...string) error {
}
}
var _ SessionsInterface = &Sessions{}
+11 -3
View File
@@ -43,7 +43,9 @@ func TestSessions(t *testing.T) {
// check role is created
{
session, err := sessions.Get("test-session")
assert(t, err == nil, "Unexpected error when getting test-session, %+v", err)
if !assert(t, err == nil, "Unexpected error when getting test-session, %+v", err) {
return
}
// @todo: DAASI should return session ID from a get-query as well
// assert(t, session.ID == "test-session", "Unexpected returned Session ID, test-session != '%s'", session.ID)
assert(t, session.Username == "test-user", "Unexpected returned user, test-user != '%s'", session.Username)
@@ -55,12 +57,15 @@ func TestSessions(t *testing.T) {
if err := sessions.DeactivateRole("test-session", "test-role"); err != nil {
t.Errorf("Unexpected error when deactivating session role, %+v", err)
return
}
// check role is deactivated
{
session, err := sessions.Get("test-session")
assert(t, err == nil, "Unexpected error when getting test-session, %+v", err)
if !assert(t, err == nil, "Unexpected error when getting test-session, %+v", err) {
return
}
// @todo: DAASI should return session ID from a get-query as well
// assert(t, session.ID == "test-session", "Unexpected returned Session ID, test-session != '%s'", session.ID)
assert(t, session.Username == "test-user", "Unexpected returned user, test-user != '%s'", session.Username)
@@ -71,12 +76,15 @@ func TestSessions(t *testing.T) {
if err := sessions.ActivateRole("test-session", "test-role"); err != nil {
t.Errorf("Unexpected error when deactivating session role, %+v", err)
return
}
// check role is activated
{
session, err := sessions.Get("test-session")
assert(t, err == nil, "Unexpected error when getting test-session, %+v", err)
if !assert(t, err == nil, "Unexpected error when getting test-session, %+v", err) {
return
}
// @todo: DAASI should return session ID from a get-query as well
// assert(t, session.ID == "test-session", "Unexpected returned Session ID, test-session != '%s'", session.ID)
assert(t, session.Username == "test-user", "Unexpected returned user, test-user != '%s'", session.Username)
+11 -7
View File
@@ -2,22 +2,26 @@ package types
type (
User struct {
Username string `json:"username"`
AssignedRoles []string `json:"assignedRoles"`
Username string `json:"username"`
AssignedRoles []string `json:"assignedRoles"`
AuthorizedRoles []string `json:"authorizedRoles"`
}
Session struct {
ID string `json:"session"`
Username string `json:"username"`
Roles []string `json:"roles"`
ID string `json:"session"`
Username string `json:"username"`
Roles []string `json:"roles"`
}
// @todo: need to list nested roles,
// @todo: don't return users=null - return users: []?
Role struct {
Name string `json:"rolename"`
Users []string `json:"users"`
Name string `json:"rolename"`
Users []string `json:"users"`
Permissions []string `json:"users"`
}
// @todo: read resource information
Resource struct {
}
)
+3 -3
View File
@@ -1,8 +1,8 @@
package rbac
import (
"fmt"
"encoding/json"
"fmt"
"github.com/crusttech/crust/rbac/types"
"github.com/pkg/errors"
)
@@ -24,10 +24,10 @@ type (
const (
usersCreate = "/users/%s"
usersGet = "/users/%s"
usersGet = "/users/%s"
usersDelete = "/users/%s"
// @todo: plural for users, but singular for sessions
usersAddRole = "/users/%s/assignRoles"
usersAddRole = "/users/%s/assignRoles"
usersRemoveRole = "/users/%s/deassignRoles"
)
+3
View File
@@ -24,6 +24,7 @@ func TestUsers(t *testing.T) {
if err := users.Create("test-user", "test-password"); err != nil {
t.Errorf("Error when creating test-user: %+v", err)
return
}
// check if we inherited some roles (should be empty)
@@ -71,10 +72,12 @@ func TestUsers(t *testing.T) {
if err := users.Delete("test-user"); err != nil {
t.Errorf("Error when deleting test-user: %+v", err)
return
}
if _, err := users.Get("test-user"); err == nil {
t.Errorf("Expected error on retrieving a non-existant user")
return
}
if err := users.Delete("test-user"); err == nil {