diff --git a/broker/metrics_test.go b/broker/metrics_test.go new file mode 100644 index 0000000..148bf4a --- /dev/null +++ b/broker/metrics_test.go @@ -0,0 +1,33 @@ +package main + +import ( + "sync" + "sync/atomic" + "testing" + + . "github.com/smartystreets/goconvey/convey" +) + +func TestFormatAndClearCountryStats(t *testing.T) { + Convey("for country stats order", t, func() { + stats := new(sync.Map) + for cc, count := range map[string]uint64{ + "IT": 50, + "FR": 200, + "TZ": 100, + "CN": 250, + "RU": 150, + "CA": 1, + "BE": 1, + "PH": 1, + } { + stats.LoadOrStore(cc, new(uint64)) + val, _ := stats.Load(cc) + ptr := val.(*uint64) + atomic.AddUint64(ptr, count) + } + So(formatAndClearCountryStats(stats, false), ShouldEqual, "CN=250,FR=200,RU=150,TZ=100,IT=50,BE=1,CA=1,PH=1") + // The map should be cleared on return. + stats.Range(func(_, _ any) bool { panic("map was not cleared") }) + }) +} diff --git a/broker/snowflake-broker_test.go b/broker/snowflake-broker_test.go index c701753..152d527 100644 --- a/broker/snowflake-broker_test.go +++ b/broker/snowflake-broker_test.go @@ -11,7 +11,6 @@ import ( "net/http/httptest" "os" "sync" - "sync/atomic" "testing" "time" @@ -1030,26 +1029,5 @@ snowflake-ips-nat-unknown 0 ctx.metrics.printMetrics() So(buf.String(), ShouldContainSubstring, "client-denied-count 8\nclient-restricted-denied-count 8\nclient-unrestricted-denied-count 0\nclient-snowflake-match-count 0") }) - Convey("for country stats order", func() { - stats := new(sync.Map) - for cc, count := range map[string]uint64{ - "IT": 50, - "FR": 200, - "TZ": 100, - "CN": 250, - "RU": 150, - "CA": 1, - "BE": 1, - "PH": 1, - } { - stats.LoadOrStore(cc, new(uint64)) - val, _ := stats.Load(cc) - ptr := val.(*uint64) - atomic.AddUint64(ptr, count) - } - So(formatAndClearCountryStats(stats, false), ShouldEqual, "CN=250,FR=200,RU=150,TZ=100,IT=50,BE=1,CA=1,PH=1") - // The map should be cleared on return. - stats.Range(func(_, _ any) bool { panic("map was not cleared") }) - }) }) }