tun_reload_linux_test.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //go:build !e2e_testing
  2. package overlay
  3. import (
  4. "net/netip"
  5. "testing"
  6. "github.com/slackhq/nebula/config"
  7. "github.com/slackhq/nebula/routing"
  8. "github.com/slackhq/nebula/test"
  9. "github.com/stretchr/testify/assert"
  10. "github.com/stretchr/testify/require"
  11. )
  12. // Only tun.mtu changes. The system calls fail without a real device, what matters is the routes nebula keeps
  13. func TestReloadMTUOnlyKeepsRoutes(t *testing.T) {
  14. routes := " unsafe_routes:\n - route: 192.168.100.0/24\n via: 10.1.0.1\n"
  15. c := config.NewC(test.NewLogger())
  16. require.NoError(t, c.LoadString("tun:\n mtu: 1300\n"+routes))
  17. tn := &tun{
  18. l: test.NewLogger(),
  19. vpnNetworks: []netip.Prefix{netip.MustParsePrefix("10.1.0.2/24")},
  20. ioctlFd: ^uintptr(0),
  21. routesFromSystem: map[netip.Prefix]routing.Gateways{},
  22. }
  23. require.NoError(t, tn.reload(c, true))
  24. require.NoError(t, c.ReloadConfigString("tun:\n mtu: 1400\n"+routes))
  25. _ = tn.reload(c, false)
  26. got := *tn.Routes.Load()
  27. require.Len(t, got, 1)
  28. assert.Equal(t, netip.MustParsePrefix("192.168.100.0/24"), got[0].Cidr)
  29. assert.Equal(t, 1400, got[0].MTU)
  30. assert.Equal(t, 1400, tn.DefaultMTU)
  31. }
  32. // The device mtu has to fit the largest route mtu, wherever it sits in the list
  33. func TestReloadMaxMTUIsTheLargestRoute(t *testing.T) {
  34. c := config.NewC(test.NewLogger())
  35. require.NoError(t, c.LoadString("tun:\n mtu: 1300\n unsafe_routes:\n"+
  36. " - route: 192.168.100.0/24\n via: 10.1.0.1\n mtu: 1500\n"+
  37. " - route: 192.168.101.0/24\n via: 10.1.0.1\n mtu: 1400\n"))
  38. tn := &tun{
  39. l: test.NewLogger(),
  40. vpnNetworks: []netip.Prefix{netip.MustParsePrefix("10.1.0.2/24")},
  41. ioctlFd: ^uintptr(0),
  42. routesFromSystem: map[netip.Prefix]routing.Gateways{},
  43. }
  44. require.NoError(t, tn.reload(c, true))
  45. assert.Equal(t, 1500, tn.MaxMTU)
  46. assert.Equal(t, 1300, tn.DefaultMTU)
  47. }