mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
modify RemoveConfig to rm files & not dir. add tests for paths.go
This commit is contained in:
+12
-5
@@ -123,15 +123,22 @@ func createConfig() (string, error) {
|
|||||||
return cfgFile, nil
|
return cfgFile, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveConfig removes the PMG configuration directory and its contents.
|
// RemoveConfig removes the PMG config and RC file.
|
||||||
func RemoveConfig() error {
|
func RemoveConfig() error {
|
||||||
dir, err := ConfigDir()
|
configFilePath, err := ConfigFilePath()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("failed to get config file path: %w", err)
|
||||||
|
}
|
||||||
|
if err := os.Remove(configFilePath); err != nil {
|
||||||
|
return fmt.Errorf("failed to remove config file %s: %w", configFilePath, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.RemoveAll(dir); err != nil {
|
rcFilePath, err := RcFilePath()
|
||||||
return fmt.Errorf("failed to remove config directory %s: %w", dir, err)
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to get rc file path: %w", err)
|
||||||
|
}
|
||||||
|
if err := os.Remove(rcFilePath); err != nil {
|
||||||
|
return fmt.Errorf("failed to remove rc file %s: %w", rcFilePath, err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestConfigPaths_WithEnv(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
temp := t.TempDir()
|
||||||
|
t.Setenv(PMG_CONFIG_DIR_ENV, temp)
|
||||||
|
|
||||||
|
dir, err := ConfigDir()
|
||||||
|
assert.NoError(err)
|
||||||
|
|
||||||
|
expected := filepath.Join(temp, pmgConfigPath)
|
||||||
|
assert.Equal(expected, dir)
|
||||||
|
|
||||||
|
cfgPath, err := ConfigFilePath()
|
||||||
|
assert.NoError(err)
|
||||||
|
|
||||||
|
expectedCfg := filepath.Join(expected, pmgConfigName+"."+pmgConfigType)
|
||||||
|
assert.Equal(expectedCfg, cfgPath)
|
||||||
|
|
||||||
|
rcPath, err := RcFilePath()
|
||||||
|
assert.NoError(err)
|
||||||
|
|
||||||
|
expectedRc := filepath.Join(expected, RcFileName())
|
||||||
|
assert.Equal(expectedRc, rcPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestConfigPaths_DefaultUserConfigDir(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
// Ensure env is cleared for the test
|
||||||
|
os.Unsetenv(PMG_CONFIG_DIR_ENV)
|
||||||
|
|
||||||
|
userCfgDir, err := os.UserConfigDir()
|
||||||
|
assert.NoError(err)
|
||||||
|
|
||||||
|
dir, err := ConfigDir()
|
||||||
|
assert.NoError(err)
|
||||||
|
|
||||||
|
expected := filepath.Join(userCfgDir, pmgConfigPath)
|
||||||
|
assert.Equal(expected, dir)
|
||||||
|
|
||||||
|
rcPath, err := RcFilePath()
|
||||||
|
assert.NoError(err)
|
||||||
|
|
||||||
|
expectedRc := filepath.Join(expected, RcFileName())
|
||||||
|
assert.Equal(expectedRc, rcPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test that createConfigDir actually creates the directory returned by ConfigDir.
|
||||||
|
func TestCreateConfigDir_CreatesDirectory(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
// Use a temp dir as base for PMG_CONFIG_DIR so we don't touch user files.
|
||||||
|
temp := t.TempDir()
|
||||||
|
t.Setenv(PMG_CONFIG_DIR_ENV, temp)
|
||||||
|
|
||||||
|
created, err := createConfigDir()
|
||||||
|
assert.NoError(err)
|
||||||
|
|
||||||
|
info, err := os.Stat(created)
|
||||||
|
assert.NoError(err)
|
||||||
|
assert.True(info.IsDir(), "expected created path to be a directory")
|
||||||
|
|
||||||
|
// Also ensure the returned path matches ConfigDir() result
|
||||||
|
dir, err := ConfigDir()
|
||||||
|
assert.NoError(err)
|
||||||
|
assert.Equal(created, dir)
|
||||||
|
}
|
||||||
+24
-2
@@ -17,7 +17,6 @@ import (
|
|||||||
"github.com/safedep/pmg/extractor"
|
"github.com/safedep/pmg/extractor"
|
||||||
"github.com/safedep/pmg/internal/ui"
|
"github.com/safedep/pmg/internal/ui"
|
||||||
"github.com/safedep/pmg/packagemanager"
|
"github.com/safedep/pmg/packagemanager"
|
||||||
"google.golang.org/protobuf/proto"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type PackageManagerGuardInteraction struct {
|
type PackageManagerGuardInteraction struct {
|
||||||
@@ -75,7 +74,7 @@ func (c *PackageManagerGuardConfig) IsTrustedPackageVersion(result *packagev1.Pa
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if proto.Equal(result, purlPkgVersion.PackageVersion()) {
|
if isPackageVersionEqual(result, purlPkgVersion.PackageVersion()) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -433,3 +432,26 @@ func (g *packageManagerGuard) handleManifestInstallation(ctx context.Context, pa
|
|||||||
g.clearStatus()
|
g.clearStatus()
|
||||||
return g.continueExecution(ctx, parsedCommand)
|
return g.continueExecution(ctx, parsedCommand)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isPackageVersionEqual(result, purlPkgVersion *packagev1.PackageVersion) bool {
|
||||||
|
if result == nil || purlPkgVersion == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if result.GetVersion() != purlPkgVersion.GetVersion() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if result.GetPackage() == nil || purlPkgVersion.GetPackage() == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if result.GetPackage().GetName() != purlPkgVersion.GetPackage().GetName() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if result.GetPackage().GetEcosystem() != purlPkgVersion.GetPackage().GetEcosystem() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user