github.com/jfrog/jfrog-cli-core/v2@v2.52.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  }