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  }