github.com/khulnasoft/codebase@v0.0.0-20231214144635-a707781cbb24/cienv/cienv_test.go (about) 1 package cienv 2 3 import ( 4 "os" 5 "reflect" 6 "testing" 7 ) 8 9 func setupEnvs() (cleanup func()) { 10 cleanEnvs := []string{ 11 "CIRCLE_BRANCH", 12 "CIRCLE_PROJECT_REPONAME", 13 "CIRCLE_PROJECT_USERNAME", 14 "CIRCLE_PR_NUMBER", 15 "CIRCLE_PULL_REQUEST", 16 "CIRCLE_SHA1", 17 "CI_BRANCH", 18 "CI_COMMIT_BRANCH", 19 "CI_COMMIT", 20 "CI_COMMIT_SHA", 21 "CI_PROJECT_NAME", 22 "CI_PROJECT_NAMESPACE", 23 "CI_PULL_REQUEST", 24 "CI_COMMIT_PULL_REQUEST", 25 "CI_REPO_NAME", 26 "CI_REPO_OWNER", 27 "DRONE_COMMIT", 28 "DRONE_COMMIT_BRANCH", 29 "DRONE_PULL_REQUEST", 30 "DRONE_REPO", 31 "DRONE_REPO_NAME", 32 "DRONE_REPO_OWNER", 33 "TRAVIS_COMMIT", 34 "TRAVIS_PULL_REQUEST", 35 "TRAVIS_PULL_REQUEST_BRANCH", 36 "TRAVIS_PULL_REQUEST_SHA", 37 "TRAVIS_REPO_SLUG", 38 "GITHUB_ACTIONS", 39 "GERRIT_CHANGE_ID", 40 "GERRIT_REVISION_ID", 41 "GERRIT_BRANCH", 42 } 43 saveEnvs := make(map[string]string) 44 for _, key := range cleanEnvs { 45 saveEnvs[key] = os.Getenv(key) 46 os.Unsetenv(key) 47 } 48 return func() { 49 for key, value := range saveEnvs { 50 os.Setenv(key, value) 51 } 52 } 53 } 54 55 func TestGetBuildInfo_travis(t *testing.T) { 56 cleanup := setupEnvs() 57 defer cleanup() 58 59 os.Setenv("TRAVIS_REPO_SLUG", "invalid repo slug") 60 61 if _, _, err := GetBuildInfo(); err == nil { 62 t.Error("error expected but got nil") 63 } else { 64 t.Log(err) 65 } 66 67 os.Setenv("TRAVIS_REPO_SLUG", "haya14busa/codebase") 68 69 if _, _, err := GetBuildInfo(); err == nil { 70 t.Error("error expected but got nil") 71 } else { 72 t.Log(err) 73 } 74 75 os.Setenv("TRAVIS_PULL_REQUEST_SHA", "sha") 76 77 _, isPR, err := GetBuildInfo() 78 if err != nil { 79 t.Errorf("got unexpected err: %v", err) 80 } 81 if isPR { 82 t.Errorf("isPR = %v, want false", isPR) 83 } 84 85 os.Setenv("TRAVIS_PULL_REQUEST", "str") 86 87 _, isPR, err = GetBuildInfo() 88 if err != nil { 89 t.Errorf("got unexpected error: %v", err) 90 } 91 if isPR { 92 t.Errorf("isPR = %v, want false", isPR) 93 } 94 95 os.Setenv("TRAVIS_PULL_REQUEST", "1") 96 97 if _, isPR, err = GetBuildInfo(); err != nil { 98 t.Errorf("got unexpected err: %v", err) 99 } 100 if !isPR { 101 t.Error("should be pull request build") 102 } 103 104 os.Setenv("TRAVIS_PULL_REQUEST", "false") 105 106 _, isPR, err = GetBuildInfo() 107 if err != nil { 108 t.Errorf("got unexpected err: %v", err) 109 } 110 if isPR { 111 t.Errorf("isPR = %v, want false", isPR) 112 } 113 } 114 115 func TestGetBuildInfo_circleci(t *testing.T) { 116 cleanup := setupEnvs() 117 defer cleanup() 118 119 if _, isPR, err := GetBuildInfo(); isPR { 120 t.Errorf("should be non pull-request build. error: %v", err) 121 } 122 123 os.Setenv("CIRCLE_PR_NUMBER", "1") 124 if _, _, err := GetBuildInfo(); err == nil { 125 t.Error("error expected but got nil") 126 } else { 127 t.Log(err) 128 } 129 130 os.Setenv("CIRCLE_PROJECT_USERNAME", "haya14busa") 131 if _, _, err := GetBuildInfo(); err == nil { 132 t.Error("error expected but got nil") 133 } else { 134 t.Log(err) 135 } 136 137 os.Setenv("CIRCLE_PROJECT_REPONAME", "codebase") 138 if _, _, err := GetBuildInfo(); err == nil { 139 t.Error("error expected but got nil") 140 } else { 141 t.Log(err) 142 } 143 144 os.Setenv("CIRCLE_SHA1", "sha1") 145 g, isPR, err := GetBuildInfo() 146 if err != nil { 147 t.Errorf("unexpected error: %v", err) 148 } 149 if !isPR { 150 t.Error("should be pull request build") 151 } 152 want := &BuildInfo{ 153 Owner: "haya14busa", 154 Repo: "codebase", 155 PullRequest: 1, 156 SHA: "sha1", 157 } 158 if !reflect.DeepEqual(g, want) { 159 t.Errorf("got: %#v, want: %#v", g, want) 160 } 161 } 162 163 func TestGetBuildInfo_droneio(t *testing.T) { 164 cleanup := setupEnvs() 165 defer cleanup() 166 167 if _, isPR, err := GetBuildInfo(); isPR { 168 t.Errorf("should be non pull-request build. error: %v", err) 169 } 170 171 os.Setenv("DRONE_PULL_REQUEST", "1") 172 if _, _, err := GetBuildInfo(); err == nil { 173 t.Error("error expected but got nil") 174 } else { 175 t.Log(err) 176 } 177 178 // Drone <= 0.4 without valid repo 179 os.Setenv("DRONE_REPO", "invalid") 180 if _, _, err := GetBuildInfo(); err == nil { 181 t.Error("error expected but got nil") 182 } else { 183 t.Log(err) 184 } 185 os.Unsetenv("DRONE_REPO") 186 187 // Drone > 0.4 without DRONE_REPO_NAME 188 os.Setenv("DRONE_REPO_OWNER", "haya14busa") 189 if _, _, err := GetBuildInfo(); err == nil { 190 t.Error("error expected but got nil") 191 } else { 192 t.Log(err) 193 } 194 os.Unsetenv("DRONE_REPO_OWNER") 195 196 // Drone > 0.4 without DRONE_REPO_OWNER 197 os.Setenv("DRONE_REPO_NAME", "codebase") 198 if _, _, err := GetBuildInfo(); err == nil { 199 t.Error("error expected but got nil") 200 } else { 201 t.Log(err) 202 } 203 204 // Drone > 0.4 have valid variables 205 os.Setenv("DRONE_REPO_NAME", "codebase") 206 os.Setenv("DRONE_REPO_OWNER", "haya14busa") 207 208 os.Setenv("DRONE_COMMIT", "sha1") 209 g, isPR, err := GetBuildInfo() 210 if err != nil { 211 t.Errorf("unexpected error: %v", err) 212 } 213 if !isPR { 214 t.Error("should be pull request build") 215 } 216 want := &BuildInfo{ 217 Owner: "haya14busa", 218 Repo: "codebase", 219 PullRequest: 1, 220 SHA: "sha1", 221 } 222 if !reflect.DeepEqual(g, want) { 223 t.Errorf("got: %#v, want: %#v", g, want) 224 } 225 } 226 227 func TestGetBuildInfo_common(t *testing.T) { 228 cleanup := setupEnvs() 229 defer cleanup() 230 231 if _, isPR, err := GetBuildInfo(); isPR { 232 t.Errorf("should be non pull-request build. error: %v", err) 233 } 234 235 os.Setenv("CI_PULL_REQUEST", "1") 236 if _, _, err := GetBuildInfo(); err == nil { 237 t.Error("error expected but got nil") 238 } else { 239 t.Log(err) 240 } 241 242 os.Setenv("CI_REPO_OWNER", "haya14busa") 243 if _, _, err := GetBuildInfo(); err == nil { 244 t.Error("error expected but got nil") 245 } else { 246 t.Log(err) 247 } 248 249 os.Setenv("CI_REPO_NAME", "codebase") 250 if _, _, err := GetBuildInfo(); err == nil { 251 t.Error("error expected but got nil") 252 } else { 253 t.Log(err) 254 } 255 256 os.Setenv("CI_COMMIT", "sha1") 257 g, isPR, err := GetBuildInfo() 258 if err != nil { 259 t.Errorf("unexpected error: %v", err) 260 } 261 if !isPR { 262 t.Error("should be pull request build") 263 } 264 want := &BuildInfo{ 265 Owner: "haya14busa", 266 Repo: "codebase", 267 PullRequest: 1, 268 SHA: "sha1", 269 } 270 if !reflect.DeepEqual(g, want) { 271 t.Errorf("got: %#v, want: %#v", g, want) 272 } 273 } 274 275 func TestGetGerritBuildInfo(t *testing.T) { 276 cleanup := setupEnvs() 277 defer cleanup() 278 279 // without any environment variables 280 if _, err := GetGerritBuildInfo(); err == nil { 281 t.Error("error expected but got nil") 282 } else { 283 t.Log(err) 284 } 285 286 os.Setenv("GERRIT_CHANGE_ID", "changedID1") 287 if _, err := GetGerritBuildInfo(); err == nil { 288 t.Error("error expected but got nil") 289 } else { 290 t.Log(err) 291 } 292 293 os.Setenv("GERRIT_REVISION_ID", "revisionID1") 294 if _, err := GetGerritBuildInfo(); err == nil { 295 t.Error("error expected but got nil") 296 } else { 297 t.Log(err) 298 } 299 300 os.Setenv("GERRIT_BRANCH", "master") 301 if _, err := GetGerritBuildInfo(); err != nil { 302 t.Error("nil expected but got err") 303 } 304 }