github.com/haya14busa/reviewdog@v0.0.0-20180723114510-ffb00ef78fd3/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_SHA1",
    16  		"CI_BRANCH",
    17  		"CI_COMMIT",
    18  		"CI_COMMIT_SHA",
    19  		"CI_PROJECT_NAME",
    20  		"CI_PROJECT_NAMESPACE",
    21  		"CI_PULL_REQUEST",
    22  		"CI_REPO_NAME",
    23  		"CI_REPO_OWNER",
    24  		"DRONE_COMMIT",
    25  		"DRONE_COMMIT_BRANCH",
    26  		"DRONE_PULL_REQUEST",
    27  		"DRONE_REPO",
    28  		"DRONE_REPO_NAME",
    29  		"DRONE_REPO_OWNER",
    30  		"TRAVIS_COMMIT",
    31  		"TRAVIS_PULL_REQUEST",
    32  		"TRAVIS_PULL_REQUEST_BRANCH",
    33  		"TRAVIS_PULL_REQUEST_SHA",
    34  		"TRAVIS_REPO_SLUG",
    35  	}
    36  	saveEnvs := make(map[string]string)
    37  	for _, key := range cleanEnvs {
    38  		saveEnvs[key] = os.Getenv(key)
    39  		os.Unsetenv(key)
    40  	}
    41  	return func() {
    42  		for key, value := range saveEnvs {
    43  			os.Setenv(key, value)
    44  		}
    45  	}
    46  }
    47  
    48  func TestGetBuildInfo_travis(t *testing.T) {
    49  	cleanup := setupEnvs()
    50  	defer cleanup()
    51  
    52  	os.Setenv("TRAVIS_REPO_SLUG", "invalid repo slug")
    53  
    54  	if _, _, err := GetBuildInfo(); err == nil {
    55  		t.Error("error expected but got nil")
    56  	} else {
    57  		t.Log(err)
    58  	}
    59  
    60  	os.Setenv("TRAVIS_REPO_SLUG", "haya14busa/reviewdog")
    61  
    62  	if _, _, err := GetBuildInfo(); err == nil {
    63  		t.Error("error expected but got nil")
    64  	} else {
    65  		t.Log(err)
    66  	}
    67  
    68  	os.Setenv("TRAVIS_PULL_REQUEST_SHA", "sha")
    69  
    70  	_, isPR, err := GetBuildInfo()
    71  	if err != nil {
    72  		t.Errorf("got unexpected err: %v", err)
    73  	}
    74  	if isPR {
    75  		t.Errorf("isPR = %v, want false", isPR)
    76  	}
    77  
    78  	os.Setenv("TRAVIS_PULL_REQUEST", "str")
    79  
    80  	_, isPR, err = GetBuildInfo()
    81  	if err != nil {
    82  		t.Errorf("got unexpected error: %v", err)
    83  	}
    84  	if isPR {
    85  		t.Errorf("isPR = %v, want false", isPR)
    86  	}
    87  
    88  	os.Setenv("TRAVIS_PULL_REQUEST", "1")
    89  
    90  	if _, isPR, err = GetBuildInfo(); err != nil {
    91  		t.Errorf("got unexpected err: %v", err)
    92  	}
    93  	if !isPR {
    94  		t.Error("should be pull request build")
    95  	}
    96  
    97  	os.Setenv("TRAVIS_PULL_REQUEST", "false")
    98  
    99  	_, isPR, err = GetBuildInfo()
   100  	if err != nil {
   101  		t.Errorf("got unexpected err: %v", err)
   102  	}
   103  	if isPR {
   104  		t.Errorf("isPR = %v, want false", isPR)
   105  	}
   106  }
   107  
   108  func TestGetBuildInfo_circleci(t *testing.T) {
   109  	cleanup := setupEnvs()
   110  	defer cleanup()
   111  
   112  	if _, isPR, err := GetBuildInfo(); isPR {
   113  		t.Errorf("should be non pull-request build. error: %v", err)
   114  	}
   115  
   116  	os.Setenv("CIRCLE_PR_NUMBER", "1")
   117  	if _, _, err := GetBuildInfo(); err == nil {
   118  		t.Error("error expected but got nil")
   119  	} else {
   120  		t.Log(err)
   121  	}
   122  
   123  	os.Setenv("CIRCLE_PROJECT_USERNAME", "haya14busa")
   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_REPONAME", "reviewdog")
   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_SHA1", "sha1")
   138  	g, isPR, err := GetBuildInfo()
   139  	if err != nil {
   140  		t.Errorf("unexpected error: %v", err)
   141  	}
   142  	if !isPR {
   143  		t.Error("should be pull request build")
   144  	}
   145  	want := &BuildInfo{
   146  		Owner:       "haya14busa",
   147  		Repo:        "reviewdog",
   148  		PullRequest: 1,
   149  		SHA:         "sha1",
   150  	}
   151  	if !reflect.DeepEqual(g, want) {
   152  		t.Errorf("got: %#v, want: %#v", g, want)
   153  	}
   154  }
   155  
   156  func TestGetBuildInfo_droneio(t *testing.T) {
   157  	cleanup := setupEnvs()
   158  	defer cleanup()
   159  
   160  	if _, isPR, err := GetBuildInfo(); isPR {
   161  		t.Errorf("should be non pull-request build. error: %v", err)
   162  	}
   163  
   164  	os.Setenv("DRONE_PULL_REQUEST", "1")
   165  	if _, _, err := GetBuildInfo(); err == nil {
   166  		t.Error("error expected but got nil")
   167  	} else {
   168  		t.Log(err)
   169  	}
   170  
   171  	// Drone <= 0.4 without valid repo
   172  	os.Setenv("DRONE_REPO", "invalid")
   173  	if _, _, err := GetBuildInfo(); err == nil {
   174  		t.Error("error expected but got nil")
   175  	} else {
   176  		t.Log(err)
   177  	}
   178  	os.Unsetenv("DRONE_REPO")
   179  
   180  	// Drone > 0.4 without DRONE_REPO_NAME
   181  	os.Setenv("DRONE_REPO_OWNER", "haya14busa")
   182  	if _, _, err := GetBuildInfo(); err == nil {
   183  		t.Error("error expected but got nil")
   184  	} else {
   185  		t.Log(err)
   186  	}
   187  	os.Unsetenv("DRONE_REPO_OWNER")
   188  
   189  	// Drone > 0.4 without DRONE_REPO_OWNER
   190  	os.Setenv("DRONE_REPO_NAME", "reviewdog")
   191  	if _, _, err := GetBuildInfo(); err == nil {
   192  		t.Error("error expected but got nil")
   193  	} else {
   194  		t.Log(err)
   195  	}
   196  
   197  	// Drone > 0.4 have valid variables
   198  	os.Setenv("DRONE_REPO_NAME", "reviewdog")
   199  	os.Setenv("DRONE_REPO_OWNER", "haya14busa")
   200  
   201  	os.Setenv("DRONE_COMMIT", "sha1")
   202  	g, isPR, err := GetBuildInfo()
   203  	if err != nil {
   204  		t.Errorf("unexpected error: %v", err)
   205  	}
   206  	if !isPR {
   207  		t.Error("should be pull request build")
   208  	}
   209  	want := &BuildInfo{
   210  		Owner:       "haya14busa",
   211  		Repo:        "reviewdog",
   212  		PullRequest: 1,
   213  		SHA:         "sha1",
   214  	}
   215  	if !reflect.DeepEqual(g, want) {
   216  		t.Errorf("got: %#v, want: %#v", g, want)
   217  	}
   218  }
   219  
   220  func TestGetBuildInfo_common(t *testing.T) {
   221  	cleanup := setupEnvs()
   222  	defer cleanup()
   223  
   224  	if _, isPR, err := GetBuildInfo(); isPR {
   225  		t.Errorf("should be non pull-request build. error: %v", err)
   226  	}
   227  
   228  	os.Setenv("CI_PULL_REQUEST", "1")
   229  	if _, _, err := GetBuildInfo(); err == nil {
   230  		t.Error("error expected but got nil")
   231  	} else {
   232  		t.Log(err)
   233  	}
   234  
   235  	os.Setenv("CI_REPO_OWNER", "haya14busa")
   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_NAME", "reviewdog")
   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_COMMIT", "sha1")
   250  	g, isPR, err := GetBuildInfo()
   251  	if err != nil {
   252  		t.Errorf("unexpected error: %v", err)
   253  	}
   254  	if !isPR {
   255  		t.Error("should be pull request build")
   256  	}
   257  	want := &BuildInfo{
   258  		Owner:       "haya14busa",
   259  		Repo:        "reviewdog",
   260  		PullRequest: 1,
   261  		SHA:         "sha1",
   262  	}
   263  	if !reflect.DeepEqual(g, want) {
   264  		t.Errorf("got: %#v, want: %#v", g, want)
   265  	}
   266  }