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