|
|
@@ -0,0 +1,56 @@
|
|
|
+//go:build !e2e_testing
|
|
|
+
|
|
|
+package overlay
|
|
|
+
|
|
|
+import (
|
|
|
+ "net/netip"
|
|
|
+ "testing"
|
|
|
+
|
|
|
+ "github.com/slackhq/nebula/config"
|
|
|
+ "github.com/slackhq/nebula/routing"
|
|
|
+ "github.com/slackhq/nebula/test"
|
|
|
+ "github.com/stretchr/testify/assert"
|
|
|
+ "github.com/stretchr/testify/require"
|
|
|
+)
|
|
|
+
|
|
|
+// Only tun.mtu changes. The system calls fail without a real device, what matters is the routes nebula keeps
|
|
|
+func TestReloadMTUOnlyKeepsRoutes(t *testing.T) {
|
|
|
+ routes := " unsafe_routes:\n - route: 192.168.100.0/24\n via: 10.1.0.1\n"
|
|
|
+ c := config.NewC(test.NewLogger())
|
|
|
+ require.NoError(t, c.LoadString("tun:\n mtu: 1300\n"+routes))
|
|
|
+
|
|
|
+ tn := &tun{
|
|
|
+ l: test.NewLogger(),
|
|
|
+ vpnNetworks: []netip.Prefix{netip.MustParsePrefix("10.1.0.2/24")},
|
|
|
+ ioctlFd: ^uintptr(0),
|
|
|
+ routesFromSystem: map[netip.Prefix]routing.Gateways{},
|
|
|
+ }
|
|
|
+ require.NoError(t, tn.reload(c, true))
|
|
|
+
|
|
|
+ require.NoError(t, c.ReloadConfigString("tun:\n mtu: 1400\n"+routes))
|
|
|
+ _ = tn.reload(c, false)
|
|
|
+
|
|
|
+ got := *tn.Routes.Load()
|
|
|
+ require.Len(t, got, 1)
|
|
|
+ assert.Equal(t, netip.MustParsePrefix("192.168.100.0/24"), got[0].Cidr)
|
|
|
+ assert.Equal(t, 1400, got[0].MTU)
|
|
|
+ assert.Equal(t, 1400, tn.DefaultMTU)
|
|
|
+}
|
|
|
+
|
|
|
+// The device mtu has to fit the largest route mtu, wherever it sits in the list
|
|
|
+func TestReloadMaxMTUIsTheLargestRoute(t *testing.T) {
|
|
|
+ c := config.NewC(test.NewLogger())
|
|
|
+ require.NoError(t, c.LoadString("tun:\n mtu: 1300\n unsafe_routes:\n"+
|
|
|
+ " - route: 192.168.100.0/24\n via: 10.1.0.1\n mtu: 1500\n"+
|
|
|
+ " - route: 192.168.101.0/24\n via: 10.1.0.1\n mtu: 1400\n"))
|
|
|
+
|
|
|
+ tn := &tun{
|
|
|
+ l: test.NewLogger(),
|
|
|
+ vpnNetworks: []netip.Prefix{netip.MustParsePrefix("10.1.0.2/24")},
|
|
|
+ ioctlFd: ^uintptr(0),
|
|
|
+ routesFromSystem: map[netip.Prefix]routing.Gateways{},
|
|
|
+ }
|
|
|
+ require.NoError(t, tn.reload(c, true))
|
|
|
+ assert.Equal(t, 1500, tn.MaxMTU)
|
|
|
+ assert.Equal(t, 1300, tn.DefaultMTU)
|
|
|
+}
|