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  }