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 }