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