github.com/jfrog/jfrog-cli-core/v2@v2.51.0/common/build/buildutils_test.go (about) 1 package build 2 3 import ( 4 biutils "github.com/jfrog/build-info-go/utils" 5 "os" 6 "path/filepath" 7 "strconv" 8 "testing" 9 "time" 10 11 "github.com/jfrog/jfrog-cli-core/v2/utils/tests" 12 testsutils "github.com/jfrog/jfrog-client-go/utils/tests" 13 14 "github.com/jfrog/jfrog-cli-core/v2/utils/coreutils" 15 artclientutils "github.com/jfrog/jfrog-client-go/artifactory/services/utils" 16 "github.com/stretchr/testify/assert" 17 ) 18 19 var timestamp = strconv.FormatInt(time.Now().Unix(), 10) 20 21 const buildNameFile = "fileBuildName" 22 23 func TestGetBuildName(t *testing.T) { 24 const buildName = "buildName1" 25 const buildNameEnv = "envBuildName" 26 27 // Setup global build name env var. 28 // Ensure that other parallel tests won't be effected. 29 oldBuildName := coreutils.BuildName 30 coreutils.BuildName = oldBuildName + timestamp 31 defer func() { coreutils.BuildName = oldBuildName }() 32 33 // Create build config in temp folder. 34 tmpDir, createTempDirCallback := tests.CreateTempDirWithCallbackAndAssert(t) 35 defer createTempDirCallback() 36 37 confFileName := filepath.Join(tmpDir, ".jfrog", "projects") 38 assert.NoError(t, biutils.CopyFile(confFileName, filepath.Join("testdata", "build.yaml"))) 39 40 wd, err := os.Getwd() 41 assert.NoError(t, err, "Failed to get current dir") 42 chdirCallBack := testsutils.ChangeDirWithCallback(t, wd, tmpDir) 43 defer chdirCallBack() 44 45 buildConfig := NewBuildConfiguration(buildName, "buildNumber", "module", "project") 46 for i := 0; i < 2; i++ { 47 // Validate build name form params input (first priority). 48 actualBuildName, err := buildConfig.GetBuildName() 49 assert.NoError(t, err) 50 assert.Equal(t, actualBuildName, buildName) 51 52 // Set build name // Set build name using env var. 53 // We're now making suer that these env vars aren't affecting the build name and number, 54 // because they should still be read from the params.using env var. 55 testsutils.SetEnvAndAssert(t, coreutils.BuildName, buildNameEnv) 56 } 57 58 // Validate build name form env var (second priority). 59 buildConfig.SetBuildName("") 60 actualBuildName, err := buildConfig.GetBuildName() 61 assert.NoError(t, err) 62 assert.Equal(t, actualBuildName, buildNameEnv) 63 testsutils.UnSetEnvAndAssert(t, coreutils.BuildName) 64 65 // Validate build name form config file (third priority). 66 buildConfig.SetBuildName("") 67 actualBuildName, err = buildConfig.GetBuildName() 68 assert.NoError(t, err) 69 assert.Equal(t, buildNameFile, actualBuildName) 70 } 71 72 func TestGetEmptyBuildNameOnUnixAccessDenied(t *testing.T) { 73 if coreutils.IsWindows() { 74 t.Skip("Skipping TestGetEmptyBuildNameOnUnixAccessDenied test on windows...") 75 } 76 // Create build config in temp folder. 77 tmpDir, createTempDirCallback := tests.CreateTempDirWithCallbackAndAssert(t) 78 defer createTempDirCallback() 79 80 destConfFile := filepath.Join(tmpDir, ".jfrog", "projects") 81 srcConfFile := filepath.Join("testdata", "build.yaml") 82 assert.NoError(t, biutils.CopyFile(destConfFile, srcConfFile)) 83 84 // Remove permissions from config file. 85 assert.NoError(t, os.Chmod(destConfFile, 0000)) 86 defer func() { 87 // Restore permissions for deleting the config file. 88 assert.NoError(t, os.Chmod(destConfFile, 0770)) 89 }() 90 91 // Validate build name form config file doesn't throw an error if access is denied. 92 wd, err := os.Getwd() 93 assert.NoError(t, err, "Failed to get current dir") 94 chdirCallBack := testsutils.ChangeDirWithCallback(t, wd, tmpDir) 95 defer chdirCallBack() 96 buildConfig := NewBuildConfiguration("", "", "", "") 97 actualBuildName, err := buildConfig.GetBuildName() 98 assert.NoError(t, err) 99 assert.False(t, buildConfig.loadedFromConfigFile) 100 assert.Empty(t, actualBuildName) 101 } 102 103 func TestGetBuildNumber(t *testing.T) { 104 const buildNumber = "buildNumber1" 105 const buildNumberEnv = "envBuildNumber" 106 const buildNumberFromFile = artclientutils.LatestBuildNumberKey 107 108 // Create build config in temp folder. 109 tmpDir, createTempDirCallback := tests.CreateTempDirWithCallbackAndAssert(t) 110 defer createTempDirCallback() 111 112 // Create build config in temp folder 113 confFileName := filepath.Join(tmpDir, ".jfrog", "projects") 114 assert.NoError(t, biutils.CopyFile(confFileName, filepath.Join("testdata", "build.yaml"))) 115 116 wd, err := os.Getwd() 117 assert.NoError(t, err, "Failed to get current dir") 118 chdirCallBack := testsutils.ChangeDirWithCallback(t, wd, tmpDir) 119 defer chdirCallBack() 120 121 // Setup global build number env var. 122 // Make sure other parallel tests won't be affected. 123 oldBuildNumber := coreutils.BuildNumber 124 coreutils.BuildNumber = oldBuildNumber + timestamp 125 defer func() { coreutils.BuildNumber = oldBuildNumber }() 126 127 buildConfig := NewBuildConfiguration("", buildNumber, "module", "project") 128 for i := 0; i < 2; i++ { 129 // Validate build number form params input (first priority). 130 actualBuildNumber, err := buildConfig.GetBuildNumber() 131 assert.NoError(t, err) 132 assert.Equal(t, actualBuildNumber, buildNumber) 133 134 // Set build number using env var. 135 testsutils.SetEnvAndAssert(t, coreutils.BuildNumber, buildNumberEnv) 136 } 137 138 // Validate build number form env var (second priority). 139 buildConfig.SetBuildNumber("") 140 actualBuildNumber, err := buildConfig.GetBuildNumber() 141 assert.NoError(t, err) 142 assert.Equal(t, actualBuildNumber, buildNumberEnv) 143 testsutils.UnSetEnvAndAssert(t, coreutils.BuildNumber) 144 145 // Validate build number form file (third priority). 146 buildConfig.SetBuildNumber("") 147 actualBuildNumber, err = buildConfig.GetBuildNumber() 148 assert.NoError(t, err) 149 assert.Equal(t, actualBuildNumber, buildNumberFromFile) 150 } 151 152 func TestGetProject(t *testing.T) { 153 const project = "project1" 154 const projectEnv = "envProject" 155 156 // Setup global project env var. 157 // Make sure other parallel tests won't be affected. 158 oldProject := coreutils.Project 159 coreutils.Project = oldProject + timestamp 160 defer func() { coreutils.Project = oldProject }() 161 162 buildConfig := NewBuildConfiguration("", "", "", project) 163 for i := 0; i < 2; i++ { 164 actualProject := buildConfig.GetProject() 165 assert.Equal(t, actualProject, project) 166 167 // Set project using env var. 168 testsutils.SetEnvAndAssert(t, coreutils.Project, projectEnv) 169 } 170 171 // Validate project form env var (second priority). 172 buildConfig.SetProject("") 173 actualProject := buildConfig.GetProject() 174 assert.Equal(t, actualProject, projectEnv) 175 testsutils.UnSetEnvAndAssert(t, coreutils.Project) 176 } 177 178 func TestIsCollectBuildInfo(t *testing.T) { 179 buildConfig := NewBuildConfiguration("", "", "", "") 180 toCollect, err := buildConfig.IsCollectBuildInfo() 181 assert.NoError(t, err) 182 assert.False(t, toCollect) 183 buildConfig.SetBuildName("a") 184 toCollect, err = buildConfig.IsCollectBuildInfo() 185 assert.NoError(t, err) 186 assert.False(t, toCollect) 187 buildConfig.SetProject("a") 188 toCollect, err = buildConfig.IsCollectBuildInfo() 189 assert.NoError(t, err) 190 assert.False(t, toCollect) 191 buildConfig.SetModule("a") 192 toCollect, err = buildConfig.IsCollectBuildInfo() 193 assert.NoError(t, err) 194 assert.False(t, toCollect) 195 buildConfig.SetBuildNumber("a") 196 toCollect, err = buildConfig.IsCollectBuildInfo() 197 assert.NoError(t, err) 198 assert.True(t, toCollect) 199 } 200 201 func TestIsLoadedFromConfigFile(t *testing.T) { 202 // Create build config in temp folder. 203 tmpDir, createTempDirCallback := tests.CreateTempDirWithCallbackAndAssert(t) 204 defer createTempDirCallback() 205 buildConfig := NewBuildConfiguration("", "", "", "") 206 assert.False(t, buildConfig.IsLoadedFromConfigFile()) 207 buildConfig.SetBuildName("a") 208 assert.False(t, buildConfig.IsLoadedFromConfigFile()) 209 buildConfig.SetProject("a") 210 assert.False(t, buildConfig.IsLoadedFromConfigFile()) 211 buildConfig.SetModule("a") 212 assert.False(t, buildConfig.IsLoadedFromConfigFile()) 213 buildConfig.SetBuildNumber("a") 214 assert.False(t, buildConfig.IsLoadedFromConfigFile()) 215 216 buildConfig.SetBuildNumber("") 217 buildConfig.SetBuildName("") 218 // Create build config in temp folder 219 confFileName := filepath.Join(tmpDir, ".jfrog", "projects") 220 assert.NoError(t, biutils.CopyFile(confFileName, filepath.Join("testdata", "build.yaml"))) 221 wd, err := os.Getwd() 222 assert.NoError(t, err, "Failed to get current dir") 223 chdirCallBack := testsutils.ChangeDirWithCallback(t, wd, tmpDir) 224 defer chdirCallBack() 225 buildName, err := buildConfig.GetBuildName() 226 assert.NoError(t, err) 227 assert.True(t, buildConfig.IsLoadedFromConfigFile()) 228 assert.Equal(t, buildName, buildNameFile) 229 buildNumber, err := buildConfig.GetBuildNumber() 230 assert.NoError(t, err) 231 assert.Equal(t, buildNumber, artclientutils.LatestBuildNumberKey) 232 assert.True(t, buildConfig.IsLoadedFromConfigFile()) 233 234 // Try to get build number first before build name. 235 buildConfig = NewBuildConfiguration("", "", "", "") 236 assert.False(t, buildConfig.IsLoadedFromConfigFile()) 237 238 // Create build config in temp folder 239 buildNumber, err = buildConfig.GetBuildNumber() 240 assert.NoError(t, err) 241 assert.True(t, buildConfig.IsLoadedFromConfigFile()) 242 buildName, err = buildConfig.GetBuildName() 243 assert.True(t, buildConfig.IsLoadedFromConfigFile()) 244 assert.NoError(t, err) 245 assert.Equal(t, buildName, buildNameFile) 246 assert.Equal(t, buildNumber, artclientutils.LatestBuildNumberKey) 247 }