mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
93 lines
2.4 KiB
Go
93 lines
2.4 KiB
Go
package sandbox
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"go.yaml.in/yaml/v3"
|
|
)
|
|
|
|
func TestNewDefaultProfileRegistry(t *testing.T) {
|
|
registry, err := newDefaultProfileRegistry()
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, registry)
|
|
|
|
assert.Greater(t, len(registry.profiles), 0)
|
|
|
|
npmRestrictive, err := registry.GetProfile("npm-restrictive")
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, npmRestrictive)
|
|
|
|
pypiRestrictive, err := registry.GetProfile("pypi-restrictive")
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, pypiRestrictive)
|
|
}
|
|
|
|
func TestLoadCustomProfile(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
policy *SandboxPolicy
|
|
assert func(t *testing.T, policy *SandboxPolicy, err error)
|
|
}{
|
|
{
|
|
name: "valid policy",
|
|
policy: &SandboxPolicy{
|
|
Name: "test",
|
|
Description: "test",
|
|
PackageManagers: []string{"npm"},
|
|
// At least some rules are required for a policy to be valid
|
|
Filesystem: FilesystemPolicy{
|
|
AllowRead: []string{"/tmp"},
|
|
AllowWrite: []string{"/tmp"},
|
|
DenyRead: []string{"/private/var"},
|
|
DenyWrite: []string{"/private/var"},
|
|
},
|
|
},
|
|
assert: func(t *testing.T, policy *SandboxPolicy, err error) {
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, policy)
|
|
assert.Equal(t, "test", policy.Name)
|
|
assert.Equal(t, "test", policy.Description)
|
|
assert.Equal(t, []string{"npm"}, policy.PackageManagers)
|
|
assert.Equal(t, FilesystemPolicy{
|
|
AllowRead: []string{"/tmp"},
|
|
AllowWrite: []string{"/tmp"},
|
|
DenyRead: []string{"/private/var"},
|
|
DenyWrite: []string{"/private/var"},
|
|
}, policy.Filesystem)
|
|
},
|
|
},
|
|
{
|
|
name: "invalid policy without any rules",
|
|
policy: &SandboxPolicy{
|
|
Name: "test",
|
|
Description: "test",
|
|
PackageManagers: []string{"npm"},
|
|
},
|
|
assert: func(t *testing.T, policy *SandboxPolicy, err error) {
|
|
assert.Error(t, err)
|
|
assert.Nil(t, policy)
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, c := range cases {
|
|
t.Run(c.name, func(t *testing.T) {
|
|
registry, err := newDefaultProfileRegistry()
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, registry)
|
|
|
|
tempFile, err := os.CreateTemp(t.TempDir(), "sandbox-policy-*.yml")
|
|
assert.NoError(t, err)
|
|
defer tempFile.Close()
|
|
|
|
err = yaml.NewEncoder(tempFile).Encode(c.policy)
|
|
assert.NoError(t, err)
|
|
|
|
policy, err := registry.LoadCustomProfile(tempFile.Name())
|
|
c.assert(t, policy, err)
|
|
})
|
|
}
|
|
}
|