Files
pmg/config/rootdir_test.go
T

81 lines
1.8 KiB
Go
Raw Normal View History

package config
import (
"os/user"
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func withEuid(t *testing.T, euid int) {
t.Helper()
orig := configGeteuid
configGeteuid = func() int { return euid }
t.Cleanup(func() { configGeteuid = orig })
}
func poisonUserEnv(t *testing.T) {
t.Helper()
t.Setenv("PMG_CONFIG_DIR", "")
t.Setenv("PMG_CACHE_DIR", "")
t.Setenv("HOME", "/home/victim")
t.Setenv("XDG_CONFIG_HOME", "/home/victim/.config")
t.Setenv("XDG_CACHE_HOME", "/home/victim/.cache")
}
func TestConfigDirAsRootIgnoresPreservedHome(t *testing.T) {
poisonUserEnv(t)
withEuid(t, 0)
dir, err := configDir()
require.NoError(t, err)
rootUser, err := user.LookupId("0")
require.NoError(t, err)
assert.True(t, strings.HasPrefix(dir, rootUser.HomeDir), "expected %s under root home %s", dir, rootUser.HomeDir)
assert.NotContains(t, dir, "/home/victim")
}
func TestConfigDirAsNonRootUsesEnvHome(t *testing.T) {
poisonUserEnv(t)
withEuid(t, 1000)
dir, err := configDir()
require.NoError(t, err)
assert.Contains(t, dir, "/home/victim")
}
func TestConfigDirEnvOverrideWinsForRoot(t *testing.T) {
poisonUserEnv(t)
t.Setenv("PMG_CONFIG_DIR", "/custom/pmg")
withEuid(t, 0)
dir, err := configDir()
require.NoError(t, err)
assert.Equal(t, "/custom/pmg", dir)
}
func TestCacheDirAsRootIgnoresPreservedHome(t *testing.T) {
poisonUserEnv(t)
withEuid(t, 0)
dir, err := cacheDir()
require.NoError(t, err)
rootUser, err := user.LookupId("0")
require.NoError(t, err)
assert.True(t, strings.HasPrefix(dir, rootUser.HomeDir), "expected %s under root home %s", dir, rootUser.HomeDir)
assert.NotContains(t, dir, "/home/victim")
}
func TestCacheDirAsNonRootUsesEnvHome(t *testing.T) {
poisonUserEnv(t)
withEuid(t, 1000)
dir, err := cacheDir()
require.NoError(t, err)
assert.Contains(t, dir, "/home/victim")
}