github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/roles_test.go (about) 1 package oneandone 2 3 import ( 4 "fmt" 5 "math/rand" 6 "reflect" 7 "sync" 8 "testing" 9 "time" 10 ) 11 12 var ( 13 set_role sync.Once 14 role_name string 15 test_role *Role 16 ) 17 18 // Helper functions 19 20 func create_role() *Role { 21 rand.Seed(time.Now().UnixNano()) 22 rint := rand.Intn(1000) 23 role_name = fmt.Sprintf("TestRole_%d", rint) 24 25 fmt.Printf("Creating role '%s'...\n", role_name) 26 role_id, role, err := api.CreateRole(role_name) 27 if err != nil { 28 fmt.Printf("Unable to create a role. Error: %s", err.Error()) 29 return nil 30 } 31 if role_id == "" || role.Id == "" { 32 fmt.Printf("Unable to create role '%s'.", role_name) 33 return nil 34 } 35 36 api.WaitForState(role, "ACTIVE", 2, 30) 37 38 return role 39 } 40 41 func set_role_once() { 42 test_role = create_role() 43 } 44 45 // /roles tests 46 47 func TestCreateRole(t *testing.T) { 48 set_role.Do(set_role_once) 49 50 if test_role == nil { 51 t.Errorf("CreateRole failed.") 52 } else { 53 if test_role.Name != role_name { 54 t.Errorf("Wrong name of the role.") 55 } 56 if test_role.Permissions == nil { 57 t.Errorf("Missing role permissions.") 58 } 59 } 60 } 61 62 func TestGetRole(t *testing.T) { 63 set_role.Do(set_role_once) 64 65 fmt.Printf("Getting role '%s'...\n", role_name) 66 role, err := api.GetRole(test_role.Id) 67 68 if err != nil { 69 t.Errorf("GetRole failed. Error: " + err.Error()) 70 return 71 } 72 if role.Id != test_role.Id { 73 t.Errorf("Wrong role ID.") 74 } 75 if test_role.Permissions == nil { 76 t.Errorf("Missing role permissions.") 77 } 78 } 79 80 func TestListRoles(t *testing.T) { 81 set_role.Do(set_role_once) 82 fmt.Println("Listing all roles...") 83 84 res, err := api.ListRoles() 85 if err != nil { 86 t.Errorf("ListRoles failed. Error: " + err.Error()) 87 } 88 if len(res) == 0 { 89 t.Errorf("No role found.") 90 } 91 92 res, err = api.ListRoles(1, 2, "name", "", "id,name") 93 94 if err != nil { 95 t.Errorf("ListRoles with parameter options failed. Error: " + err.Error()) 96 return 97 } 98 if len(res) == 0 { 99 t.Errorf("No role found.") 100 } 101 if len(res) != 2 { 102 t.Errorf("Wrong number of objects per page.") 103 return 104 } 105 if res[0].Id == "" || res[0].Name == "" { 106 t.Errorf("Filtering parameters failed.") 107 } 108 if res[0].State != "" || res[0].Permissions != nil { 109 t.Errorf("Filtering parameters failed.") 110 } 111 if res[0].Name > res[1].Name { 112 t.Errorf("Sorting list of roles failed.") 113 } 114 115 res, err = api.ListRoles(0, 0, "", test_role.Name, "") 116 117 if err != nil { 118 t.Errorf("ListRoles with parameter options failed. Error: " + err.Error()) 119 return 120 } 121 if len(res) != 1 || res[0].Name != test_role.Name { 122 t.Errorf("Search parameter failed.") 123 } 124 } 125 126 func TestModifyRole(t *testing.T) { 127 set_role.Do(set_role_once) 128 129 fmt.Printf("Modifying role '%s'...\n", role_name) 130 new_name := test_role.Name + "_updated" 131 new_desc := test_role.Description + "_updated" 132 133 role, err := api.ModifyRole(test_role.Id, new_name, new_desc, "") 134 135 if err != nil { 136 t.Errorf("ModifyRole failed. Error: " + err.Error()) 137 return 138 } 139 if role.Id != test_role.Id { 140 t.Errorf("Wrong role ID.") 141 } 142 if role.Name != new_name { 143 t.Errorf("Wrong role name.") 144 } 145 if role.Description != new_desc { 146 t.Errorf("Wrong role description.") 147 } 148 149 test_role = role 150 } 151 152 func TestGetRolePermissions(t *testing.T) { 153 set_role.Do(set_role_once) 154 155 fmt.Printf("Getting role's permissions...\n") 156 p, err := api.GetRolePermissions(test_role.Id) 157 158 if err != nil { 159 t.Errorf("GetRolePermissions failed. Error: " + err.Error()) 160 return 161 } 162 if p == nil || p.Backups == nil || p.Firewalls == nil || p.Images == nil || p.Invoice == nil || 163 p.IPs == nil || p.LoadBalancers == nil || p.Logs == nil || p.MonitorCenter == nil || 164 p.MonitorPolicies == nil || p.PrivateNetworks == nil || p.Roles == nil || p.Servers == nil || 165 p.SharedStorage == nil || p.Usages == nil || p.Users == nil || p.VPNs == nil { 166 t.Errorf("The role '%s' is missimg some permissions objects.", test_role.Name) 167 } 168 } 169 170 func TestListRoleUsers(t *testing.T) { 171 roles, err := api.ListRoles() 172 if len(roles) > 0 { 173 for _, r := range roles { 174 if len(r.Users) > 0 { 175 fmt.Printf("Getting role's users...\n") 176 users, err := api.ListRoleUsers(r.Id) 177 178 if err != nil { 179 t.Errorf("ListRoleUsers failed. Error: " + err.Error()) 180 return 181 } 182 if !reflect.DeepEqual(r.Users, users) { 183 t.Errorf("ListRoleUsers failed. Users do not match.") 184 } 185 } 186 break 187 } 188 } else { 189 t.Errorf("ListRoles failed. Error: " + err.Error()) 190 } 191 } 192 193 func TestAssignRemoveRoleUser(t *testing.T) { 194 set_role.Do(set_role_once) 195 196 users, _ := api.ListUsers(0, 0, "", "go_test_user", "") 197 if len(users) > 0 { 198 fmt.Printf("Assigning user '%s' to role '%s'...\n", users[0].Name, role_name) 199 usl := []string{users[0].Id} 200 role, err := api.AssignRoleUsers(test_role.Id, usl) 201 202 if err != nil { 203 t.Errorf("AssignRoleUsers failed. Error: " + err.Error()) 204 return 205 } 206 if len(role.Users) != 1 { 207 t.Errorf("AssignRoleUsers failed.") 208 return 209 } 210 if role.Users[0].Id != users[0].Id { 211 t.Errorf("Wrong user assigned to the role.") 212 } 213 214 // Removing the user 215 role, err = api.RemoveRoleUser(test_role.Id, role.Users[0].Id) 216 217 if err != nil { 218 t.Errorf("RemoveRoleUser failed. Error: " + err.Error()) 219 return 220 } 221 if len(role.Users) != 0 { 222 t.Errorf("RemoveRoleUser failed.") 223 } 224 } else { 225 t.Errorf("No user found for the role assignment.") 226 } 227 } 228 229 func TestGetRoleUser(t *testing.T) { 230 roles, err := api.ListRoles() 231 if len(roles) > 0 { 232 for _, r := range roles { 233 if len(r.Users) > 0 { 234 fmt.Printf("Getting role's user '%s'...\n", r.Name) 235 user, err := api.GetRoleUser(r.Id, r.Users[0].Id) 236 237 if err != nil { 238 t.Errorf("GetRoleUser failed. Error: " + err.Error()) 239 return 240 } 241 if r.Users[0].Id != user.Id || r.Users[0].Name != user.Name { 242 t.Errorf("User's ID or Name does not match.") 243 } 244 } 245 break 246 } 247 } else { 248 t.Errorf("ListRoles failed. Error: " + err.Error()) 249 } 250 } 251 252 func TestCloneRole(t *testing.T) { 253 set_role.Do(set_role_once) 254 255 fmt.Printf("Cloning role '%s'...\n", role_name) 256 cn := role_name + " Clone" 257 role, err := api.CloneRole(test_role.Id, cn) 258 259 if err != nil { 260 t.Errorf("CloneRole failed. Error: " + err.Error()) 261 return 262 } 263 if role.Name != cn { 264 t.Errorf("Wrong name of the clone role.") 265 } 266 // cleaning 267 api.DeleteRole(role.Id) 268 } 269 270 func TestDeleteRole(t *testing.T) { 271 set_role.Do(set_role_once) 272 273 fmt.Printf("Deleting role '%s'...\n", test_role.Name) 274 role, err := api.DeleteRole(test_role.Id) 275 276 if err != nil { 277 t.Errorf("DeleteRole failed. Error: " + err.Error()) 278 return 279 } 280 281 api.WaitUntilDeleted(role) 282 role, err = api.GetRole(role.Id) 283 284 if role != nil { 285 t.Errorf("Unable to delete the role.") 286 } else { 287 test_role = nil 288 } 289 }