github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/roles_test.go (about)

     1  //go:build functional || openapi || role || ALL
     2  
     3  /*
     4   * Copyright 2020 VMware, Inc.  All rights reserved.  Licensed under the Apache v2 License.
     5   */
     6  
     7  package govcd
     8  
     9  import (
    10  	"net/url"
    11  
    12  	. "gopkg.in/check.v1"
    13  
    14  	"github.com/vmware/go-vcloud-director/v2/types/v56"
    15  )
    16  
    17  func (vcd *TestVCD) Test_Roles(check *C) {
    18  
    19  	vcd.checkSkipWhenApiToken(check)
    20  	adminOrg, err := vcd.client.GetAdminOrgByName(vcd.config.VCD.Org)
    21  	check.Assert(err, IsNil)
    22  	check.Assert(adminOrg, NotNil)
    23  
    24  	// Step 1 - Get all roles
    25  	allExistingRoles, err := adminOrg.GetAllRoles(nil)
    26  	check.Assert(err, IsNil)
    27  	check.Assert(allExistingRoles, NotNil)
    28  
    29  	// Step 2 - Get all roles using query filters
    30  	for _, oneRole := range allExistingRoles {
    31  
    32  		// Step 2.1 - retrieve specific role by using FIQL filter
    33  		queryParams := url.Values{}
    34  		queryParams.Add("filter", "id=="+oneRole.Role.ID)
    35  
    36  		expectOneRoleResultById, err := adminOrg.GetAllRoles(queryParams)
    37  		check.Assert(err, IsNil)
    38  		check.Assert(len(expectOneRoleResultById) == 1, Equals, true)
    39  
    40  		// Step 2.2 - retrieve specific role by using endpoint
    41  		exactItem, err := adminOrg.GetRoleById(oneRole.Role.ID)
    42  		check.Assert(err, IsNil)
    43  
    44  		check.Assert(err, IsNil)
    45  		check.Assert(exactItem, NotNil)
    46  
    47  		// Step 2.3 - compare struct retrieved by using filter and the one retrieved by exact endpoint ID
    48  		check.Assert(oneRole, DeepEquals, expectOneRoleResultById[0])
    49  
    50  	}
    51  
    52  	// Step 3 - Create a new role and ensure it is created as specified by doing deep comparison
    53  
    54  	newR := &types.Role{
    55  		Name:        check.TestName(),
    56  		Description: "Role created by test",
    57  		// This BundleKey is being set by VCD even if it is not sent
    58  		BundleKey: types.VcloudUndefinedKey,
    59  		ReadOnly:  false,
    60  	}
    61  
    62  	createdRole, err := adminOrg.CreateRole(newR)
    63  	check.Assert(err, IsNil)
    64  	AddToCleanupListOpenApi(createdRole.Role.Name, check.TestName(), types.OpenApiPathVersion1_0_0+types.OpenApiEndpointRoles+createdRole.Role.ID)
    65  
    66  	// Ensure supplied and created structs differ only by ID
    67  	newR.ID = createdRole.Role.ID
    68  	check.Assert(createdRole.Role, DeepEquals, newR)
    69  
    70  	// Check that the new role is found in the Organization structure
    71  	roleRef, err := adminOrg.GetRoleReference(createdRole.Role.Name)
    72  	check.Assert(err, IsNil)
    73  	check.Assert(roleRef, NotNil)
    74  
    75  	// Step 4 - updated created role
    76  	createdRole.Role.Description = "Updated description"
    77  	updatedRole, err := createdRole.Update()
    78  	check.Assert(err, IsNil)
    79  	check.Assert(updatedRole.Role, DeepEquals, createdRole.Role)
    80  
    81  	// Step 5 - add rights to role
    82  
    83  	// These rights include 5 implied rights, which will be added by role.AddRights
    84  	rightNames := []string{"Catalog: Add vApp from My Cloud", "Catalog: Edit Properties"}
    85  
    86  	rightSet, err := getRightsSet(adminOrg.client, rightNames)
    87  	check.Assert(err, IsNil)
    88  
    89  	err = updatedRole.AddRights(rightSet)
    90  	check.Assert(err, IsNil)
    91  
    92  	rights, err := updatedRole.GetRights(nil)
    93  	check.Assert(err, IsNil)
    94  	check.Assert(len(rights), Equals, len(rightSet))
    95  
    96  	// Step 6 - remove 1 right from role
    97  
    98  	err = updatedRole.RemoveRights([]types.OpenApiReference{rightSet[0]})
    99  	check.Assert(err, IsNil)
   100  	rights, err = updatedRole.GetRights(nil)
   101  	check.Assert(err, IsNil)
   102  	check.Assert(len(rights), Equals, len(rightSet)-1)
   103  
   104  	// Step 7 - remove all rights from role
   105  	err = updatedRole.RemoveAllRights()
   106  	check.Assert(err, IsNil)
   107  
   108  	rights, err = updatedRole.GetRights(nil)
   109  	check.Assert(err, IsNil)
   110  	check.Assert(len(rights), Equals, 0)
   111  
   112  	// Step 8 - delete created role
   113  	err = updatedRole.Delete()
   114  	check.Assert(err, IsNil)
   115  
   116  	// Step 9 - try to read deleted role and expect error to contain 'ErrorEntityNotFound'
   117  	// Read is tricky - it throws an error ACCESS_TO_RESOURCE_IS_FORBIDDEN when the resource with ID does not
   118  	// exist therefore one cannot know what kind of error occurred.
   119  	deletedRole, err := adminOrg.GetRoleById(createdRole.Role.ID)
   120  	check.Assert(ContainsNotFound(err), Equals, true)
   121  	check.Assert(deletedRole, IsNil)
   122  }