Automatic statistic registeration for metrics cache
[ric-plt/xapp-frame.git] / pkg / xapp / metrics_test.go
index aad90b1..74bd5b2 100755 (executable)
@@ -119,18 +119,83 @@ func TestMetricLabeledCounter(t *testing.T) {
 
 }
 
-func TestMetricLabeledCounterMismatch(t *testing.T) {
+func TestMetricLabeledCounterMissmatch(t *testing.T) {
        Metric.RegisterLabeledCounter(
                CounterOpts{Name: "counter1", Help: "counter1"},
                []string{"name", "event"},
                []string{"name1", "event1"},
-               "SUBSYSTEMLERR")
+               "SUBSYSTEMLERRMISSMATCH")
 
+       ret := Metric.RegisterLabeledCounter(
+               CounterOpts{Name: "counter1", Help: "counter1"},
+               []string{"name", "eventmiss"},
+               []string{"name1", "event1"},
+               "SUBSYSTEMLERRMISSMATCH")
+
+       if ret != nil {
+               t.Errorf("Returned counter even its labels are mismatching")
+       }
+
+       ret = Metric.RegisterLabeledCounter(
+               CounterOpts{Name: "counter1", Help: "counter1"},
+               []string{"name"},
+               []string{"name1"},
+               "SUBSYSTEMLERRMISSMATCH")
+
+       if ret != nil {
+               t.Errorf("Returned counter even its labels are mismatching")
+       }
+
+}
+
+func TestMetricLabeledCounterWrongOrder(t *testing.T) {
        Metric.RegisterLabeledCounter(
                CounterOpts{Name: "counter1", Help: "counter1"},
-               []string{"name", "eventmismatch"},
+               []string{"name", "event"},
+               []string{"name1", "event1"},
+               "SUBSYSTEMLERRWRONGORDER")
+
+       ret := Metric.RegisterLabeledCounter(
+               CounterOpts{Name: "counter1", Help: "counter1"},
+               []string{"event", "name"},
+               []string{"name1", "event1"},
+               "SUBSYSTEMLERRWRONGORDER")
+
+       if ret != nil {
+               t.Errorf("Returned counter even its labels order is wrong")
+       }
+}
+
+func TestMetricLabeledCounterCounterNameExists(t *testing.T) {
+       Metric.RegisterCounter(
+               CounterOpts{Name: "counter1", Help: "counter1"},
+               "SUBSYSTEMLERRNAMEEXISTS")
+
+       ret := Metric.RegisterLabeledCounter(
+               CounterOpts{Name: "counter1", Help: "counter1"},
+               []string{"name", "event"},
                []string{"name1", "event1"},
-               "SUBSYSTEMLERR")
+               "SUBSYSTEMLERRNAMEEXISTS")
+
+       if ret != nil {
+               t.Errorf("Returned labeled counter even its name conflicts with existing counter name")
+       }
+}
+
+func TestMetricCounterLabeledCounterNameExists(t *testing.T) {
+       Metric.RegisterLabeledCounter(
+               CounterOpts{Name: "counter2", Help: "counter2"},
+               []string{"name", "event"},
+               []string{"name1", "event1"},
+               "SUBSYSTEMLERRNAMEEXISTS")
+
+       ret := Metric.RegisterCounter(
+               CounterOpts{Name: "counter2", Help: "counter2"},
+               "SUBSYSTEMLERRNAMEEXISTS")
+
+       if ret != nil {
+               t.Errorf("Returned counter even its name conflicts with existing labeled counter name")
+       }
 }
 
 func TestMetricLabeledCounterGroup(t *testing.T) {
@@ -257,18 +322,84 @@ func TestMetricLabeledGauge(t *testing.T) {
 
 }
 
-func TestMetricLabeledGaugeMismatch(t *testing.T) {
+func TestMetricLabeledGaugeMissmatch(t *testing.T) {
        Metric.RegisterLabeledGauge(
                CounterOpts{Name: "gauge1", Help: "gauge1"},
                []string{"name", "event"},
                []string{"name1", "event1"},
-               "SUBSYSTEMLERR")
+               "SUBSYSTEMLERRMISSMATCH")
+
+       ret := Metric.RegisterLabeledGauge(
+               CounterOpts{Name: "gauge1", Help: "gauge1"},
+               []string{"name", "eventmiss"},
+               []string{"name1", "event1"},
+               "SUBSYSTEMLERRMISSMATCH")
+
+       if ret != nil {
+               t.Errorf("Returned gauge even its labels are mismatching")
+       }
 
+       ret = Metric.RegisterLabeledGauge(
+               CounterOpts{Name: "gauge1", Help: "gauge1"},
+               []string{"name"},
+               []string{"name1"},
+               "SUBSYSTEMLERRMISSMATCH")
+
+       if ret != nil {
+               t.Errorf("Returned gauge even its labels are mismatching")
+       }
+
+}
+
+func TestMetricLabeledGaugeWrongOrder(t *testing.T) {
        Metric.RegisterLabeledGauge(
                CounterOpts{Name: "gauge1", Help: "gauge1"},
-               []string{"name", "eventmismatch"},
+               []string{"name", "event"},
+               []string{"name1", "event1"},
+               "SUBSYSTEMLERRWRONGORDER")
+
+       ret := Metric.RegisterLabeledGauge(
+               CounterOpts{Name: "gauge1", Help: "gauge1"},
+               []string{"event", "name"},
                []string{"name1", "event1"},
-               "SUBSYSTEMLERR")
+               "SUBSYSTEMLERRWRONGORDER")
+
+       if ret != nil {
+               t.Errorf("Returned gauge even its labels order is wrong")
+       }
+
+}
+
+func TestMetricLabeledGaugeGaugeNameExists(t *testing.T) {
+       Metric.RegisterGauge(
+               CounterOpts{Name: "gauge1", Help: "gauge1"},
+               "SUBSYSTEMLERRNAMEEXISTS")
+
+       ret := Metric.RegisterLabeledGauge(
+               CounterOpts{Name: "gauge1", Help: "gauge1"},
+               []string{"name", "event"},
+               []string{"name1", "event1"},
+               "SUBSYSTEMLERRNAMEEXISTS")
+
+       if ret != nil {
+               t.Errorf("Returned labeled gauge even its name conflicts with existing gauge name")
+       }
+}
+
+func TestMetricGaugeLabeledGaugeNameExists(t *testing.T) {
+       Metric.RegisterLabeledGauge(
+               CounterOpts{Name: "gauge2", Help: "gauge2"},
+               []string{"name", "event"},
+               []string{"name1", "event1"},
+               "SUBSYSTEMLERRNAMEEXISTS")
+
+       ret := Metric.RegisterGauge(
+               CounterOpts{Name: "gauge2", Help: "gauge2"},
+               "SUBSYSTEMLERRNAMEEXISTS")
+
+       if ret != nil {
+               t.Errorf("Returned gauge even its name conflicts with existing labeled gauge name")
+       }
 }
 
 func TestMetricLabeledGaugeGroup(t *testing.T) {
@@ -387,6 +518,94 @@ func TestMetricGroupCache(t *testing.T) {
        m_grp.GSet("event2_gauge1", 1)
 }
 
+type registerer struct{}
+
+func (met *registerer) RegisterCounter(opts CounterOpts) Counter {
+       return Metric.RegisterLabeledCounter(
+               opts,
+               []string{"host", "interface"},
+               []string{"testhost", "testinterface"},
+               "SUBSYSTEMAUTO")
+}
+
+func (met *registerer) RegisterGauge(opts CounterOpts) Gauge {
+       return Metric.RegisterLabeledGauge(
+               opts,
+               []string{"host", "interface"},
+               []string{"testhost", "testinterface"},
+               "SUBSYSTEMAUTO")
+}
+
+func TestMetricCounterAutoCGetNoReg(t *testing.T) {
+       m_grp := NewMetricGroupsCache()
+       m_grp.CGet("cautotest1")
+}
+
+func TestMetricCounterAutoCGetFunc(t *testing.T) {
+       m_grp := NewMetricGroupsCache()
+       m_reg := &registerer{}
+       m_grp.Registerer(MetricGroupsCacheCounterRegistererFunc(m_reg.RegisterCounter), nil)
+       m_grp.CGet("cautotest1")
+}
+
+func TestMetricCounterAutoCGet(t *testing.T) {
+       m_grp := NewMetricGroupsCacheWithRegisterers(&registerer{}, nil)
+       m_grp.CGet("cautotest1")
+}
+
+func TestMetricCounterAutoCInc(t *testing.T) {
+       m_grp := NewMetricGroupsCache()
+       m_grp.Registerer(&registerer{}, nil)
+       m_grp.CInc("cautotest1")
+}
+
+func TestMetricCounterAutoCAdd(t *testing.T) {
+       m_grp := NewMetricGroupsCache()
+       m_grp.Registerer(&registerer{}, nil)
+       m_grp.CAdd("cautotest1", float64(10))
+}
+
+func TestMetricCounterAutoGGetNoReg(t *testing.T) {
+       m_grp := NewMetricGroupsCache()
+       m_grp.GGet("gautotest1")
+}
+
+func TestMetricCounterAutoGGetFunc(t *testing.T) {
+       m_grp := NewMetricGroupsCache()
+       m_reg := &registerer{}
+       m_grp.Registerer(nil, MetricGroupsCacheGaugeRegistererFunc(m_reg.RegisterGauge))
+       m_grp.GGet("gautotest1")
+}
+
+func TestMetricCounterAutoGGet(t *testing.T) {
+       m_grp := NewMetricGroupsCacheWithRegisterers(nil, &registerer{})
+       m_grp.GGet("gautotest1")
+}
+
+func TestMetricCounterAutoGInc(t *testing.T) {
+       m_grp := NewMetricGroupsCache()
+       m_grp.Registerer(nil, &registerer{})
+       m_grp.GInc("gautotest1")
+}
+
+func TestMetricCounterAutoGSet(t *testing.T) {
+       m_grp := NewMetricGroupsCache()
+       m_grp.Registerer(nil, &registerer{})
+       m_grp.GSet("gautotest1", float64(10))
+}
+
+func TestMetricCounterAutoGAdd(t *testing.T) {
+       m_grp := NewMetricGroupsCache()
+       m_grp.Registerer(nil, &registerer{})
+       m_grp.GAdd("gautotest1", float64(10))
+}
+
+func TestMetricCounterAutoGDec(t *testing.T) {
+       m_grp := NewMetricGroupsCache()
+       m_grp.Registerer(nil, &registerer{})
+       m_grp.GDec("gautotest1")
+}
+
 // ----
 // VECTORS ARE OLD WAY
 // *Labeled* will do all work under the hood
@@ -429,9 +648,6 @@ func TestMetricSetup(t *testing.T) {
                t.Errorf("tmpGVect not same than mGVect. cache not working?")
        }
 
-       Metric.RegisterCounterVec(CounterOpts{Name: "counter1", Help: "counter1"}, []string{"name", "eventMismatch"}, "SUBSYSTEM0")
-       Metric.RegisterGaugeVec(CounterOpts{Name: "gauge1", Help: "gauge1"}, []string{"name", "eventMismatch"}, "SUBSYSTEM0")
-
 }
 
 func TestMetricCounterVector(t *testing.T) {