mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
55 lines
1.7 KiB
Go
55 lines
1.7 KiB
Go
package fsutil
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/stretchr/testify/assert"
|
||
|
|
"github.com/stretchr/testify/require"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestPathWithinDir(t *testing.T) {
|
||
|
|
assert.True(t, PathWithinDir("/usr/local/lib/pmg/bin", "/usr/local/lib/pmg/bin"))
|
||
|
|
assert.True(t, PathWithinDir("/usr/local/lib/pmg/bin/npm", "/usr/local/lib/pmg/bin"))
|
||
|
|
assert.False(t, PathWithinDir("/usr/local/bin/npm", "/usr/local/lib/pmg/bin"))
|
||
|
|
assert.False(t, PathWithinDir("/usr/local/lib/pmg/bin-extra/npm", "/usr/local/lib/pmg/bin"))
|
||
|
|
assert.False(t, PathWithinDir("/usr/local/bin/npm", ""))
|
||
|
|
assert.False(t, PathWithinDir("", "/usr/local/bin"))
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestMkdirAllRootOwnedCreatesMissingChain(t *testing.T) {
|
||
|
|
root := t.TempDir()
|
||
|
|
target := filepath.Join(root, "a", "b", "c")
|
||
|
|
|
||
|
|
require.NoError(t, MkdirAllRootOwned(target, 0o755))
|
||
|
|
|
||
|
|
info, err := os.Stat(target)
|
||
|
|
require.NoError(t, err)
|
||
|
|
assert.True(t, info.IsDir())
|
||
|
|
|
||
|
|
require.NoError(t, MkdirAllRootOwned(target, 0o755), "idempotent on existing dir")
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestMkdirAllRootOwnedRejectsFileCollision(t *testing.T) {
|
||
|
|
root := t.TempDir()
|
||
|
|
blocker := filepath.Join(root, "blocker")
|
||
|
|
require.NoError(t, os.WriteFile(blocker, []byte("x"), 0o644))
|
||
|
|
|
||
|
|
assert.Error(t, MkdirAllRootOwned(blocker, 0o755))
|
||
|
|
assert.Error(t, MkdirAllRootOwned(filepath.Join(blocker, "sub"), 0o755))
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestMkdirAllRootOwnedLeavesExistingDirsAlone(t *testing.T) {
|
||
|
|
root := t.TempDir()
|
||
|
|
existing := filepath.Join(root, "existing")
|
||
|
|
require.NoError(t, os.Mkdir(existing, 0o700))
|
||
|
|
|
||
|
|
require.NoError(t, MkdirAllRootOwned(filepath.Join(existing, "created"), 0o755))
|
||
|
|
|
||
|
|
info, err := os.Stat(existing)
|
||
|
|
require.NoError(t, err)
|
||
|
|
assert.Equal(t, os.FileMode(0o700), info.Mode().Perm(),
|
||
|
|
"pre-existing directory permissions must not be changed")
|
||
|
|
}
|