github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/api_token_test.go (about) 1 //go:build api || functional || ALL 2 3 /* 4 * Copyright 2021 VMware, Inc. All rights reserved. Licensed under the Apache v2 License. 5 */ 6 7 package govcd 8 9 import ( 10 "fmt" 11 "net/url" 12 "os" 13 14 "github.com/kr/pretty" 15 "github.com/vmware/go-vcloud-director/v2/types/v56" 16 . "gopkg.in/check.v1" 17 ) 18 19 // TestVCDClient_GetBearerTokenFromApiToken tests the token refresh operation 20 // To make it work, we need the following, or the test is skipped: 21 // - VCD version 10.3.1 or greater 22 // - environment variable TEST_VCD_API_TOKEN filled with a valid API token for that VCD 23 // - If the API token was not set for the Organization defined in vcd.config.VCD.Org, the variable 24 // TEST_VCD_ORG should be filled with the name of the Org for which the API token was set. 25 func (vcd *TestVCD) TestVCDClient_GetBearerTokenFromApiToken(check *C) { 26 apiToken := os.Getenv("TEST_VCD_API_TOKEN") 27 28 orgName := os.Getenv("TEST_VCD_ORG") 29 if orgName == "" { 30 orgName = vcd.config.VCD.Org 31 } 32 if orgName == "" { 33 check.Skip("orgName not set") 34 } 35 if apiToken == "" { 36 check.Skip(fmt.Sprintf("API token not set. Use TEST_VCD_API_TOKEN to indicate an API token for Org '%s'", orgName)) 37 } 38 39 isApiTokenEnabled, err := vcd.client.Client.VersionEqualOrGreater("10.3.1", 3) 40 check.Assert(err, IsNil) 41 if !isApiTokenEnabled { 42 check.Skip("This test requires VCD 10.3.1 or greater") 43 } 44 45 tokenInfo, err := vcd.client.GetBearerTokenFromApiToken(orgName, apiToken) 46 check.Assert(err, IsNil) 47 check.Assert(tokenInfo, NotNil) 48 check.Assert(tokenInfo.AccessToken, Not(Equals), "") 49 if testVerbose { 50 fmt.Printf("%# v\n", pretty.Formatter(tokenInfo)) 51 } 52 check.Assert(tokenInfo.ExpiresIn, Not(Equals), 0) 53 check.Assert(tokenInfo.TokenType, Equals, "Bearer") 54 } 55 56 func (vcd *TestVCD) Test_ApiTokenCreation(check *C) { 57 isApiTokenEnabled, err := vcd.client.Client.VersionEqualOrGreater("10.3.1", 3) 58 check.Assert(err, IsNil) 59 if !isApiTokenEnabled { 60 check.Skip("This test requires VCD 10.3.1 or greater") 61 } 62 client := vcd.client 63 64 token, err := client.CreateToken(vcd.config.Provider.SysOrg, check.TestName()) 65 check.Assert(err, IsNil) 66 check.Assert(token, NotNil) 67 check.Assert(token.Token.Type, Equals, "REFRESH") 68 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointTokens + token.Token.ID 69 AddToCleanupListOpenApi(token.Token.Name, check.TestName(), endpoint) 70 71 tokenInfo, err := token.GetInitialApiToken() 72 check.Assert(err, IsNil) 73 check.Assert(tokenInfo.AccessToken, Not(Equals), "") 74 check.Assert(tokenInfo.TokenType, Equals, "Bearer") 75 76 tokenInfo, err = token.GetInitialApiToken() 77 check.Assert(err, NotNil) 78 check.Assert(tokenInfo, IsNil) 79 80 err = token.Delete() 81 check.Assert(err, IsNil) 82 83 notFound, err := client.GetTokenById(token.Token.ID) 84 check.Assert(ContainsNotFound(err), Equals, true) 85 check.Assert(notFound, IsNil) 86 } 87 88 func (vcd *TestVCD) Test_GetFilteredTokensSysOrg(check *C) { 89 isApiTokenEnabled, err := vcd.client.Client.VersionEqualOrGreater("10.3.1", 3) 90 check.Assert(err, IsNil) 91 if !isApiTokenEnabled { 92 check.Skip("This test requires VCD 10.3.1 or greater") 93 } 94 client := vcd.client 95 if !client.Client.IsSysAdmin { 96 check.Skip("This test requires to be run by a SysAdmin") 97 } 98 99 token, err := client.CreateToken(vcd.config.Provider.SysOrg, check.TestName()) 100 check.Assert(err, IsNil) 101 check.Assert(token, NotNil) 102 check.Assert(token.Token.Type, Equals, "REFRESH") 103 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointTokens 104 AddToCleanupListOpenApi(token.Token.Name, check.TestName(), endpoint+token.Token.ID) 105 106 queryParameters := &url.Values{} 107 queryParameters.Add("filter", fmt.Sprintf("(name==%s;owner.name==%s;(type==PROXY,type==REFRESH))", check.TestName(), "administrator")) 108 109 tokens, err := client.GetAllTokens(*queryParameters) 110 check.Assert(err, IsNil) 111 check.Assert(len(tokens), Equals, 1) 112 check.Assert(tokens[0].Token.Name, Equals, check.TestName()) 113 check.Assert(tokens[0].Token.Owner.Name, Equals, "administrator") 114 115 newToken, err := client.GetTokenByNameAndUsername(check.TestName(), "administrator") 116 check.Assert(err, IsNil) 117 check.Assert(newToken.Token.Name, Equals, check.TestName()) 118 check.Assert(newToken.Token.Owner.Name, Equals, "administrator") 119 120 err = newToken.Delete() 121 check.Assert(err, IsNil) 122 123 newToken, err = client.GetTokenByNameAndUsername(check.TestName(), "administrator") 124 check.Assert(ContainsNotFound(err), Equals, true) 125 check.Assert(newToken, IsNil) 126 } 127 128 func (vcd *TestVCD) Test_GetFilteredTokensOrg(check *C) { 129 isApiTokenEnabled, err := vcd.client.Client.VersionEqualOrGreater("10.3.1", 3) 130 check.Assert(err, IsNil) 131 if !isApiTokenEnabled { 132 check.Skip("This test requires VCD 10.3.1 or greater") 133 } 134 135 if vcd.config.Tenants == nil || len(vcd.config.Tenants) < 2 { 136 check.Skip("no tenants found in configuration") 137 } 138 139 orgName := vcd.config.Tenants[0].SysOrg 140 userName := vcd.config.Tenants[0].User 141 password := vcd.config.Tenants[0].Password 142 143 vcdClient1 := NewVCDClient(vcd.client.Client.VCDHREF, true) 144 err = vcdClient1.Authenticate(userName, password, orgName) 145 check.Assert(err, IsNil) 146 147 token, err := vcdClient1.CreateToken(vcd.config.Tenants[0].SysOrg, check.TestName()) 148 check.Assert(err, IsNil) 149 check.Assert(token, NotNil) 150 check.Assert(token.Token.Type, Equals, "REFRESH") 151 endpoint := types.OpenApiPathVersion1_0_0 + types.OpenApiEndpointTokens 152 AddToCleanupListOpenApi(token.Token.Name, check.TestName(), endpoint+token.Token.ID) 153 154 queryParameters := &url.Values{} 155 queryParameters.Add("filter", fmt.Sprintf("(name==%s;owner.name==%s;(type==PROXY,type==REFRESH))", check.TestName(), userName)) 156 157 tokens, err := vcdClient1.GetAllTokens(*queryParameters) 158 check.Assert(err, IsNil) 159 check.Assert(len(tokens), Equals, 1) 160 check.Assert(tokens[0].Token.Name, Equals, check.TestName()) 161 check.Assert(tokens[0].Token.Owner.Name, Equals, userName) 162 163 newToken, err := vcdClient1.GetTokenByNameAndUsername(check.TestName(), userName) 164 check.Assert(err, IsNil) 165 check.Assert(newToken.Token.Name, Equals, check.TestName()) 166 check.Assert(newToken.Token.Owner.Name, Equals, userName) 167 168 err = newToken.Delete() 169 check.Assert(err, IsNil) 170 171 newToken, err = vcdClient1.GetTokenByNameAndUsername(check.TestName(), userName) 172 check.Assert(ContainsNotFound(err), Equals, true) 173 check.Assert(newToken, IsNil) 174 }