github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/metrics/meter_test.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 package metrics 10 11 import ( 12 "testing" 13 "time" 14 ) 15 16 func BenchmarkMeter(b *testing.B) { 17 m := NewMeter() 18 b.ResetTimer() 19 for i := 0; i < b.N; i++ { 20 m.Mark(1) 21 } 22 } 23 24 func TestGetOrRegisterMeter(t *testing.T) { 25 r := NewRegistry() 26 NewRegisteredMeter("foo", r).Mark(47) 27 if m := GetOrRegisterMeter("foo", r); 47 != m.Count() { 28 t.Fatal(m) 29 } 30 } 31 32 func TestMeterDecay(t *testing.T) { 33 ma := meterArbiter{ 34 ticker: time.NewTicker(time.Millisecond), 35 meters: make(map[*StandardMeter]struct{}), 36 } 37 m := newStandardMeter() 38 ma.meters[m] = struct{}{} 39 go ma.tick() 40 m.Mark(1) 41 rateMean := m.RateMean() 42 time.Sleep(100 * time.Millisecond) 43 if m.RateMean() >= rateMean { 44 t.Error("m.RateMean() didn't decrease") 45 } 46 } 47 48 func TestMeterNonzero(t *testing.T) { 49 m := NewMeter() 50 m.Mark(3) 51 if count := m.Count(); 3 != count { 52 t.Errorf("m.Count(): 3 != %v\n", count) 53 } 54 } 55 56 func TestMeterStop(t *testing.T) { 57 l := len(arbiter.meters) 58 m := NewMeter() 59 if len(arbiter.meters) != l+1 { 60 t.Errorf("arbiter.meters: %d != %d\n", l+1, len(arbiter.meters)) 61 } 62 m.Stop() 63 if len(arbiter.meters) != l { 64 t.Errorf("arbiter.meters: %d != %d\n", l, len(arbiter.meters)) 65 } 66 } 67 68 func TestMeterSnapshot(t *testing.T) { 69 m := NewMeter() 70 m.Mark(1) 71 if snapshot := m.Snapshot(); m.RateMean() != snapshot.RateMean() { 72 t.Fatal(snapshot) 73 } 74 } 75 76 func TestMeterZero(t *testing.T) { 77 m := NewMeter() 78 if count := m.Count(); 0 != count { 79 t.Errorf("m.Count(): 0 != %v\n", count) 80 } 81 }