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  }