package main import ( "context" "encoding/json" "isle/daemon/daecommon" "isle/toolkit" "strings" "testing" "github.com/stretchr/testify/require" ) func TestVPNFirewallList(t *testing.T) { t.Parallel() tests := []struct { name string outbound, inbound []string want map[string][]any }{ { name: "empty", want: map[string][]any{ "outbound": {}, "inbound": {}, }, }, { name: "single", outbound: []string{ `{"port":"any","proto":"icmp","host":"any"}`, }, want: map[string][]any{ "outbound": { map[string]any{ "index": 0, "port": "any", "proto": "icmp", "host": "any", }, }, "inbound": {}, }, }, { name: "multiple", outbound: []string{ `{"port":"any","proto":"icmp","host":"any"}`, }, inbound: []string{ `{"port":"any","proto":"icmp","host":"any"}`, `{"port":"22","proto":"tcp","host":"foo"}`, }, want: map[string][]any{ "outbound": { map[string]any{ "index": 0, "port": "any", "proto": "icmp", "host": "any", }, }, "inbound": { map[string]any{ "index": 0, "port": "any", "proto": "icmp", "host": "any", }, map[string]any{ "index": 1, "port": "22", "proto": "tcp", "host": "foo", }, }, }, }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { var ( h = newRunHarness(t) config daecommon.NetworkConfig outboundRawJSON = "[" + strings.Join(test.outbound, ",") + "]" inboundRawJSON = "[" + strings.Join(test.inbound, ",") + "]" ) require.NoError(t, json.Unmarshal( []byte(outboundRawJSON), &config.VPN.Firewall.Outbound, )) require.NoError(t, json.Unmarshal( []byte(inboundRawJSON), &config.VPN.Firewall.Inbound, )) h.daemonRPC. On("GetConfig", toolkit.MockArg[context.Context]()). Return(config, nil). Once() h.runAssertStdout(t, test.want, "vpn", "firewall", "list") }) } }