github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/metric/gauge_test.go (about) 1 package metric_test 2 3 import ( 4 "runtime" 5 "sync" 6 7 . "github.com/pf-qiu/concourse/v6/atc/metric" 8 9 . "github.com/onsi/ginkgo" 10 . "github.com/onsi/gomega" 11 ) 12 13 var _ = Describe("Gauge", func() { 14 var gauge *Gauge 15 16 BeforeEach(func() { 17 gauge = &Gauge{} 18 }) 19 20 It("tracks the maximum value seen since last checked", func() { 21 gauge.Inc() 22 gauge.Inc() 23 gauge.Dec() 24 25 Expect(gauge.Max()).To(Equal(float64(2))) 26 }) 27 28 It("deals with concurrent increments correctly", func() { 29 // buckle up 30 defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(runtime.NumCPU())) 31 32 totalIncs := 30 33 wg := new(sync.WaitGroup) 34 wg.Add(totalIncs) 35 36 for i := 0; i < totalIncs; i++ { 37 go func() { 38 gauge.Inc() 39 wg.Done() 40 }() 41 } 42 43 wg.Wait() 44 45 Expect(gauge.Max()).To(Equal(float64(totalIncs))) 46 }) 47 48 It("resets the max to the current value when observed", func() { 49 gauge.Inc() 50 gauge.Inc() 51 gauge.Dec() 52 53 Expect(gauge.Max()).To(Equal(float64(2))) 54 55 Expect(gauge.Max()).To(Equal(float64(1))) 56 }) 57 })