diff --git a/pkg/tcpip/tcpip.go b/pkg/tcpip/tcpip.go index 7d4fbe075..fef5ba0e4 100644 --- a/pkg/tcpip/tcpip.go +++ b/pkg/tcpip/tcpip.go @@ -568,6 +568,10 @@ func (s *StatCounter) IncrementBy(v uint64) { atomic.AddUint64(&s.count, v) } +func (s *StatCounter) String() string { + return strconv.FormatUint(s.Value(), 10) +} + // IPStats collects IP-specific stats (both v4 and v6). type IPStats struct { // PacketsReceived is the total number of IP packets received from the link diff --git a/pkg/tcpip/tcpip_test.go b/pkg/tcpip/tcpip_test.go index 361e359d4..1f7b04398 100644 --- a/pkg/tcpip/tcpip_test.go +++ b/pkg/tcpip/tcpip_test.go @@ -15,7 +15,9 @@ package tcpip import ( + "fmt" "net" + "strings" "testing" ) @@ -193,3 +195,23 @@ func TestAddressString(t *testing.T) { } } } + +func TestStatsString(t *testing.T) { + got := fmt.Sprintf("%+v", Stats{}.FillIn()) + + matchers := []string{ + // Print root-level stats correctly. + "UnknownProtocolRcvdPackets:0", + // Print protocol-specific stats correctly. + "TCP:{ActiveConnectionOpenings:0", + } + + for _, m := range matchers { + if !strings.Contains(got, m) { + t.Errorf("string.Contains(got, %q) = false", m) + } + } + if t.Failed() { + t.Logf(`got = fmt.Sprintf("%%+v", Stats{}.FillIn()) = %q`, got) + } +}