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