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 }