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  }