github.com/jfrog/jfrog-cli@v1.54.1/gradle_test.go (about) 1 package main 2 3 import ( 4 "github.com/jfrog/jfrog-cli-core/artifactory/commands/gradle" 5 "github.com/jfrog/jfrog-cli-core/artifactory/utils" 6 "github.com/jfrog/jfrog-cli-core/common/commands" 7 "os" 8 "path/filepath" 9 "strings" 10 "testing" 11 12 "github.com/jfrog/jfrog-cli-core/utils/coreutils" 13 "github.com/jfrog/jfrog-client-go/artifactory/buildinfo" 14 15 "github.com/stretchr/testify/assert" 16 17 "github.com/jfrog/jfrog-cli-core/artifactory/spec" 18 "github.com/jfrog/jfrog-cli/inttestutils" 19 "github.com/jfrog/jfrog-cli/utils/tests" 20 ) 21 22 const ( 23 gradleFlagName = "gradle" 24 gradleModuleId = ":minimal-example:1.0" 25 ) 26 27 func cleanGradleTest() { 28 os.Unsetenv(coreutils.HomeDir) 29 deleteSpec := spec.NewBuilder().Pattern(tests.GradleRepo).BuildSpec() 30 tests.DeleteFiles(deleteSpec, serverDetails) 31 tests.CleanFileSystem() 32 } 33 34 func TestGradleBuildWithServerID(t *testing.T) { 35 initGradleTest(t) 36 37 buildGradlePath := createGradleProject(t, "gradleproject") 38 configFilePath := filepath.Join(filepath.FromSlash(tests.GetTestResourcesPath()), "buildspecs", tests.GradleServerIDConfig) 39 configFilePath, err := tests.ReplaceTemplateVariables(configFilePath, "") 40 assert.NoError(t, err) 41 buildName := "gradle-cli" 42 buildNumber := "1" 43 runAndValidateGradle(buildGradlePath, configFilePath, buildName, buildNumber, t) 44 assert.NoError(t, artifactoryCli.Exec("bp", buildName, buildNumber)) 45 publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, buildName, buildNumber) 46 if err != nil { 47 assert.NoError(t, err) 48 return 49 } 50 if !found { 51 assert.True(t, found, "build info was expected to be found") 52 return 53 } 54 buildInfo := publishedBuildInfo.BuildInfo 55 validateBuildInfo(buildInfo, t, 0, 1, gradleModuleId, buildinfo.Gradle) 56 57 cleanGradleTest() 58 } 59 60 func TestNativeGradleBuildWithServerID(t *testing.T) { 61 initGradleTest(t) 62 buildGradlePath := createGradleProject(t, "gradleproject") 63 configFilePath := filepath.Join(filepath.FromSlash(tests.GetTestResourcesPath()), "buildspecs", tests.GradleConfig) 64 destPath := filepath.Join(filepath.Dir(buildGradlePath), ".jfrog", "projects") 65 createConfigFile(destPath, configFilePath, t) 66 oldHomeDir := changeWD(t, filepath.Dir(buildGradlePath)) 67 buildNumber := "1" 68 buildGradlePath = strings.Replace(buildGradlePath, `\`, "/", -1) // Windows compatibility. 69 runCli(t, "gradle", "clean artifactoryPublish", "-b"+buildGradlePath, "--build-name="+tests.GradleBuildName, "--build-number="+buildNumber) 70 err := os.Chdir(oldHomeDir) 71 assert.NoError(t, err) 72 // Validate 73 searchSpec, err := tests.CreateSpec(tests.SearchAllGradle) 74 assert.NoError(t, err) 75 verifyExistInArtifactory(tests.GetGradleDeployedArtifacts(), searchSpec, t) 76 verifyExistInArtifactoryByProps(tests.GetGradleDeployedArtifacts(), tests.GradleRepo+"/*", "build.name="+tests.GradleBuildName+";build.number="+buildNumber, t) 77 assert.NoError(t, artifactoryCli.Exec("bp", tests.GradleBuildName, buildNumber)) 78 79 publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, tests.GradleBuildName, buildNumber) 80 if err != nil { 81 assert.NoError(t, err) 82 return 83 } 84 if !found { 85 assert.True(t, found, "build info was expected to be found") 86 return 87 } 88 buildInfo := publishedBuildInfo.BuildInfo 89 validateBuildInfo(buildInfo, t, 0, 1, gradleModuleId, buildinfo.Gradle) 90 cleanGradleTest() 91 } 92 93 func TestNativeGradleBuildWithServerIDAndDetailedSummary(t *testing.T) { 94 initGradleTest(t) 95 buildGradlePath := createGradleProject(t, "gradleproject") 96 configFilePath := filepath.Join(filepath.FromSlash(tests.GetTestResourcesPath()), "buildspecs", tests.GradleConfig) 97 destPath := filepath.Join(filepath.Dir(buildGradlePath), ".jfrog", "projects") 98 createConfigFile(destPath, configFilePath, t) 99 oldHomeDir := changeWD(t, filepath.Dir(buildGradlePath)) 100 buildNumber := "1" 101 buildGradlePath = strings.Replace(buildGradlePath, `\`, "/", -1) // Windows compatibility. 102 103 // Test gradle with detailed summary without buildinfo props. 104 filteredGradleArgs := []string{"clean artifactoryPublish", "-b" + buildGradlePath} 105 gradleCmd := gradle.NewGradleCommand().SetConfiguration(new(utils.BuildConfiguration)).SetTasks(strings.Join(filteredGradleArgs, " ")).SetConfigPath(filepath.Join(destPath, "gradle.yaml")).SetDetailedSummary(true) 106 assert.NoError(t, commands.Exec(gradleCmd)) 107 // Validate sha256 108 tests.VerifySha256DetailedSummaryFromResult(t, gradleCmd.Result()) 109 110 // Test gradle with detailed summary + buildinfo. 111 buildConfiguration := &utils.BuildConfiguration{BuildName: tests.GradleBuildName, BuildNumber: buildNumber} 112 gradleCmd = gradle.NewGradleCommand().SetConfiguration(buildConfiguration).SetTasks(strings.Join(filteredGradleArgs, " ")).SetConfigPath(filepath.Join(destPath, "gradle.yaml")).SetDetailedSummary(true) 113 assert.NoError(t, commands.Exec(gradleCmd)) 114 // Validate sha256 115 tests.VerifySha256DetailedSummaryFromResult(t, gradleCmd.Result()) 116 117 err := os.Chdir(oldHomeDir) 118 assert.NoError(t, err) 119 // Validate build info 120 searchSpec, err := tests.CreateSpec(tests.SearchAllGradle) 121 assert.NoError(t, err) 122 verifyExistInArtifactory(tests.GetGradleDeployedArtifacts(), searchSpec, t) 123 verifyExistInArtifactoryByProps(tests.GetGradleDeployedArtifacts(), tests.GradleRepo+"/*", "build.name="+tests.GradleBuildName+";build.number="+buildNumber, t) 124 assert.NoError(t, artifactoryCli.Exec("bp", tests.GradleBuildName, buildNumber)) 125 126 publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, tests.GradleBuildName, buildNumber) 127 if err != nil { 128 assert.NoError(t, err) 129 return 130 } 131 if !found { 132 assert.True(t, found, "build info was expected to be found") 133 return 134 } 135 buildInfo := publishedBuildInfo.BuildInfo 136 validateBuildInfo(buildInfo, t, 0, 1, gradleModuleId, buildinfo.Gradle) 137 cleanGradleTest() 138 } 139 140 func TestGradleBuildWithServerIDWithUsesPlugin(t *testing.T) { 141 initGradleTest(t) 142 143 buildGradlePath := createGradleProject(t, "projectwithplugin") 144 configFilePath := filepath.Join(filepath.FromSlash(tests.GetTestResourcesPath()), "buildspecs", tests.GradleServerIDUsesPluginConfig) 145 configFilePath, err := tests.ReplaceTemplateVariables(configFilePath, "") 146 assert.NoError(t, err) 147 buildNumber := "1" 148 runAndValidateGradle(buildGradlePath, configFilePath, tests.GradleBuildName, buildNumber, t) 149 150 assert.NoError(t, artifactoryCli.Exec("bp", tests.GradleBuildName, buildNumber)) 151 publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, tests.GradleBuildName, buildNumber) 152 if err != nil { 153 assert.NoError(t, err) 154 return 155 } 156 if !found { 157 assert.True(t, found, "build info was expected to be found") 158 return 159 } 160 buildInfo := publishedBuildInfo.BuildInfo 161 validateBuildInfo(buildInfo, t, 0, 1, gradleModuleId, buildinfo.Gradle) 162 cleanGradleTest() 163 } 164 165 // This test check legacy behavior whereby the Gradle config yml contains the username, url and password. 166 func TestGradleBuildWithCredentials(t *testing.T) { 167 initGradleTest(t) 168 169 if *tests.RtAccessToken != "" { 170 origUsername, origPassword := tests.SetBasicAuthFromAccessToken(t) 171 defer func() { 172 *tests.RtUser = origUsername 173 *tests.RtPassword = origPassword 174 }() 175 } 176 177 buildNumber := "1" 178 buildGradlePath := createGradleProject(t, "gradleproject") 179 srcConfigTemplate := filepath.Join(filepath.FromSlash(tests.GetTestResourcesPath()), "buildspecs", tests.GradleUsernamePasswordTemplate) 180 configFilePath, err := tests.ReplaceTemplateVariables(srcConfigTemplate, "") 181 assert.NoError(t, err) 182 183 runAndValidateGradle(buildGradlePath, configFilePath, tests.GradleBuildName, buildNumber, t) 184 assert.NoError(t, artifactoryCli.Exec("bp", tests.GradleBuildName, buildNumber)) 185 publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, tests.GradleBuildName, buildNumber) 186 if err != nil { 187 assert.NoError(t, err) 188 return 189 } 190 if !found { 191 assert.True(t, found, "build info was expected to be found") 192 return 193 } 194 buildInfo := publishedBuildInfo.BuildInfo 195 validateBuildInfo(buildInfo, t, 0, 1, gradleModuleId, buildinfo.Gradle) 196 cleanGradleTest() 197 } 198 199 func runAndValidateGradle(buildGradlePath, configFilePath, buildName, buildNumber string, t *testing.T) { 200 runCliWithLegacyBuildtoolsCmd(t, "gradle", "clean artifactoryPublish -b "+buildGradlePath, configFilePath, "--build-name="+buildName, "--build-number="+buildNumber) 201 searchSpec, err := tests.CreateSpec(tests.SearchAllGradle) 202 assert.NoError(t, err) 203 204 verifyExistInArtifactory(tests.GetGradleDeployedArtifacts(), searchSpec, t) 205 verifyExistInArtifactoryByProps(tests.GetGradleDeployedArtifacts(), tests.GradleRepo+"/*", "build.name="+buildName+";build.number="+buildNumber, t) 206 inttestutils.ValidateGeneratedBuildInfoModule(t, buildName, buildNumber, "", []string{gradleModuleId}, buildinfo.Gradle) 207 } 208 209 func createGradleProject(t *testing.T, projectName string) string { 210 srcBuildFile := filepath.Join(filepath.FromSlash(tests.GetTestResourcesPath()), "gradle", projectName, "build.gradle") 211 buildGradlePath, err := tests.ReplaceTemplateVariables(srcBuildFile, "") 212 assert.NoError(t, err) 213 214 srcSettingsFile := filepath.Join(filepath.FromSlash(tests.GetTestResourcesPath()), "gradle", projectName, "settings.gradle") 215 _, err = tests.ReplaceTemplateVariables(srcSettingsFile, "") 216 assert.NoError(t, err) 217 218 return buildGradlePath 219 } 220 func initGradleTest(t *testing.T) { 221 if !*tests.TestGradle { 222 t.Skip("Skipping Gradle test. To run Gradle test add the '-test.gradle=true' option.") 223 } 224 createJfrogHomeConfig(t, true) 225 }