github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/metrics/meter_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:40</date> 10 //</624450099421908992> 11 12 package metrics 13 14 import ( 15 "testing" 16 "time" 17 ) 18 19 func BenchmarkMeter(b *testing.B) { 20 m := NewMeter() 21 b.ResetTimer() 22 for i := 0; i < b.N; i++ { 23 m.Mark(1) 24 } 25 } 26 27 func TestGetOrRegisterMeter(t *testing.T) { 28 r := NewRegistry() 29 NewRegisteredMeter("foo", r).Mark(47) 30 if m := GetOrRegisterMeter("foo", r); 47 != m.Count() { 31 t.Fatal(m) 32 } 33 } 34 35 func TestMeterDecay(t *testing.T) { 36 ma := meterArbiter{ 37 ticker: time.NewTicker(time.Millisecond), 38 meters: make(map[*StandardMeter]struct{}), 39 } 40 m := newStandardMeter() 41 ma.meters[m] = struct{}{} 42 go ma.tick() 43 m.Mark(1) 44 rateMean := m.RateMean() 45 time.Sleep(100 * time.Millisecond) 46 if m.RateMean() >= rateMean { 47 t.Error("m.RateMean() didn't decrease") 48 } 49 } 50 51 func TestMeterNonzero(t *testing.T) { 52 m := NewMeter() 53 m.Mark(3) 54 if count := m.Count(); 3 != count { 55 t.Errorf("m.Count(): 3 != %v\n", count) 56 } 57 } 58 59 func TestMeterStop(t *testing.T) { 60 l := len(arbiter.meters) 61 m := NewMeter() 62 if len(arbiter.meters) != l+1 { 63 t.Errorf("arbiter.meters: %d != %d\n", l+1, len(arbiter.meters)) 64 } 65 m.Stop() 66 if len(arbiter.meters) != l { 67 t.Errorf("arbiter.meters: %d != %d\n", l, len(arbiter.meters)) 68 } 69 } 70 71 func TestMeterSnapshot(t *testing.T) { 72 m := NewMeter() 73 m.Mark(1) 74 if snapshot := m.Snapshot(); m.RateMean() != snapshot.RateMean() { 75 t.Fatal(snapshot) 76 } 77 } 78 79 func TestMeterZero(t *testing.T) { 80 m := NewMeter() 81 if count := m.Count(); 0 != count { 82 t.Errorf("m.Count(): 0 != %v\n", count) 83 } 84 } 85