1
0

netchange_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package udp
  2. import (
  3. "context"
  4. "testing"
  5. "github.com/slackhq/nebula/config"
  6. "github.com/slackhq/nebula/test"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/stretchr/testify/require"
  9. )
  10. func newMonitor(t *testing.T, ctx context.Context, cfg string) *NetworkChangeMonitor {
  11. t.Helper()
  12. l := test.NewLogger()
  13. c := config.NewC(l)
  14. require.NoError(t, c.LoadString(cfg))
  15. return NewNetworkChangeMonitor(ctx, l, c)
  16. }
  17. func TestNetworkChangeMonitorDefaultsOn(t *testing.T) {
  18. // Says nothing about rebinding, so this covers the default.
  19. m := newMonitor(t, context.Background(), "listen:\n host: 0.0.0.0\n")
  20. assert.True(t, m.enabled, "should default to on")
  21. }
  22. func TestNetworkChangeMonitorDisabledIsANoOp(t *testing.T) {
  23. m := newMonitor(t, context.Background(), "listen:\n rebind_on_network_change: false\n")
  24. require.False(t, m.enabled)
  25. // Must return without opening a socket. If it watched anything this would block.
  26. m.Start(func() {})
  27. }
  28. func TestNetworkChangeMonitorNilRebindIsANoOp(t *testing.T) {
  29. // Nothing to rebind, so there is no point watching, on any platform.
  30. m := newMonitor(t, context.Background(), "listen:\n rebind_on_network_change: true\n")
  31. m.Start(nil)
  32. }
  33. // The monitor only reads listen.rebind_on_network_change when it is made
  34. func TestNetworkChangeMonitorRestartKey(t *testing.T) {
  35. l := test.NewLogger()
  36. c := config.NewC(l)
  37. require.NoError(t, c.LoadString("listen:\n rebind_on_network_change: true\n"))
  38. NewNetworkChangeMonitor(context.Background(), l, c)
  39. res := c.ReloadConfigString("listen:\n rebind_on_network_change: false\n")
  40. require.NoError(t, res.Err)
  41. if watchesNetworkChanges {
  42. assert.Equal(t, []string{"listen.rebind_on_network_change"}, res.RestartKeys)
  43. } else {
  44. assert.Empty(t, res.RestartKeys, "the setting does nothing here")
  45. }
  46. }