modify RemoveConfig to rm files & not dir. add tests for paths.go

This commit is contained in:
Sahilb315
2025-12-22 15:21:18 +05:30
parent a35baa7c75
commit bc1afebb49
3 changed files with 113 additions and 7 deletions
+12 -5
View File
@@ -123,15 +123,22 @@ func createConfig() (string, error) {
return cfgFile, nil
}
// RemoveConfig removes the PMG configuration directory and its contents.
// RemoveConfig removes the PMG config and RC file.
func RemoveConfig() error {
dir, err := ConfigDir()
configFilePath, err := ConfigFilePath()
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 {
return fmt.Errorf("failed to remove config directory %s: %w", dir, err)
rcFilePath, err := RcFilePath()
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
}
+77
View File
@@ -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
View File
@@ -17,7 +17,6 @@ import (
"github.com/safedep/pmg/extractor"
"github.com/safedep/pmg/internal/ui"
"github.com/safedep/pmg/packagemanager"
"google.golang.org/protobuf/proto"
)
type PackageManagerGuardInteraction struct {
@@ -75,7 +74,7 @@ func (c *PackageManagerGuardConfig) IsTrustedPackageVersion(result *packagev1.Pa
continue
}
if proto.Equal(result, purlPkgVersion.PackageVersion()) {
if isPackageVersionEqual(result, purlPkgVersion.PackageVersion()) {
return true
}
}
@@ -433,3 +432,26 @@ func (g *packageManagerGuard) handleManifestInstallation(ctx context.Context, pa
g.clearStatus()
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
}