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  }