github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/metrics/registry_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  )
    14  
    15  func BenchmarkRegistry(b *testing.B) {
    16  	r := NewRegistry()
    17  	r.Register("foo", NewCounter())
    18  	b.ResetTimer()
    19  	for i := 0; i < b.N; i++ {
    20  		r.Each(func(string, interface{}) {})
    21  	}
    22  }
    23  
    24  func TestRegistry(t *testing.T) {
    25  	r := NewRegistry()
    26  	r.Register("foo", NewCounter())
    27  	i := 0
    28  	r.Each(func(name string, iface interface{}) {
    29  		i++
    30  		if "foo" != name {
    31  			t.Fatal(name)
    32  		}
    33  		if _, ok := iface.(Counter); !ok {
    34  			t.Fatal(iface)
    35  		}
    36  	})
    37  	if 1 != i {
    38  		t.Fatal(i)
    39  	}
    40  	r.Unregister("foo")
    41  	i = 0
    42  	r.Each(func(string, interface{}) { i++ })
    43  	if 0 != i {
    44  		t.Fatal(i)
    45  	}
    46  }
    47  
    48  func TestRegistryDuplicate(t *testing.T) {
    49  	r := NewRegistry()
    50  	if err := r.Register("foo", NewCounter()); nil != err {
    51  		t.Fatal(err)
    52  	}
    53  	if err := r.Register("foo", NewGauge()); nil == err {
    54  		t.Fatal(err)
    55  	}
    56  	i := 0
    57  	r.Each(func(name string, iface interface{}) {
    58  		i++
    59  		if _, ok := iface.(Counter); !ok {
    60  			t.Fatal(iface)
    61  		}
    62  	})
    63  	if 1 != i {
    64  		t.Fatal(i)
    65  	}
    66  }
    67  
    68  func TestRegistryGet(t *testing.T) {
    69  	r := NewRegistry()
    70  	r.Register("foo", NewCounter())
    71  	if count := r.Get("foo").(Counter).Count(); 0 != count {
    72  		t.Fatal(count)
    73  	}
    74  	r.Get("foo").(Counter).Inc(1)
    75  	if count := r.Get("foo").(Counter).Count(); 1 != count {
    76  		t.Fatal(count)
    77  	}
    78  }
    79  
    80  func TestRegistryGetOrRegister(t *testing.T) {
    81  	r := NewRegistry()
    82  
    83  //第一个指标用getorregister获胜
    84  	_ = r.GetOrRegister("foo", NewCounter())
    85  	m := r.GetOrRegister("foo", NewGauge())
    86  	if _, ok := m.(Counter); !ok {
    87  		t.Fatal(m)
    88  	}
    89  
    90  	i := 0
    91  	r.Each(func(name string, iface interface{}) {
    92  		i++
    93  		if name != "foo" {
    94  			t.Fatal(name)
    95  		}
    96  		if _, ok := iface.(Counter); !ok {
    97  			t.Fatal(iface)
    98  		}
    99  	})
   100  	if i != 1 {
   101  		t.Fatal(i)
   102  	}
   103  }
   104  
   105  func TestRegistryGetOrRegisterWithLazyInstantiation(t *testing.T) {
   106  	r := NewRegistry()
   107  
   108  //第一个指标用getorregister获胜
   109  	_ = r.GetOrRegister("foo", NewCounter)
   110  	m := r.GetOrRegister("foo", NewGauge)
   111  	if _, ok := m.(Counter); !ok {
   112  		t.Fatal(m)
   113  	}
   114  
   115  	i := 0
   116  	r.Each(func(name string, iface interface{}) {
   117  		i++
   118  		if name != "foo" {
   119  			t.Fatal(name)
   120  		}
   121  		if _, ok := iface.(Counter); !ok {
   122  			t.Fatal(iface)
   123  		}
   124  	})
   125  	if i != 1 {
   126  		t.Fatal(i)
   127  	}
   128  }
   129  
   130  func TestRegistryUnregister(t *testing.T) {
   131  	l := len(arbiter.meters)
   132  	r := NewRegistry()
   133  	r.Register("foo", NewCounter())
   134  	r.Register("bar", NewMeter())
   135  	r.Register("baz", NewTimer())
   136  	if len(arbiter.meters) != l+2 {
   137  		t.Errorf("arbiter.meters: %d != %d\n", l+2, len(arbiter.meters))
   138  	}
   139  	r.Unregister("foo")
   140  	r.Unregister("bar")
   141  	r.Unregister("baz")
   142  	if len(arbiter.meters) != l {
   143  		t.Errorf("arbiter.meters: %d != %d\n", l+2, len(arbiter.meters))
   144  	}
   145  }
   146  
   147  func TestPrefixedChildRegistryGetOrRegister(t *testing.T) {
   148  	r := NewRegistry()
   149  	pr := NewPrefixedChildRegistry(r, "prefix.")
   150  
   151  	_ = pr.GetOrRegister("foo", NewCounter())
   152  
   153  	i := 0
   154  	r.Each(func(name string, m interface{}) {
   155  		i++
   156  		if name != "prefix.foo" {
   157  			t.Fatal(name)
   158  		}
   159  	})
   160  	if i != 1 {
   161  		t.Fatal(i)
   162  	}
   163  }
   164  
   165  func TestPrefixedRegistryGetOrRegister(t *testing.T) {
   166  	r := NewPrefixedRegistry("prefix.")
   167  
   168  	_ = r.GetOrRegister("foo", NewCounter())
   169  
   170  	i := 0
   171  	r.Each(func(name string, m interface{}) {
   172  		i++
   173  		if name != "prefix.foo" {
   174  			t.Fatal(name)
   175  		}
   176  	})
   177  	if i != 1 {
   178  		t.Fatal(i)
   179  	}
   180  }
   181  
   182  func TestPrefixedRegistryRegister(t *testing.T) {
   183  	r := NewPrefixedRegistry("prefix.")
   184  	err := r.Register("foo", NewCounter())
   185  	c := NewCounter()
   186  	Register("bar", c)
   187  	if err != nil {
   188  		t.Fatal(err.Error())
   189  	}
   190  
   191  	i := 0
   192  	r.Each(func(name string, m interface{}) {
   193  		i++
   194  		if name != "prefix.foo" {
   195  			t.Fatal(name)
   196  		}
   197  	})
   198  	if i != 1 {
   199  		t.Fatal(i)
   200  	}
   201  }
   202  
   203  func TestPrefixedRegistryUnregister(t *testing.T) {
   204  	r := NewPrefixedRegistry("prefix.")
   205  
   206  	_ = r.Register("foo", NewCounter())
   207  
   208  	i := 0
   209  	r.Each(func(name string, m interface{}) {
   210  		i++
   211  		if name != "prefix.foo" {
   212  			t.Fatal(name)
   213  		}
   214  	})
   215  	if i != 1 {
   216  		t.Fatal(i)
   217  	}
   218  
   219  	r.Unregister("foo")
   220  
   221  	i = 0
   222  	r.Each(func(name string, m interface{}) {
   223  		i++
   224  	})
   225  
   226  	if i != 0 {
   227  		t.Fatal(i)
   228  	}
   229  }
   230  
   231  func TestPrefixedRegistryGet(t *testing.T) {
   232  	pr := NewPrefixedRegistry("prefix.")
   233  	name := "foo"
   234  	pr.Register(name, NewCounter())
   235  
   236  	fooCounter := pr.Get(name)
   237  	if fooCounter == nil {
   238  		t.Fatal(name)
   239  	}
   240  }
   241  
   242  func TestPrefixedChildRegistryGet(t *testing.T) {
   243  	r := NewRegistry()
   244  	pr := NewPrefixedChildRegistry(r, "prefix.")
   245  	name := "foo"
   246  	pr.Register(name, NewCounter())
   247  	fooCounter := pr.Get(name)
   248  	if fooCounter == nil {
   249  		t.Fatal(name)
   250  	}
   251  }
   252  
   253  func TestChildPrefixedRegistryRegister(t *testing.T) {
   254  	r := NewPrefixedChildRegistry(DefaultRegistry, "prefix.")
   255  	err := r.Register("foo", NewCounter())
   256  	c := NewCounter()
   257  	Register("bar", c)
   258  	if err != nil {
   259  		t.Fatal(err.Error())
   260  	}
   261  
   262  	i := 0
   263  	r.Each(func(name string, m interface{}) {
   264  		i++
   265  		if name != "prefix.foo" {
   266  			t.Fatal(name)
   267  		}
   268  	})
   269  	if i != 1 {
   270  		t.Fatal(i)
   271  	}
   272  }
   273  
   274  func TestChildPrefixedRegistryOfChildRegister(t *testing.T) {
   275  	r := NewPrefixedChildRegistry(NewRegistry(), "prefix.")
   276  	r2 := NewPrefixedChildRegistry(r, "prefix2.")
   277  	err := r.Register("foo2", NewCounter())
   278  	if err != nil {
   279  		t.Fatal(err.Error())
   280  	}
   281  	err = r2.Register("baz", NewCounter())
   282  	c := NewCounter()
   283  	Register("bars", c)
   284  
   285  	i := 0
   286  	r2.Each(func(name string, m interface{}) {
   287  		i++
   288  		if name != "prefix.prefix2.baz" {
   289  //致命的(名字)
   290  		}
   291  	})
   292  	if i != 1 {
   293  		t.Fatal(i)
   294  	}
   295  }
   296  
   297  func TestWalkRegistries(t *testing.T) {
   298  	r := NewPrefixedChildRegistry(NewRegistry(), "prefix.")
   299  	r2 := NewPrefixedChildRegistry(r, "prefix2.")
   300  	err := r.Register("foo2", NewCounter())
   301  	if err != nil {
   302  		t.Fatal(err.Error())
   303  	}
   304  	err = r2.Register("baz", NewCounter())
   305  	c := NewCounter()
   306  	Register("bars", c)
   307  
   308  	_, prefix := findPrefix(r2, "")
   309  	if "prefix.prefix2." != prefix {
   310  		t.Fatal(prefix)
   311  	}
   312  
   313  }