Files
pmg/sandbox/registry_test.go
2026-01-09 15:00:24 +05:30

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)
})
}
}