github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/clients/conditions.go (about) 1 package clients 2 3 import ( 4 "os" 5 "strconv" 6 "strings" 7 "testing" 8 ) 9 10 // RequiredSystemScope will restrict a test to only be run by system scope. 11 func RequiredSystemScope(t *testing.T) { 12 if os.Getenv("OS_SYSTEM_SCOPE") != "all" { 13 t.Skip("must use system scope to run this test") 14 } 15 } 16 17 // RequireManilaReplicas will restrict a test to only be run with enabled 18 // manila replicas. 19 func RequireManilaReplicas(t *testing.T) { 20 if os.Getenv("OS_MANILA_REPLICAS") != "true" { 21 t.Skip("manila replicas must be enabled to run this test") 22 } 23 } 24 25 // RequireAdmin will restrict a test to only be run by admin users. 26 func RequireAdmin(t *testing.T) { 27 if os.Getenv("OS_USERNAME") != "admin" { 28 t.Skip("must be admin to run this test") 29 } 30 } 31 32 // RequireNonAdmin will restrict a test to only be run by non-admin users. 33 func RequireNonAdmin(t *testing.T) { 34 if os.Getenv("OS_USERNAME") == "admin" { 35 t.Skip("must be a non-admin to run this test") 36 } 37 } 38 39 // RequirePortForwarding will restrict a test to only be run in environments 40 // that support port forwarding 41 func RequirePortForwarding(t *testing.T) { 42 if os.Getenv("OS_PORTFORWARDING_ENVIRONMENT") == "" { 43 t.Skip("this test requires support for port forwarding") 44 } 45 } 46 47 // RequireGuestAgent will restrict a test to only be run in 48 // environments that support the QEMU guest agent. 49 func RequireGuestAgent(t *testing.T) { 50 if os.Getenv("OS_GUEST_AGENT") == "" { 51 t.Skip("this test requires support for qemu guest agent and to set OS_GUEST_AGENT to 1") 52 } 53 } 54 55 // RequireIdentityV2 will restrict a test to only be run in 56 // environments that support the Identity V2 API. 57 func RequireIdentityV2(t *testing.T) { 58 if os.Getenv("OS_IDENTITY_API_VERSION") != "2.0" { 59 t.Skip("this test requires support for the identity v2 API") 60 } 61 } 62 63 // RequireLiveMigration will restrict a test to only be run in 64 // environments that support live migration. 65 func RequireLiveMigration(t *testing.T) { 66 if os.Getenv("OS_LIVE_MIGRATE") == "" { 67 t.Skip("this test requires support for live migration and to set OS_LIVE_MIGRATE to 1") 68 } 69 } 70 71 // RequireLong will ensure long-running tests can run. 72 func RequireLong(t *testing.T) { 73 if testing.Short() { 74 t.Skip("skipping test in short mode") 75 } 76 } 77 78 // RequireNovaNetwork will restrict a test to only be run in 79 // environments that support nova-network. 80 func RequireNovaNetwork(t *testing.T) { 81 if os.Getenv("OS_NOVANET") == "" { 82 t.Skip("this test requires nova-network and to set OS_NOVANET to 1") 83 } 84 } 85 86 // RequireIronicHTTPBasic will restric a test to be only run in 87 // environments that have Ironic using http_basic. 88 func RequireIronicHTTPBasic(t *testing.T) { 89 if os.Getenv("IRONIC_ENDPOINT") == "" || os.Getenv("OS_USERNAME") == "" || os.Getenv("OS_PASSWORD") == "" { 90 t.Skip("this test requires Ironic using http_basic, set OS_USERNAME, OS_PASSWORD and IRONIC_ENDPOINT") 91 } 92 } 93 94 func getReleaseFromEnv(t *testing.T) string { 95 current := strings.TrimPrefix(os.Getenv("OS_BRANCH"), "stable/") 96 if current == "" { 97 t.Fatal("this test requires OS_BRANCH to be set but it wasn't") 98 } 99 return current 100 } 101 102 // SkipRelease will have the test be skipped on a certain 103 // release. Releases are named such as 'stable/mitaka', master, etc. 104 func SkipRelease(t *testing.T, release string) { 105 current := getReleaseFromEnv(t) 106 if current == release { 107 t.Skipf("this is not supported in %s", release) 108 } 109 } 110 111 // SkipReleasesBelow will have the test be skipped on releases below a certain 112 // one. Releases are named such as 'stable/mitaka', master, etc. 113 func SkipReleasesBelow(t *testing.T, release string) { 114 current := getReleaseFromEnv(t) 115 116 if IsCurrentBelow(t, release) { 117 t.Skipf("this is not supported below %s, testing in %s", release, current) 118 } 119 } 120 121 // SkipReleasesAbove will have the test be skipped on releases above a certain 122 // one. The test is always skipped on master release. Releases are named such 123 // as 'stable/mitaka', master, etc. 124 func SkipReleasesAbove(t *testing.T, release string) { 125 current := getReleaseFromEnv(t) 126 127 if IsCurrentAbove(t, release) { 128 t.Skipf("this is not supported above %s, testing in %s", release, current) 129 } 130 } 131 132 func isReleaseNumeral(release string) bool { 133 _, err := strconv.Atoi(release[0:1]) 134 return err == nil 135 } 136 137 // IsCurrentAbove will return true on releases above a certain 138 // one. The result is always true on master release. Releases are named such 139 // as 'stable/mitaka', master, etc. 140 func IsCurrentAbove(t *testing.T, release string) bool { 141 current := getReleaseFromEnv(t) 142 release = strings.TrimPrefix(release, "stable/") 143 144 if release != "master" { 145 // Assume master is always too new 146 if current == "master" { 147 return true 148 } 149 // Numeral releases are always newer than non-numeral ones 150 if isReleaseNumeral(current) && !isReleaseNumeral(release) { 151 return true 152 } 153 if current > release && !(!isReleaseNumeral(current) && isReleaseNumeral(release)) { 154 return true 155 } 156 } 157 t.Logf("Target release %s is below the current branch %s", release, current) 158 return false 159 } 160 161 // IsCurrentBelow will return true on releases below a certain 162 // one. Releases are named such as 'stable/mitaka', master, etc. 163 func IsCurrentBelow(t *testing.T, release string) bool { 164 current := getReleaseFromEnv(t) 165 release = strings.TrimPrefix(release, "stable/") 166 167 if current != "master" { 168 // Assume master is always too new 169 if release == "master" { 170 return true 171 } 172 // Numeral releases are always newer than non-numeral ones 173 if isReleaseNumeral(release) && !isReleaseNumeral(current) { 174 return true 175 } 176 if release > current && !(!isReleaseNumeral(release) && isReleaseNumeral(current)) { 177 return true 178 } 179 } 180 t.Logf("Target release %s is above the current branch %s", release, current) 181 return false 182 }