mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-21 09:46:40 +00:00
163 lines
5.4 KiB
Go
163 lines
5.4 KiB
Go
package cmd
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/netbirdio/netbird/client/internal"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestSetCommand_AllSettings(t *testing.T) {
|
|
tempFile, err := os.CreateTemp("", "config.json")
|
|
require.NoError(t, err)
|
|
defer os.Remove(tempFile.Name())
|
|
|
|
// Write empty JSON object to the config file to avoid JSON parse errors
|
|
_, err = tempFile.WriteString("{}")
|
|
require.NoError(t, err)
|
|
tempFile.Close()
|
|
|
|
configPath = tempFile.Name()
|
|
|
|
tests := []struct {
|
|
setting string
|
|
value string
|
|
verify func(*testing.T, *internal.Config)
|
|
wantErr bool
|
|
}{
|
|
{"management-url", "https://test.mgmt:443", func(t *testing.T, c *internal.Config) {
|
|
require.Equal(t, "https://test.mgmt:443", c.ManagementURL.String())
|
|
}, false},
|
|
{"admin-url", "https://test.admin:443", func(t *testing.T, c *internal.Config) {
|
|
require.Equal(t, "https://test.admin:443", c.AdminURL.String())
|
|
}, false},
|
|
{"interface-name", "utun99", func(t *testing.T, c *internal.Config) {
|
|
require.Equal(t, "utun99", c.WgIface)
|
|
}, false},
|
|
{"external-ip-map", "12.34.56.78,12.34.56.79", func(t *testing.T, c *internal.Config) {
|
|
require.Equal(t, []string{"12.34.56.78", "12.34.56.79"}, c.NATExternalIPs)
|
|
}, false},
|
|
{"extra-iface-blacklist", "eth1,eth2", func(t *testing.T, c *internal.Config) {
|
|
require.Contains(t, c.IFaceBlackList, "eth1")
|
|
require.Contains(t, c.IFaceBlackList, "eth2")
|
|
}, false},
|
|
{"dns-resolver-address", "127.0.0.1:5053", func(t *testing.T, c *internal.Config) {
|
|
require.Equal(t, "127.0.0.1:5053", c.CustomDNSAddress)
|
|
}, false},
|
|
{"extra-dns-labels", "vpc1,mgmt1", func(t *testing.T, c *internal.Config) {
|
|
require.True(t, strings.Contains(c.DNSLabels.SafeString(), "vpc1"))
|
|
require.True(t, strings.Contains(c.DNSLabels.SafeString(), "mgmt1"))
|
|
}, false},
|
|
{"preshared-key", "testkey", func(t *testing.T, c *internal.Config) {
|
|
require.Equal(t, "testkey", c.PreSharedKey)
|
|
}, false},
|
|
{"enable-rosenpass", "true", func(t *testing.T, c *internal.Config) {
|
|
require.True(t, c.RosenpassEnabled)
|
|
}, false},
|
|
{"rosenpass-permissive", "false", func(t *testing.T, c *internal.Config) {
|
|
require.False(t, c.RosenpassPermissive)
|
|
}, false},
|
|
{"allow-server-ssh", "true", func(t *testing.T, c *internal.Config) {
|
|
require.NotNil(t, c.ServerSSHAllowed)
|
|
require.True(t, *c.ServerSSHAllowed)
|
|
}, false},
|
|
{"network-monitor", "false", func(t *testing.T, c *internal.Config) {
|
|
require.NotNil(t, c.NetworkMonitor)
|
|
require.False(t, *c.NetworkMonitor)
|
|
}, false},
|
|
{"disable-auto-connect", "true", func(t *testing.T, c *internal.Config) {
|
|
require.True(t, c.DisableAutoConnect)
|
|
}, false},
|
|
{"disable-client-routes", "false", func(t *testing.T, c *internal.Config) {
|
|
require.False(t, c.DisableClientRoutes)
|
|
}, false},
|
|
{"disable-server-routes", "true", func(t *testing.T, c *internal.Config) {
|
|
require.True(t, c.DisableServerRoutes)
|
|
}, false},
|
|
{"disable-dns", "false", func(t *testing.T, c *internal.Config) {
|
|
require.False(t, c.DisableDNS)
|
|
}, false},
|
|
{"disable-firewall", "true", func(t *testing.T, c *internal.Config) {
|
|
require.True(t, c.DisableFirewall)
|
|
}, false},
|
|
{"block-lan-access", "true", func(t *testing.T, c *internal.Config) {
|
|
require.True(t, c.BlockLANAccess)
|
|
}, false},
|
|
{"block-inbound", "false", func(t *testing.T, c *internal.Config) {
|
|
require.False(t, c.BlockInbound)
|
|
}, false},
|
|
{"enable-lazy-connection", "true", func(t *testing.T, c *internal.Config) {
|
|
require.True(t, c.LazyConnectionEnabled)
|
|
}, false},
|
|
{"wireguard-port", "51820", func(t *testing.T, c *internal.Config) {
|
|
require.Equal(t, 51820, c.WgPort)
|
|
}, false},
|
|
{"dns-router-interval", "2m", func(t *testing.T, c *internal.Config) {
|
|
require.Equal(t, 2*time.Minute, c.DNSRouteInterval)
|
|
}, false},
|
|
// Invalid cases
|
|
{"enable-rosenpass", "notabool", nil, true},
|
|
{"wireguard-port", "notanint", nil, true},
|
|
{"dns-router-interval", "notaduration", nil, true},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.setting+"="+tt.value, func(t *testing.T) {
|
|
args := []string{tt.setting, tt.value}
|
|
err := setFunc(nil, args)
|
|
if tt.wantErr {
|
|
require.Error(t, err)
|
|
return
|
|
}
|
|
require.NoError(t, err)
|
|
config, err := internal.ReadConfig(configPath)
|
|
require.NoError(t, err)
|
|
if tt.verify != nil {
|
|
tt.verify(t, config)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestSetCommand_EnvVars(t *testing.T) {
|
|
tempFile, err := os.CreateTemp("", "config.json")
|
|
require.NoError(t, err)
|
|
defer os.Remove(tempFile.Name())
|
|
|
|
// Write empty JSON object to the config file to avoid JSON parse errors
|
|
_, err = tempFile.WriteString("{}")
|
|
require.NoError(t, err)
|
|
tempFile.Close()
|
|
|
|
configPath = tempFile.Name()
|
|
|
|
os.Setenv("NB_INTERFACE_NAME", "utun77")
|
|
defer os.Unsetenv("NB_INTERFACE_NAME")
|
|
args := []string{"interface-name", "utun99"}
|
|
err = setFunc(nil, args)
|
|
require.NoError(t, err)
|
|
config, err := internal.ReadConfig(configPath)
|
|
require.NoError(t, err)
|
|
require.Equal(t, "utun77", config.WgIface)
|
|
|
|
os.Unsetenv("NB_INTERFACE_NAME")
|
|
os.Setenv("WT_INTERFACE_NAME", "utun88")
|
|
defer os.Unsetenv("WT_INTERFACE_NAME")
|
|
err = setFunc(nil, args)
|
|
require.NoError(t, err)
|
|
config, err = internal.ReadConfig(configPath)
|
|
require.NoError(t, err)
|
|
require.Equal(t, "utun88", config.WgIface)
|
|
|
|
os.Unsetenv("WT_INTERFACE_NAME")
|
|
// No env var, should use CLI value
|
|
err = setFunc(nil, args)
|
|
require.NoError(t, err)
|
|
config, err = internal.ReadConfig(configPath)
|
|
require.NoError(t, err)
|
|
require.Equal(t, "utun99", config.WgIface)
|
|
}
|