github.com/osievert/jfrog-cli-core@v1.2.7/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  	err := CreateBuildConfig(context, utils.Maven)
   103  	assert.NoError(t, err)
   104  
   105  	// Check configuration
   106  	config := checkCommonAndGetConfiguration(t, utils.Maven.String(), tempDirPath)
   107  	assert.Equal(t, "relServer", config.GetString("resolver.serverId"))
   108  	assert.Equal(t, "snapshot-repo", config.GetString("resolver.snapshotRepo"))
   109  	assert.Equal(t, "release-repo", config.GetString("resolver.releaseRepo"))
   110  	assert.Equal(t, "depServer", config.GetString("deployer.serverId"))
   111  	assert.Equal(t, "snapshot-repo-local", config.GetString("deployer.snapshotRepo"))
   112  	assert.Equal(t, "release-repo-local", config.GetString("deployer.releaseRepo"))
   113  }
   114  
   115  func TestGradleConfigFile(t *testing.T) {
   116  	// Set JFROG_CLI_HOME_DIR environment variable
   117  	tempDirPath := createTempEnv(t)
   118  	defer os.RemoveAll(tempDirPath)
   119  
   120  	// Create build config
   121  	context := createContext(ResolutionServerId+"=relServer", ResolutionRepo+"=repo", DeploymentServerId+"=depServer", DeploymentRepo+"=repo-local",
   122  		IvyDescPattern+"=[ivy]/[pattern]", IvyArtifactsPattern+"=[artifact]/[pattern]")
   123  	err := CreateBuildConfig(context, utils.Gradle)
   124  	assert.NoError(t, err)
   125  
   126  	// Check configuration
   127  	config := checkCommonAndGetConfiguration(t, utils.Gradle.String(), tempDirPath)
   128  	assert.Equal(t, "relServer", config.GetString("resolver.serverId"))
   129  	assert.Equal(t, "repo", config.GetString("resolver.repo"))
   130  	assert.Equal(t, "depServer", config.GetString("deployer.serverId"))
   131  	assert.Equal(t, "repo-local", config.GetString("deployer.repo"))
   132  	assert.Equal(t, true, config.GetBool("deployer.deployMavenDescriptors"))
   133  	assert.Equal(t, true, config.GetBool("deployer.deployIvyDescriptors"))
   134  	assert.Equal(t, "[ivy]/[pattern]", config.GetString("deployer.ivyPattern"))
   135  	assert.Equal(t, "[artifact]/[pattern]", config.GetString("deployer.artifactPattern"))
   136  	assert.Equal(t, true, config.GetBool("usePlugin"))
   137  	assert.Equal(t, true, config.GetBool("useWrapper"))
   138  }
   139  
   140  func TestGradleConfigFileDefaultPatterns(t *testing.T) {
   141  	// Set JFROG_CLI_HOME_DIR environment variable
   142  	tempDirPath := createTempEnv(t)
   143  	defer os.RemoveAll(tempDirPath)
   144  
   145  	// Create build config
   146  	context := createContext(ResolutionServerId+"=relServer", ResolutionRepo+"=repo", DeploymentServerId+"=depServer", DeploymentRepo+"=repo-local")
   147  	err := CreateBuildConfig(context, utils.Gradle)
   148  	assert.NoError(t, err)
   149  
   150  	// Check configuration
   151  	config := checkCommonAndGetConfiguration(t, utils.Gradle.String(), tempDirPath)
   152  	assert.Equal(t, "relServer", config.GetString("resolver.serverId"))
   153  	assert.Equal(t, "repo", config.GetString("resolver.repo"))
   154  	assert.Equal(t, "depServer", config.GetString("deployer.serverId"))
   155  	assert.Equal(t, "repo-local", config.GetString("deployer.repo"))
   156  	assert.Equal(t, true, config.GetBool("deployer.deployMavenDescriptors"))
   157  	assert.Equal(t, true, config.GetBool("deployer.deployIvyDescriptors"))
   158  	assert.Equal(t, "[organization]/[module]/ivy-[revision].xml", config.GetString("deployer.ivyPattern"))
   159  	assert.Equal(t, "[organization]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]", config.GetString("deployer.artifactPattern"))
   160  	assert.Equal(t, true, config.GetBool("usePlugin"))
   161  	assert.Equal(t, true, config.GetBool("useWrapper"))
   162  }
   163  
   164  func TestValidateConfigResolver(t *testing.T) {
   165  	// Create and check empty config
   166  	configFile := NewConfigFile(utils.Go, createContext())
   167  	err := configFile.validateConfig()
   168  	assert.NoError(t, err)
   169  
   170  	// Check scenarios of serverId and repo
   171  	configFile.Resolver.ServerId = "serverId"
   172  	err = configFile.validateConfig()
   173  	assert.EqualError(t, err, "Resolution repository/ies must be set.")
   174  	configFile.Resolver.Repo = "repo"
   175  	err = configFile.validateConfig()
   176  	assert.NoError(t, err)
   177  	configFile.Resolver.ServerId = ""
   178  	err = configFile.validateConfig()
   179  	assert.EqualError(t, err, "Resolver server ID must be set.")
   180  
   181  	// Check scenarios of serverId and release/snapshot repositories
   182  	configFile.Resolver.ServerId = "serverId"
   183  	configFile.Resolver.SnapshotRepo = "snapshotRepo"
   184  	err = configFile.validateConfig()
   185  	assert.EqualError(t, err, "Resolution snapshot and release repositories must be set.")
   186  	configFile.Resolver.ReleaseRepo = "releaseRepo"
   187  	err = configFile.validateConfig()
   188  	assert.NoError(t, err)
   189  	configFile.Resolver.ServerId = ""
   190  	err = configFile.validateConfig()
   191  	assert.EqualError(t, err, "Resolver server ID must be set.")
   192  }
   193  
   194  func TestValidateConfigDeployer(t *testing.T) {
   195  	// Create and check empty config
   196  	configFile := NewConfigFile(utils.Go, createContext())
   197  	err := configFile.validateConfig()
   198  	assert.NoError(t, err)
   199  
   200  	// Check scenarios of serverId and repo
   201  	configFile.Deployer.ServerId = "serverId"
   202  	err = configFile.validateConfig()
   203  	assert.EqualError(t, err, "Deployment repository/ies must be set.")
   204  	configFile.Deployer.Repo = "repo"
   205  	err = configFile.validateConfig()
   206  	assert.NoError(t, err)
   207  	configFile.Deployer.ServerId = ""
   208  	err = configFile.validateConfig()
   209  	assert.EqualError(t, err, "Deployer server ID must be set.")
   210  
   211  	// Check scenarios of serverId and release/snapshot repositories
   212  	configFile.Deployer.ServerId = "serverId"
   213  	configFile.Deployer.ReleaseRepo = "releaseRepo"
   214  	err = configFile.validateConfig()
   215  	assert.EqualError(t, err, "Deployment snapshot and release repositories must be set.")
   216  	configFile.Deployer.SnapshotRepo = "snapshotRepo"
   217  	err = configFile.validateConfig()
   218  	assert.NoError(t, err)
   219  	configFile.Deployer.ServerId = ""
   220  	err = configFile.validateConfig()
   221  	assert.EqualError(t, err, "Deployer server ID must be set.")
   222  }
   223  
   224  // Set JFROG_CLI_HOME_DIR environment variable to be a new temp directory
   225  func createTempEnv(t *testing.T) string {
   226  	tmpDir, err := fileutils.CreateTempDir()
   227  	assert.NoError(t, err)
   228  	err = os.Setenv(coreutils.HomeDir, tmpDir)
   229  	assert.NoError(t, err)
   230  	return tmpDir
   231  }
   232  
   233  // Create new Codegangsta context with all required flags.
   234  func createContext(stringFlags ...string) *cli.Context {
   235  	flagSet := flag.NewFlagSet("TestFlagSet", flag.ContinueOnError)
   236  	flags := setBoolFlags(flagSet, Global, UsesPlugin, UseWrapper, DeployMavenDesc, DeployIvyDesc, NugetV2)
   237  	flags = append(flags, setStringFlags(flagSet, stringFlags...)...)
   238  	flagSet.Parse(flags)
   239  	return cli.NewContext(nil, flagSet, nil)
   240  }
   241  
   242  // Set boolean flags and initialize them to true. Return a slice of them.
   243  func setBoolFlags(flagSet *flag.FlagSet, flags ...string) []string {
   244  	cmdFlags := []string{}
   245  	for _, flag := range flags {
   246  		flagSet.Bool(flag, true, "")
   247  		cmdFlags = append(cmdFlags, "--"+flag)
   248  	}
   249  	return cmdFlags
   250  }
   251  
   252  // Set string flags. Return a slice of their values.
   253  func setStringFlags(flagSet *flag.FlagSet, flags ...string) []string {
   254  	cmdFlags := []string{}
   255  	for _, flag := range flags {
   256  		flagSet.String(strings.Split(flag, "=")[0], "", "")
   257  		cmdFlags = append(cmdFlags, "--"+flag)
   258  	}
   259  	return cmdFlags
   260  }
   261  
   262  // Read yaml configuration from disk, check version and type.
   263  func checkCommonAndGetConfiguration(t *testing.T, projectType string, tempDirPath string) *viper.Viper {
   264  	config, err := utils.ReadConfigFile(filepath.Join(tempDirPath, "projects", projectType+".yaml"), utils.YAML)
   265  	assert.NoError(t, err)
   266  	assert.Equal(t, BUILD_CONF_VERSION, config.GetInt("version"))
   267  	assert.Equal(t, projectType, config.GetString("type"))
   268  	return config
   269  }