github.com/jfrog/jfrog-cli-core/v2@v2.51.0/utils/plugins/utils_test.go (about) 1 package plugins 2 3 import ( 4 "fmt" 5 biutils "github.com/jfrog/build-info-go/utils" 6 "github.com/jfrog/jfrog-cli-core/v2/utils/coreutils" 7 "github.com/jfrog/jfrog-client-go/utils/io/fileutils" 8 testsutils "github.com/jfrog/jfrog-client-go/utils/tests" 9 "github.com/stretchr/testify/assert" 10 "os" 11 "path/filepath" 12 "testing" 13 ) 14 15 const pluginName = "rt-fs" 16 17 func TestConvertPluginsV0ToV1(t *testing.T) { 18 if coreutils.IsWindows() { 19 return 20 } 21 // Setup testing env 22 cleanUpTempEnv := createTempEnvForPluginsTests(t) 23 defer cleanUpTempEnv() 24 testHomeDir := setupPluginsTestingEnv(t, "v0") 25 // Migration- v0 to v1 26 p, err := convertPluginsV0ToV1() 27 assert.NoError(t, err) 28 assert.Equal(t, p.Version, 1) 29 // Verity plugins.yaml exists 30 expectedYamlLocation := filepath.Join(testHomeDir, coreutils.JfrogPluginsDirName, coreutils.JfrogPluginsFileName) 31 exists, err := fileutils.IsFileExists(expectedYamlLocation, false) 32 assert.NoError(t, err) 33 assert.True(t, exists, fmt.Sprintf("expected file: %s doesn't exists", expectedYamlLocation)) 34 // Verify executable location according to v1 hierarchy 35 exists, err = fileutils.IsFileExists(filepath.Join(testHomeDir, coreutils.JfrogPluginsDirName, pluginName, coreutils.PluginsExecDirName, GetLocalPluginExecutableName(pluginName)), false) 36 assert.NoError(t, err) 37 assert.True(t, exists) 38 assert.NoError(t, os.RemoveAll(filepath.Join(testHomeDir, coreutils.JfrogPluginsDirName))) 39 } 40 41 // Plugins directory is empty - only 'plugins.yaml' should be created. 42 func TestConvertPluginsV0ToV1EmptyDir(t *testing.T) { 43 if coreutils.IsWindows() { 44 return 45 } 46 // Setup testing env 47 cleanUpTempEnv := createTempEnvForPluginsTests(t) 48 defer cleanUpTempEnv() 49 testHomeDir := setupPluginsTestingEnv(t, "empty") 50 // Migration- v0 to v1 51 p, err := convertPluginsV0ToV1() 52 assert.NoError(t, err) 53 assert.Equal(t, p.Version, 1) 54 // Verity plugins.yaml exists 55 expectedYamlLocation := filepath.Join(testHomeDir, coreutils.JfrogPluginsDirName, coreutils.JfrogPluginsFileName) 56 exists, err := fileutils.IsFileExists(expectedYamlLocation, false) 57 assert.NoError(t, err) 58 assert.True(t, exists, fmt.Sprintf("expected file: %s doesn't exists", expectedYamlLocation)) 59 assert.NoError(t, os.RemoveAll(filepath.Join(testHomeDir, coreutils.JfrogPluginsDirName))) 60 } 61 62 // Plugins directory contains unexpected file (non executable) 63 func TestConvertPluginsV0ToV1WithUnexpectedFiles(t *testing.T) { 64 if coreutils.IsWindows() { 65 return 66 } 67 // Setup testing env 68 cleanUpTempEnv := createTempEnvForPluginsTests(t) 69 defer cleanUpTempEnv() 70 testHomeDir := setupPluginsTestingEnv(t, "unexpectedFiles") 71 // Migration- v0 to v1 72 p, err := convertPluginsV0ToV1() 73 assert.NoError(t, err) 74 assert.Equal(t, p.Version, 1) 75 // Verity plugins.yaml exists 76 expectedYamlLocation := filepath.Join(testHomeDir, coreutils.JfrogPluginsDirName, coreutils.JfrogPluginsFileName) 77 exists, err := fileutils.IsFileExists(expectedYamlLocation, false) 78 assert.NoError(t, err) 79 assert.True(t, exists, fmt.Sprintf("expected file: %s doesn't exists", expectedYamlLocation)) 80 // Verify executable location according to v1 hierarchy 81 exists, err = fileutils.IsFileExists(filepath.Join(testHomeDir, coreutils.JfrogPluginsDirName, pluginName, coreutils.PluginsExecDirName, GetLocalPluginExecutableName(pluginName)), false) 82 assert.NoError(t, err) 83 assert.True(t, exists) 84 assert.NoError(t, os.RemoveAll(filepath.Join(testHomeDir, coreutils.JfrogPluginsDirName))) 85 } 86 87 func setupPluginsTestingEnv(t *testing.T, pluginsDirName string) string { 88 testHomeDir, err := coreutils.GetJfrogHomeDir() 89 assert.NoError(t, err) 90 wd, err := os.Getwd() 91 assert.NoError(t, err) 92 err = biutils.CopyDir(filepath.Join(wd, "testdata", coreutils.JfrogPluginsDirName, pluginsDirName), filepath.Join(testHomeDir, coreutils.JfrogPluginsDirName), true, nil) 93 assert.NoError(t, err) 94 err = coreutils.ChmodPluginsDirectoryContent() 95 assert.NoError(t, err) 96 return testHomeDir 97 } 98 99 // Set JFROG_CLI_HOME_DIR environment variable to be a new temp directory 100 func createTempEnvForPluginsTests(t *testing.T) (cleanUp func()) { 101 tmpDir, err := os.MkdirTemp("", "plugins_test") 102 assert.NoError(t, err) 103 oldHome := os.Getenv(coreutils.HomeDir) 104 testsutils.SetEnvAndAssert(t, coreutils.HomeDir, tmpDir) 105 return func() { 106 testsutils.RemoveAllAndAssert(t, tmpDir) 107 testsutils.SetEnvAndAssert(t, coreutils.HomeDir, oldHome) 108 } 109 }