This repository has been archived by the owner on Nov 7, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrole_test.go
163 lines (137 loc) · 3.54 KB
/
role_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package goh4
import (
"fmt"
"testing"
)
func testRoleSetup(h *H4) (*Scope, error) {
id := 424242
vrfName := "TestVRF42"
scopeName := "ScopeVRF42"
tenant := 0
v := VRF{
ID: id,
Name: vrfName,
TenantID: tenant,
}
err := h.AddVRF(&v)
if err != nil {
return nil, fmt.Errorf("Error in AddVRF: %s", err.Error())
}
f0 := Filter{
Type: "eq",
Field: "ip",
Value: "1.2.3.4",
}
s := Scope{
VRF: v.ID,
Name: scopeName,
Query: &QueryFilter{
Type: "and",
Filters: []interface{}{&f0},
},
Parent: v.Scope.ID,
}
err = h.AddScope(&s)
if err != nil {
return nil, fmt.Errorf("Error in AddScope: %s", err.Error())
}
return &s, nil
}
func testRoleTeardown(h *H4, scopeID string, vrfID int) error {
err := h.DeleteScope(scopeID)
if err != nil {
return fmt.Errorf("Error in DeleteScope: %s", err.Error())
}
err = h.DeleteVRF(vrfID)
if err != nil {
return fmt.Errorf("Error in DeleteVRF: %s", err.Error())
}
return nil
}
func TestAddRole(t *testing.T) {
t.Log("Starting TestAddRole Test")
roleName := "TestVRF42"
h := setupH4()
s, err := testRoleSetup(h)
if err != nil {
t.Errorf("Test setup failed - %s", err.Error())
return
}
r := new(Role)
r.Scope = s.GetParent()
r.Name = roleName
// Add a role, make sure it succeeds before we do anything else
err = h.AddRole(r)
if err != nil {
t.Errorf("Error in AddRole: %s", err.Error())
} else {
c1 := Capability{
Scope: s,
Ability: AbilityRead,
}
err = r.AddCapability(c1)
if err != nil {
t.Errorf("Error in AddCapability c1: %s", err.Error())
}
var testRole *Role
testRole, err = h.GetRole(r.ID)
if err != nil {
t.Errorf("Error in GetRole: %s", err.Error())
}
if testRole == nil {
t.Errorf("testRole is nil, something went wrong")
} else {
if testRole.ID != r.ID {
t.Errorf("Invalid Role ID, expecting: %s got: %s\n", r.ID, testRole.ID)
}
if len(testRole.Capabilities) != 1 {
t.Errorf("Invalid Capability c1 Length, expecting: %d got: %d\n", 1, len(testRole.Capabilities))
} else {
if testRole.Capabilities[0].Scope.ID != s.ID {
t.Errorf("Invalid Capability c1 Scope, expecting: %s got: %s\n", s.ID, testRole.Capabilities[0].Scope.ID)
}
if testRole.Capabilities[0].Ability != AbilityRead {
t.Errorf("Invalid Capability c1 Ability, expecting: %s got: %s\n", AbilityRead, testRole.Capabilities[0].Ability)
}
c2 := Capability{
Scope: s,
Ability: AbilityWrite,
}
err = testRole.AddCapability(c2)
// Make sure it succeeds
if err != nil {
t.Errorf("Error in AddCapability c2: %s", err.Error())
}
// Make sure the object gets updated
if len(testRole.Capabilities) != 2 {
t.Errorf("Invalid Capability c2 Length, expecting: %d got: %d\n", 2, len(testRole.Capabilities))
}
}
}
var testRole2 *Role
testRole2, err = h.GetRole(r.ID)
if err != nil {
t.Errorf("Error in GetRole (testRole2): %s", err.Error())
}
if testRole2 == nil {
t.Errorf("testRole2 is nil, something went wrong")
} else {
if len(testRole2.Capabilities) != 2 {
t.Errorf("Invalid Capability testRole2 Length, expecting: %d got: %d\n", 2, len(testRole2.Capabilities))
}
}
// Clean up by deleting the role we just created
err = h.DeleteRole(r.ID)
if err != nil {
t.Errorf("Error in DeleteRole: %s", err.Error())
}
err = h.DeleteRole(r.ID)
if err == nil {
t.Errorf("Trying to delete unknown role, where is my error?")
}
}
err = testRoleTeardown(h, s.ID, s.VRF)
if err != nil {
t.Errorf("Test teardown failed - %s", err.Error())
}
}