1
0

interface_emit_test.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. //go:build linux || darwin
  2. package nebula
  3. import (
  4. "net/netip"
  5. "testing"
  6. "time"
  7. "github.com/rcrowley/go-metrics"
  8. "github.com/slackhq/nebula/cert"
  9. "github.com/slackhq/nebula/firewall"
  10. "github.com/slackhq/nebula/overlay/overlaytest"
  11. "github.com/slackhq/nebula/test"
  12. "github.com/slackhq/nebula/udp"
  13. "github.com/stretchr/testify/assert"
  14. "github.com/stretchr/testify/require"
  15. )
  16. // Priming before the first tick (issue #907) is Start's job, see TestStatsServer_Start_primes.
  17. func Test_statsEmitter_setsGauges(t *testing.T) {
  18. defer metrics.DefaultRegistry.UnregisterAll()
  19. l := test.NewLogger()
  20. hostMap := newHostMap(l)
  21. preferredRanges := []netip.Prefix{netip.MustParsePrefix("10.0.0.0/8")}
  22. hostMap.preferredRanges.Store(&preferredRanges)
  23. notAfter := time.Now().Add(time.Hour)
  24. cs := &CertState{
  25. initiatingVersion: cert.Version1,
  26. privateKey: []byte{},
  27. v1Cert: &dummyCert{version: cert.Version1, notAfter: notAfter},
  28. v1Credential: nil,
  29. }
  30. lh := newTestLighthouse()
  31. ifce := &Interface{
  32. hostMap: hostMap,
  33. inside: &overlaytest.NoopTun{},
  34. outside: &udp.NoopConn{},
  35. firewall: &Firewall{Conntrack: &FirewallConntrack{Conns: map[firewall.Packet]*conn{}}},
  36. lightHouse: lh,
  37. pki: &PKI{},
  38. handshakeManager: NewHandshakeManager(l, hostMap, lh, &udp.NoopConn{}, defaultHandshakeConfig),
  39. l: l,
  40. // On linux, udp.NewUDPStatsEmitter indexes writers[0] and asserts to
  41. // *udp.StdConn. A zero value works: getMemInfo sees a nil rawConn,
  42. // returns an error, and the emitter falls through to a no-op.
  43. writers: []udp.Conn{&udp.StdConn{}},
  44. }
  45. ifce.pki.cs.Store(cs)
  46. ttlGauge := metrics.GetOrRegisterGauge("certificate.ttl_seconds", nil)
  47. require.Zero(t, ttlGauge.Value(), "gauge should be zero before the emitter runs")
  48. ifce.statsEmitter()()
  49. ttl := ttlGauge.Value()
  50. assert.Positive(t, ttl, "ttl gauge should be set by one run of the emitter")
  51. assert.LessOrEqual(t, ttl, int64(3600))
  52. assert.Equal(t, int64(cert.Version1), metrics.GetOrRegisterGauge("certificate.initiating_version", nil).Value())
  53. assert.Equal(t, int64(cert.Version1), metrics.GetOrRegisterGauge("certificate.max_version", nil).Value())
  54. }