mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
feat: Add Sandbox Inspection and Debugging Commands (#261)
* feat: add sandbox DX commands * fix: Linter errors * fix: Sandbox deny log parsing * fix: Sandbox docs * refactor: Maintain SSOT across pkg dependencies * fix: Linter errors
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestSandboxProfileDir(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
envKey string
|
||||
envVal string
|
||||
expected func(t *testing.T) string
|
||||
}{
|
||||
{
|
||||
name: "default under user config dir",
|
||||
envKey: "PMG_CONFIG_DIR",
|
||||
envVal: "",
|
||||
expected: func(t *testing.T) string {
|
||||
userConfigDir, err := os.UserConfigDir()
|
||||
require.NoError(t, err)
|
||||
return filepath.Join(userConfigDir, pmgDefaultHomeRelativePath, pmgDefaultSandboxProfileDir)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "honors PMG_CONFIG_DIR override",
|
||||
envKey: "PMG_CONFIG_DIR",
|
||||
envVal: "/tmp/pmg-test/custom-config",
|
||||
expected: func(t *testing.T) string {
|
||||
return filepath.Join("/tmp/pmg-test/custom-config", pmgDefaultSandboxProfileDir)
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Setenv(tc.envKey, tc.envVal)
|
||||
initConfig()
|
||||
|
||||
assert.Equal(t, tc.expected(t), Get().SandboxProfileDir())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSandboxProfileDirRespectsXDGConfigHome(t *testing.T) {
|
||||
if runtime.GOOS != "linux" {
|
||||
t.Skip("XDG_CONFIG_HOME is only honored on Linux by os.UserConfigDir")
|
||||
}
|
||||
|
||||
tmp := t.TempDir()
|
||||
t.Setenv("PMG_CONFIG_DIR", "")
|
||||
t.Setenv("XDG_CONFIG_HOME", tmp)
|
||||
initConfig()
|
||||
|
||||
expected := filepath.Join(tmp, pmgDefaultHomeRelativePath, pmgDefaultSandboxProfileDir)
|
||||
assert.Equal(t, expected, Get().SandboxProfileDir())
|
||||
}
|
||||
|
||||
func TestSandboxViolationCacheDir(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
envKey string
|
||||
envVal string
|
||||
expected func(t *testing.T) string
|
||||
}{
|
||||
{
|
||||
name: "default under user cache dir",
|
||||
envKey: "PMG_CACHE_DIR",
|
||||
envVal: "",
|
||||
expected: func(t *testing.T) string {
|
||||
base, err := userCacheBase()
|
||||
require.NoError(t, err)
|
||||
return filepath.Join(base, pmgDefaultHomeRelativePath, pmgDefaultSandboxViolationCacheDir)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "honors PMG_CACHE_DIR override",
|
||||
envKey: "PMG_CACHE_DIR",
|
||||
envVal: "/tmp/pmg-test/custom-cache",
|
||||
expected: func(t *testing.T) string {
|
||||
return filepath.Join("/tmp/pmg-test/custom-cache", pmgDefaultSandboxViolationCacheDir)
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Setenv("PMG_CONFIG_DIR", "")
|
||||
t.Setenv(tc.envKey, tc.envVal)
|
||||
initConfig()
|
||||
|
||||
assert.Equal(t, tc.expected(t), Get().SandboxViolationCacheDir())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSandboxViolationCacheDirRespectsXDGCacheHome(t *testing.T) {
|
||||
if runtime.GOOS != "linux" {
|
||||
t.Skip("XDG_CACHE_HOME is only honored on Linux by os.UserCacheDir")
|
||||
}
|
||||
|
||||
tmp := t.TempDir()
|
||||
t.Setenv("PMG_CACHE_DIR", "")
|
||||
t.Setenv("XDG_CACHE_HOME", tmp)
|
||||
initConfig()
|
||||
|
||||
expected := filepath.Join(tmp, pmgDefaultHomeRelativePath, pmgDefaultSandboxViolationCacheDir)
|
||||
assert.Equal(t, expected, Get().SandboxViolationCacheDir())
|
||||
}
|
||||
|
||||
// userCacheBase returns the platform's user cache root the same way cacheDir()
|
||||
// in config.go resolves it (sans the PMG_CACHE_DIR override).
|
||||
func userCacheBase() (string, error) {
|
||||
switch runtime.GOOS {
|
||||
case "windows":
|
||||
base := os.Getenv("LOCALAPPDATA")
|
||||
if base == "" {
|
||||
base = os.Getenv("USERPROFILE")
|
||||
}
|
||||
return base, nil
|
||||
default:
|
||||
return os.UserCacheDir()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user