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  }