github.com/jfrog/jfrog-cli-core@v1.12.1/artifactory/commands/utils/configfile_test.go (about)

     1  package utils
     2  
     3  import (
     4  	"flag"
     5  	"os"
     6  	"path/filepath"
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/codegangsta/cli"
    11  	"github.com/jfrog/jfrog-cli-core/artifactory/utils"
    12  	"github.com/jfrog/jfrog-cli-core/utils/coreutils"
    13  	"github.com/jfrog/jfrog-client-go/utils/io/fileutils"
    14  	clientlog "github.com/jfrog/jfrog-client-go/utils/log"
    15  	"github.com/spf13/viper"
    16  	"github.com/stretchr/testify/assert"
    17  )
    18  
    19  func init() {
    20  	clientlog.SetLogger(clientlog.NewLogger(clientlog.WARN, nil)) // Disable "[Info] *** build config successfully created." messages
    21  }
    22  
    23  func TestGoConfigFile(t *testing.T) {
    24  	// Set JFROG_CLI_HOME_DIR environment variable
    25  	tempDirPath := createTempEnv(t)
    26  	defer fileutils.RemoveTempDir(tempDirPath)
    27  
    28  	// Create build config
    29  	context := createContext(resolutionServerId+"=relServer", resolutionRepo+"=repo", deploymentServerId+"=depServer", deploymentRepo+"=repo-local")
    30  	err := CreateBuildConfig(context, utils.Go)
    31  	assert.NoError(t, err)
    32  
    33  	// Check configuration
    34  	config := checkCommonAndGetConfiguration(t, utils.Go.String(), tempDirPath)
    35  	assert.Equal(t, "relServer", config.GetString("resolver.serverId"))
    36  	assert.Equal(t, "repo", config.GetString("resolver.repo"))
    37  	assert.Equal(t, "depServer", config.GetString("deployer.serverId"))
    38  	assert.Equal(t, "repo-local", config.GetString("deployer.repo"))
    39  }
    40  
    41  func TestPipConfigFile(t *testing.T) {
    42  	// Set JFROG_CLI_HOME_DIR environment variable
    43  	tempDirPath := createTempEnv(t)
    44  	defer os.RemoveAll(tempDirPath)
    45  
    46  	// Create build config
    47  	context := createContext(resolutionServerId+"=relServer", resolutionRepo+"=repo", deploymentServerId+"=depServer", deploymentRepo+"=repo-local")
    48  	err := CreateBuildConfig(context, utils.Pip)
    49  	assert.NoError(t, err)
    50  
    51  	// Check configuration
    52  	config := checkCommonAndGetConfiguration(t, utils.Pip.String(), tempDirPath)
    53  	assert.Equal(t, "relServer", config.GetString("resolver.serverId"))
    54  	assert.Equal(t, "repo", config.GetString("resolver.repo"))
    55  	assert.Equal(t, "depServer", config.GetString("deployer.serverId"))
    56  	assert.Equal(t, "repo-local", config.GetString("deployer.repo"))
    57  }
    58  
    59  func TestNpmConfigFile(t *testing.T) {
    60  	// Set JFROG_CLI_HOME_DIR environment variable
    61  	tempDirPath := createTempEnv(t)
    62  	defer os.RemoveAll(tempDirPath)
    63  
    64  	// Create build config
    65  	context := createContext(resolutionServerId+"=relServer", resolutionRepo+"=repo", deploymentServerId+"=depServer", deploymentRepo+"=repo-local")
    66  	err := CreateBuildConfig(context, utils.Npm)
    67  	assert.NoError(t, err)
    68  
    69  	// Check configuration
    70  	config := checkCommonAndGetConfiguration(t, utils.Npm.String(), tempDirPath)
    71  	assert.Equal(t, "relServer", config.GetString("resolver.serverId"))
    72  	assert.Equal(t, "repo", config.GetString("resolver.repo"))
    73  	assert.Equal(t, "depServer", config.GetString("deployer.serverId"))
    74  	assert.Equal(t, "repo-local", config.GetString("deployer.repo"))
    75  }
    76  
    77  func TestNugetConfigFile(t *testing.T) {
    78  	// Set JFROG_CLI_HOME_DIR environment variable
    79  	tempDirPath := createTempEnv(t)
    80  	defer os.RemoveAll(tempDirPath)
    81  
    82  	// Create build config
    83  	context := createContext(resolutionServerId+"=relServer", resolutionRepo+"=repo")
    84  	err := CreateBuildConfig(context, utils.Nuget)
    85  	assert.NoError(t, err)
    86  
    87  	// Check configuration
    88  	config := checkCommonAndGetConfiguration(t, utils.Nuget.String(), tempDirPath)
    89  	assert.Equal(t, "relServer", config.GetString("resolver.serverId"))
    90  	assert.Equal(t, "repo", config.GetString("resolver.repo"))
    91  	assert.Equal(t, true, config.GetBool("resolver.nugetV2"))
    92  }
    93  
    94  func TestMavenConfigFile(t *testing.T) {
    95  	// Set JFROG_CLI_HOME_DIR environment variable
    96  	tempDirPath := createTempEnv(t)
    97  	defer os.RemoveAll(tempDirPath)
    98  
    99  	// Create build config
   100  	context := createContext(resolutionServerId+"=relServer", resolutionReleasesRepo+"=release-repo", resolutionSnapshotsRepo+"=snapshot-repo",
   101  		deploymentServerId+"=depServer", deploymentReleasesRepo+"=release-repo-local", deploymentSnapshotsRepo+"=snapshot-repo-local",
   102  		includePatterns+"=*pattern*;second", excludePatterns+"=excluding;*pattern")
   103  	err := CreateBuildConfig(context, utils.Maven)
   104  	assert.NoError(t, err)
   105  
   106  	// Check configuration
   107  	config := checkCommonAndGetConfiguration(t, utils.Maven.String(), tempDirPath)
   108  	assert.Equal(t, "relServer", config.GetString("resolver.serverId"))
   109  	assert.Equal(t, "snapshot-repo", config.GetString("resolver.snapshotRepo"))
   110  	assert.Equal(t, "release-repo", config.GetString("resolver.releaseRepo"))
   111  	assert.Equal(t, "depServer", config.GetString("deployer.serverId"))
   112  	assert.Equal(t, "snapshot-repo-local", config.GetString("deployer.snapshotRepo"))
   113  	assert.Equal(t, "release-repo-local", config.GetString("deployer.releaseRepo"))
   114  	assert.Equal(t, "*pattern*;second", config.GetString("deployer.includePatterns"))
   115  	assert.Equal(t, "excluding;*pattern", config.GetString("deployer.excludePatterns"))
   116  }
   117  
   118  func TestGradleConfigFile(t *testing.T) {
   119  	// Set JFROG_CLI_HOME_DIR environment variable
   120  	tempDirPath := createTempEnv(t)
   121  	defer os.RemoveAll(tempDirPath)
   122  
   123  	// Create build config
   124  	context := createContext(resolutionServerId+"=relServer", resolutionRepo+"=repo", deploymentServerId+"=depServer", deploymentRepo+"=repo-local",
   125  		ivyDescPattern+"=[ivy]/[pattern]", ivyArtifactsPattern+"=[artifact]/[pattern]")
   126  	err := CreateBuildConfig(context, utils.Gradle)
   127  	assert.NoError(t, err)
   128  
   129  	// Check configuration
   130  	config := checkCommonAndGetConfiguration(t, utils.Gradle.String(), tempDirPath)
   131  	assert.Equal(t, "relServer", config.GetString("resolver.serverId"))
   132  	assert.Equal(t, "repo", config.GetString("resolver.repo"))
   133  	assert.Equal(t, "depServer", config.GetString("deployer.serverId"))
   134  	assert.Equal(t, "repo-local", config.GetString("deployer.repo"))
   135  	assert.Equal(t, true, config.GetBool("deployer.deployMavenDescriptors"))
   136  	assert.Equal(t, true, config.GetBool("deployer.deployIvyDescriptors"))
   137  	assert.Equal(t, "[ivy]/[pattern]", config.GetString("deployer.ivyPattern"))
   138  	assert.Equal(t, "[artifact]/[pattern]", config.GetString("deployer.artifactPattern"))
   139  	assert.Equal(t, true, config.GetBool("usePlugin"))
   140  	assert.Equal(t, true, config.GetBool("useWrapper"))
   141  }
   142  
   143  func TestGradleConfigFileDefaultPatterns(t *testing.T) {
   144  	// Set JFROG_CLI_HOME_DIR environment variable
   145  	tempDirPath := createTempEnv(t)
   146  	defer os.RemoveAll(tempDirPath)
   147  
   148  	// Create build config
   149  	context := createContext(resolutionServerId+"=relServer", resolutionRepo+"=repo", deploymentServerId+"=depServer", deploymentRepo+"=repo-local")
   150  	err := CreateBuildConfig(context, utils.Gradle)
   151  	assert.NoError(t, err)
   152  
   153  	// Check configuration
   154  	config := checkCommonAndGetConfiguration(t, utils.Gradle.String(), tempDirPath)
   155  	assert.Equal(t, "relServer", config.GetString("resolver.serverId"))
   156  	assert.Equal(t, "repo", config.GetString("resolver.repo"))
   157  	assert.Equal(t, "depServer", config.GetString("deployer.serverId"))
   158  	assert.Equal(t, "repo-local", config.GetString("deployer.repo"))
   159  	assert.Equal(t, true, config.GetBool("deployer.deployMavenDescriptors"))
   160  	assert.Equal(t, true, config.GetBool("deployer.deployIvyDescriptors"))
   161  	assert.Equal(t, "[organization]/[module]/ivy-[revision].xml", config.GetString("deployer.ivyPattern"))
   162  	assert.Equal(t, "[organization]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]", config.GetString("deployer.artifactPattern"))
   163  	assert.Equal(t, true, config.GetBool("usePlugin"))
   164  	assert.Equal(t, true, config.GetBool("useWrapper"))
   165  }
   166  
   167  func TestValidateConfigResolver(t *testing.T) {
   168  	// Create and check empty config
   169  	configFile := NewConfigFile(utils.Go, createContext())
   170  	err := configFile.validateConfig()
   171  	assert.NoError(t, err)
   172  
   173  	// Check scenarios of serverId and repo
   174  	configFile.Resolver.ServerId = "serverId"
   175  	err = configFile.validateConfig()
   176  	assert.EqualError(t, err, "Resolution repository/ies must be set.")
   177  	configFile.Resolver.Repo = "repo"
   178  	err = configFile.validateConfig()
   179  	assert.NoError(t, err)
   180  	configFile.Resolver.ServerId = ""
   181  	err = configFile.validateConfig()
   182  	assert.EqualError(t, err, "Resolver server ID must be set.")
   183  
   184  	// Check scenarios of serverId and release/snapshot repositories
   185  	configFile.Resolver.ServerId = "serverId"
   186  	configFile.Resolver.SnapshotRepo = "snapshotRepo"
   187  	err = configFile.validateConfig()
   188  	assert.EqualError(t, err, "Resolution snapshot and release repositories must be set.")
   189  	configFile.Resolver.ReleaseRepo = "releaseRepo"
   190  	err = configFile.validateConfig()
   191  	assert.NoError(t, err)
   192  	configFile.Resolver.ServerId = ""
   193  	err = configFile.validateConfig()
   194  	assert.EqualError(t, err, "Resolver server ID must be set.")
   195  }
   196  
   197  func TestValidateConfigDeployer(t *testing.T) {
   198  	// Create and check empty config
   199  	configFile := NewConfigFile(utils.Go, createContext())
   200  	err := configFile.validateConfig()
   201  	assert.NoError(t, err)
   202  
   203  	// Check scenarios of serverId and repo
   204  	configFile.Deployer.ServerId = "serverId"
   205  	err = configFile.validateConfig()
   206  	assert.EqualError(t, err, "Deployment repository/ies must be set.")
   207  	configFile.Deployer.Repo = "repo"
   208  	err = configFile.validateConfig()
   209  	assert.NoError(t, err)
   210  	configFile.Deployer.ServerId = ""
   211  	err = configFile.validateConfig()
   212  	assert.EqualError(t, err, "Deployer server ID must be set.")
   213  
   214  	// Check scenarios of serverId and release/snapshot repositories
   215  	configFile.Deployer.ServerId = "serverId"
   216  	configFile.Deployer.ReleaseRepo = "releaseRepo"
   217  	err = configFile.validateConfig()
   218  	assert.EqualError(t, err, "Deployment snapshot and release repositories must be set.")
   219  	configFile.Deployer.SnapshotRepo = "snapshotRepo"
   220  	err = configFile.validateConfig()
   221  	assert.NoError(t, err)
   222  	configFile.Deployer.ServerId = ""
   223  	err = configFile.validateConfig()
   224  	assert.EqualError(t, err, "Deployer server ID must be set.")
   225  }
   226  
   227  // Set JFROG_CLI_HOME_DIR environment variable to be a new temp directory
   228  func createTempEnv(t *testing.T) string {
   229  	tmpDir, err := fileutils.CreateTempDir()
   230  	assert.NoError(t, err)
   231  	err = os.Setenv(coreutils.HomeDir, tmpDir)
   232  	assert.NoError(t, err)
   233  	return tmpDir
   234  }
   235  
   236  // Create new Codegangsta context with all required flags.
   237  func createContext(stringFlags ...string) *cli.Context {
   238  	flagSet := flag.NewFlagSet("TestFlagSet", flag.ContinueOnError)
   239  	flags := setBoolFlags(flagSet, global, usesPlugin, useWrapper, deployMavenDesc, deployIvyDesc, nugetV2)
   240  	flags = append(flags, setStringFlags(flagSet, stringFlags...)...)
   241  	flagSet.Parse(flags)
   242  	return cli.NewContext(nil, flagSet, nil)
   243  }
   244  
   245  // Set boolean flags and initialize them to true. Return a slice of them.
   246  func setBoolFlags(flagSet *flag.FlagSet, flags ...string) []string {
   247  	cmdFlags := []string{}
   248  	for _, flag := range flags {
   249  		flagSet.Bool(flag, true, "")
   250  		cmdFlags = append(cmdFlags, "--"+flag)
   251  	}
   252  	return cmdFlags
   253  }
   254  
   255  // Set string flags. Return a slice of their values.
   256  func setStringFlags(flagSet *flag.FlagSet, flags ...string) []string {
   257  	cmdFlags := []string{}
   258  	for _, flag := range flags {
   259  		flagSet.String(strings.Split(flag, "=")[0], "", "")
   260  		cmdFlags = append(cmdFlags, "--"+flag)
   261  	}
   262  	return cmdFlags
   263  }
   264  
   265  // Read yaml configuration from disk, check version and type.
   266  func checkCommonAndGetConfiguration(t *testing.T, projectType string, tempDirPath string) *viper.Viper {
   267  	config, err := utils.ReadConfigFile(filepath.Join(tempDirPath, "projects", projectType+".yaml"), utils.YAML)
   268  	assert.NoError(t, err)
   269  	assert.Equal(t, buildConfVersion, config.GetInt("version"))
   270  	assert.Equal(t, projectType, config.GetString("type"))
   271  	return config
   272  }