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

     1  //go:build api || functional || ALL
     2  
     3  /*
     4   * Copyright 2019 VMware, Inc.  All rights reserved.  Licensed under the Apache v2 License.
     5   */
     6  
     7  package govcd
     8  
     9  import (
    10  	"fmt"
    11  	"regexp"
    12  	"strings"
    13  	"time"
    14  
    15  	"github.com/kr/pretty"
    16  	. "gopkg.in/check.v1"
    17  )
    18  
    19  func (vcd *TestVCD) Test_APIVCDMaxVersionIs_Unauthenticated(check *C) {
    20  	config, err := GetConfigStruct()
    21  	check.Assert(err, IsNil)
    22  
    23  	vcdClient, err := GetTestVCDFromYaml(config)
    24  	check.Assert(err, IsNil)
    25  
    26  	versionCheck := vcdClient.Client.APIVCDMaxVersionIs(">= 27.0")
    27  	check.Assert(versionCheck, Equals, true)
    28  	check.Assert(vcdClient.Client.supportedVersions.VersionInfos, Not(Equals), 0)
    29  }
    30  
    31  func (vcd *TestVCD) Test_APIClientVersionIs_Unauthenticated(check *C) {
    32  	config, err := GetConfigStruct()
    33  	check.Assert(err, IsNil)
    34  
    35  	vcdClient, err := GetTestVCDFromYaml(config)
    36  	check.Assert(err, IsNil)
    37  
    38  	versionCheck := vcdClient.Client.APIClientVersionIs(">= 27.0")
    39  	check.Assert(versionCheck, Equals, true)
    40  	check.Assert(vcdClient.Client.supportedVersions.VersionInfos, Not(Equals), 0)
    41  }
    42  
    43  // Test_APIVCDMaxVersionIs uses already authenticated vcdClient (in SetupSuite)
    44  func (vcd *TestVCD) Test_APIVCDMaxVersionIs(check *C) {
    45  
    46  	// Minimum supported vCD 8.20 introduced API version 27.0
    47  	versionCheck := vcd.client.Client.APIVCDMaxVersionIs(">= 27.0")
    48  	check.Assert(versionCheck, Equals, true)
    49  
    50  	mockVcd := getMockVcdWithAPIVersion("27.0")
    51  
    52  	var versionTests = []struct {
    53  		version     string
    54  		boolChecker Checker
    55  		isSupported bool
    56  	}{
    57  		{"= 27.0", Equals, true},
    58  		{">= 27.0", Equals, true},
    59  		{">= 25.0, <= 30", Equals, true},
    60  		{"> 27.0", Equals, false},
    61  		{"< 27.0", Equals, false},
    62  		{"invalid", Equals, false},
    63  		{"", Equals, false},
    64  	}
    65  
    66  	for _, tt := range versionTests {
    67  		versionCheck := mockVcd.Client.APIVCDMaxVersionIs(tt.version)
    68  		check.Assert(versionCheck, tt.boolChecker, tt.isSupported)
    69  	}
    70  }
    71  
    72  // Test_APIClientVersionIs uses already authenticated vcdClient (in SetupSuite)
    73  func (vcd *TestVCD) Test_APIClientVersionIs(check *C) {
    74  
    75  	// Check with currently set version
    76  	versionCheck := vcd.client.Client.APIClientVersionIs(fmt.Sprintf("= %s", vcd.client.Client.APIVersion))
    77  	check.Assert(versionCheck, Equals, true)
    78  
    79  	versionCheck = vcd.client.Client.APIClientVersionIs(">= 27.0")
    80  	check.Assert(versionCheck, Equals, true)
    81  
    82  	mockVcd := getMockVcdWithAPIVersion("27.0")
    83  
    84  	var versionTests = []struct {
    85  		version     string
    86  		boolChecker Checker
    87  		isSupported bool
    88  	}{
    89  		{"= 27.0", Equals, true},
    90  		{">= 27.0", Equals, true},
    91  		{">= 25.0, <= 30", Equals, true},
    92  		{"> 27.0", Equals, false},
    93  		{"< 27.0", Equals, false},
    94  		{"invalid", Equals, false},
    95  		{"", Equals, false},
    96  	}
    97  
    98  	for _, tt := range versionTests {
    99  		versionCheck := mockVcd.Client.APIClientVersionIs(tt.version)
   100  		check.Assert(versionCheck, tt.boolChecker, tt.isSupported)
   101  	}
   102  }
   103  
   104  func (vcd *TestVCD) Test_validateAPIVersion(check *C) {
   105  	// valid version is checked automatically in SetUpSuite
   106  	// we're checking only for a bad version here
   107  	unsupportedVersion := "999.0"
   108  
   109  	config, err := GetConfigStruct()
   110  	check.Assert(err, IsNil)
   111  
   112  	vcdClient, err := GetTestVCDFromYaml(config, WithAPIVersion(unsupportedVersion))
   113  	check.Assert(err, IsNil)
   114  	err = vcdClient.Client.validateAPIVersion()
   115  	check.Assert(err, ErrorMatches, "API version .* is not supported: version = .* is not supported")
   116  }
   117  
   118  func getMockVcdWithAPIVersion(version string) *VCDClient {
   119  	return &VCDClient{
   120  		Client: Client{
   121  			APIVersion: version,
   122  			supportedVersions: SupportedVersions{
   123  				VersionInfos{
   124  					VersionInfo{
   125  						Version: version,
   126  					},
   127  				},
   128  			},
   129  		},
   130  	}
   131  }
   132  
   133  func (vcd *TestVCD) Test_GetVcdVersion(check *C) {
   134  
   135  	version, versionTime, err := vcd.client.Client.GetVcdVersion()
   136  	check.Assert(err, IsNil)
   137  	check.Assert(version, Not(Equals), "")
   138  	check.Assert(versionTime, Not(Equals), time.Time{})
   139  	reVersion := regexp.MustCompile(`^\d+\.\d+\.\d+\.\d+`)
   140  	check.Assert(reVersion.MatchString(version), Equals, true)
   141  
   142  	fmt.Printf("VERSION %s\n", version)
   143  	fmt.Printf("DATE    %s\n", versionTime)
   144  
   145  	shortVersion, err := vcd.client.Client.GetVcdShortVersion()
   146  	check.Assert(err, IsNil)
   147  	check.Assert(shortVersion, Not(Equals), "")
   148  	check.Assert(strings.HasPrefix(version, shortVersion), Equals, true)
   149  	if testVerbose {
   150  		fmt.Printf("SHORT VERSION %s\n", shortVersion)
   151  	}
   152  
   153  	fullVersion, err := vcd.client.Client.GetVcdFullVersion()
   154  	check.Assert(err, IsNil)
   155  	digits := fullVersion.Version.Segments()
   156  	check.Assert(len(digits), Not(Equals), 0)
   157  	check.Assert(shortVersion, Equals, fmt.Sprintf("%d.%d.%d", digits[0], digits[1], digits[2]))
   158  
   159  	if testVerbose {
   160  		fmt.Printf("FULL VERSION %# v\n", pretty.Formatter(fullVersion))
   161  	}
   162  
   163  	// Comparing the current version against itself, without build. Expected result: equal
   164  	result, err := vcd.client.Client.VersionEqualOrGreater(version, 3)
   165  	check.Assert(err, IsNil)
   166  	check.Assert(result, Equals, true)
   167  
   168  	// Comparing the current version against itself, with build. Expected result: equal
   169  	result, err = vcd.client.Client.VersionEqualOrGreater(version, 4)
   170  	check.Assert(err, IsNil)
   171  	check.Assert(result, Equals, true)
   172  
   173  	digits[3] -= 1
   174  	smallerBuild := intListToVersion(digits, 4)
   175  	// Comparing the current version against same version, with smaller build. Expected result: greater
   176  	result, err = vcd.client.Client.VersionEqualOrGreater(smallerBuild, 4)
   177  	check.Assert(err, IsNil)
   178  	check.Assert(result, Equals, true)
   179  
   180  	// Comparing the current version against same version, with bigger build. Expected result: less
   181  	digits[3] += 2
   182  	biggerBuild := intListToVersion(digits, 4)
   183  	result, err = vcd.client.Client.VersionEqualOrGreater(biggerBuild, 4)
   184  	check.Assert(err, IsNil)
   185  	check.Assert(result, Equals, false)
   186  }