mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
100 lines
2.3 KiB
Go
100 lines
2.3 KiB
Go
package sandbox
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/safedep/dry/utils"
|
||
|
|
"github.com/stretchr/testify/assert"
|
||
|
|
"github.com/stretchr/testify/require"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestValidateNetworkLockdown(t *testing.T) {
|
||
|
|
lockdownPolicy := &SandboxPolicy{
|
||
|
|
Name: "lockdown",
|
||
|
|
NetworkViaProxyOnly: utils.PtrTo(true),
|
||
|
|
}
|
||
|
|
|
||
|
|
tests := []struct {
|
||
|
|
name string
|
||
|
|
policy *SandboxPolicy
|
||
|
|
rt *ExecutionContext
|
||
|
|
wantPort string
|
||
|
|
wantErr string
|
||
|
|
}{
|
||
|
|
{
|
||
|
|
name: "lockdown off returns empty port and no error",
|
||
|
|
policy: &SandboxPolicy{Name: "plain"},
|
||
|
|
rt: nil,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "nil execution context",
|
||
|
|
policy: lockdownPolicy,
|
||
|
|
rt: nil,
|
||
|
|
wantErr: "requires the PMG proxy",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "empty proxy address",
|
||
|
|
policy: lockdownPolicy,
|
||
|
|
rt: &ExecutionContext{},
|
||
|
|
wantErr: "requires the PMG proxy",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "non-loopback proxy address",
|
||
|
|
policy: lockdownPolicy,
|
||
|
|
rt: &ExecutionContext{ProxyAddr: "192.168.1.5:9999"},
|
||
|
|
wantErr: "loopback",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "unparseable proxy address",
|
||
|
|
policy: lockdownPolicy,
|
||
|
|
rt: &ExecutionContext{ProxyAddr: "not-an-address"},
|
||
|
|
wantErr: "loopback",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "service-name proxy port",
|
||
|
|
policy: lockdownPolicy,
|
||
|
|
rt: &ExecutionContext{ProxyAddr: "127.0.0.1:http"},
|
||
|
|
wantErr: "non-numeric or out-of-range proxy port",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "zero proxy port",
|
||
|
|
policy: lockdownPolicy,
|
||
|
|
rt: &ExecutionContext{ProxyAddr: "127.0.0.1:0"},
|
||
|
|
wantErr: "non-numeric or out-of-range proxy port",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "out-of-range proxy port",
|
||
|
|
policy: lockdownPolicy,
|
||
|
|
rt: &ExecutionContext{ProxyAddr: "127.0.0.1:70000"},
|
||
|
|
wantErr: "non-numeric or out-of-range proxy port",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "loopback ipv4 proxy address",
|
||
|
|
policy: lockdownPolicy,
|
||
|
|
rt: &ExecutionContext{ProxyAddr: "127.0.0.1:54321"},
|
||
|
|
wantPort: "54321",
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "loopback ipv6 proxy address",
|
||
|
|
policy: lockdownPolicy,
|
||
|
|
rt: &ExecutionContext{ProxyAddr: "[::1]:54321"},
|
||
|
|
wantPort: "54321",
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, tt := range tests {
|
||
|
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
|
port, err := ValidateNetworkLockdown(tt.policy, tt.rt)
|
||
|
|
|
||
|
|
if tt.wantErr != "" {
|
||
|
|
require.Error(t, err)
|
||
|
|
assert.Contains(t, err.Error(), tt.wantErr)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
require.NoError(t, err)
|
||
|
|
assert.Equal(t, tt.wantPort, port)
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|