github.com/zhiqiangxu/go-ethereum@v1.9.16-0.20210824055606-be91cfdebc48/metrics/meter_test.go (about)

     1  package metrics
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  )
     7  
     8  func BenchmarkMeter(b *testing.B) {
     9  	m := NewMeter()
    10  	b.ResetTimer()
    11  	for i := 0; i < b.N; i++ {
    12  		m.Mark(1)
    13  	}
    14  }
    15  
    16  func TestGetOrRegisterMeter(t *testing.T) {
    17  	r := NewRegistry()
    18  	NewRegisteredMeter("foo", r).Mark(47)
    19  	if m := GetOrRegisterMeter("foo", r); m.Count() != 47 {
    20  		t.Fatal(m)
    21  	}
    22  }
    23  
    24  func TestMeterDecay(t *testing.T) {
    25  	ma := meterArbiter{
    26  		ticker: time.NewTicker(time.Millisecond),
    27  		meters: make(map[*StandardMeter]struct{}),
    28  	}
    29  	defer ma.ticker.Stop()
    30  	m := newStandardMeter()
    31  	ma.meters[m] = struct{}{}
    32  	go ma.tick()
    33  	m.Mark(1)
    34  	rateMean := m.RateMean()
    35  	time.Sleep(100 * time.Millisecond)
    36  	if m.RateMean() >= rateMean {
    37  		t.Error("m.RateMean() didn't decrease")
    38  	}
    39  }
    40  
    41  func TestMeterNonzero(t *testing.T) {
    42  	m := NewMeter()
    43  	m.Mark(3)
    44  	if count := m.Count(); count != 3 {
    45  		t.Errorf("m.Count(): 3 != %v\n", count)
    46  	}
    47  }
    48  
    49  func TestMeterStop(t *testing.T) {
    50  	l := len(arbiter.meters)
    51  	m := NewMeter()
    52  	if l+1 != len(arbiter.meters) {
    53  		t.Errorf("arbiter.meters: %d != %d\n", l+1, len(arbiter.meters))
    54  	}
    55  	m.Stop()
    56  	if l != len(arbiter.meters) {
    57  		t.Errorf("arbiter.meters: %d != %d\n", l, len(arbiter.meters))
    58  	}
    59  }
    60  
    61  func TestMeterSnapshot(t *testing.T) {
    62  	m := NewMeter()
    63  	m.Mark(1)
    64  	if snapshot := m.Snapshot(); m.RateMean() != snapshot.RateMean() {
    65  		t.Fatal(snapshot)
    66  	}
    67  }
    68  
    69  func TestMeterZero(t *testing.T) {
    70  	m := NewMeter()
    71  	if count := m.Count(); count != 0 {
    72  		t.Errorf("m.Count(): 0 != %v\n", count)
    73  	}
    74  }