github.com/zorawar87/trillian@v1.2.1/monitoring/testonly/metrics.go (about) 1 // Copyright 2017 Google Inc. All Rights Reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package testonly 16 17 import ( 18 "testing" 19 20 "github.com/google/trillian/monitoring" 21 ) 22 23 // TestCounter runs a test on a Counter produced from the provided MetricFactory. 24 func TestCounter(t *testing.T, factory monitoring.MetricFactory) { 25 var tests = []struct { 26 name string 27 labelNames []string 28 labelVals []string 29 }{ 30 { 31 name: "counter0", 32 labelNames: nil, 33 labelVals: nil, 34 }, 35 { 36 name: "counter1", 37 labelNames: []string{"key1"}, 38 labelVals: []string{"val1"}, 39 }, 40 { 41 name: "counter2", 42 labelNames: []string{"key1", "key2"}, 43 labelVals: []string{"val1", "val2"}, 44 }, 45 } 46 for _, test := range tests { 47 t.Run(test.name, func(t *testing.T) { 48 counter := factory.NewCounter(test.name, "Test only", test.labelNames...) 49 if got, want := counter.Value(test.labelVals...), 0.0; got != want { 50 t.Errorf("Counter[%v].Value()=%v; want %v", test.labelVals, got, want) 51 } 52 counter.Inc(test.labelVals...) 53 if got, want := counter.Value(test.labelVals...), 1.0; got != want { 54 t.Errorf("Counter[%v].Value()=%v; want %v", test.labelVals, got, want) 55 } 56 counter.Add(2.5, test.labelVals...) 57 if got, want := counter.Value(test.labelVals...), 3.5; got != want { 58 t.Errorf("Counter[%v].Value()=%v; want %v", test.labelVals, got, want) 59 } 60 // Use an invalid number of labels. 61 libels := append(test.labelVals, "bogus") 62 counter.Add(10.0, libels...) 63 counter.Inc(libels...) 64 if got, want := counter.Value(libels...), 0.0; got != want { 65 t.Errorf("Counter[%v].Value()=%v; want %v", libels, got, want) 66 } 67 // Check that the value hasn't changed. 68 if got, want := counter.Value(test.labelVals...), 3.5; got != want { 69 t.Errorf("Counter[%v].Value()=%v; want %v", test.labelVals, got, want) 70 } 71 }) 72 } 73 } 74 75 // TestGauge runs a test on a Gauge produced from the provided MetricFactory. 76 func TestGauge(t *testing.T, factory monitoring.MetricFactory) { 77 var tests = []struct { 78 name string 79 labelNames []string 80 labelVals []string 81 }{ 82 { 83 name: "gauge0", 84 labelNames: nil, 85 labelVals: nil, 86 }, 87 { 88 name: "gauge1", 89 labelNames: []string{"key1"}, 90 labelVals: []string{"val1"}, 91 }, 92 { 93 name: "gauge2", 94 labelNames: []string{"key1", "key2"}, 95 labelVals: []string{"val1", "val2"}, 96 }, 97 } 98 for _, test := range tests { 99 t.Run(test.name, func(t *testing.T) { 100 gauge := factory.NewGauge(test.name, "Test only", test.labelNames...) 101 if got, want := gauge.Value(test.labelVals...), 0.0; got != want { 102 t.Errorf("Gauge[%v].Value()=%v; want %v", test.labelVals, got, want) 103 } 104 gauge.Inc(test.labelVals...) 105 if got, want := gauge.Value(test.labelVals...), 1.0; got != want { 106 t.Errorf("Gauge[%v].Value()=%v; want %v", test.labelVals, got, want) 107 } 108 gauge.Dec(test.labelVals...) 109 if got, want := gauge.Value(test.labelVals...), 0.0; got != want { 110 t.Errorf("Gauge[%v].Value()=%v; want %v", test.labelVals, got, want) 111 } 112 gauge.Add(2.5, test.labelVals...) 113 if got, want := gauge.Value(test.labelVals...), 2.5; got != want { 114 t.Errorf("Gauge[%v].Value()=%v; want %v", test.labelVals, got, want) 115 } 116 gauge.Set(42.0, test.labelVals...) 117 if got, want := gauge.Value(test.labelVals...), 42.0; got != want { 118 t.Errorf("Gauge[%v].Value()=%v; want %v", test.labelVals, got, want) 119 } 120 // Use an invalid number of labels. 121 libels := append(test.labelVals, "bogus") 122 gauge.Add(10.0, libels...) 123 gauge.Inc(libels...) 124 gauge.Dec(libels...) 125 gauge.Set(120.0, libels...) 126 // Ask for an invalid number of labels. 127 if got, want := gauge.Value(libels...), 0.0; got != want { 128 t.Errorf("Gauge[%v].Value()=%v; want %v", libels, got, want) 129 } 130 // Check that the value hasn't changed. 131 if got, want := gauge.Value(test.labelVals...), 42.0; got != want { 132 t.Errorf("Gauge[%v].Value()=%v; want %v", test.labelVals, got, want) 133 } 134 }) 135 } 136 } 137 138 // TestHistogram runs a test on a Histogram produced from the provided MetricFactory. 139 func TestHistogram(t *testing.T, factory monitoring.MetricFactory) { 140 var tests = []struct { 141 name string 142 labelNames []string 143 labelVals []string 144 }{ 145 { 146 name: "histogram0", 147 labelNames: nil, 148 labelVals: nil, 149 }, 150 { 151 name: "histogram1", 152 labelNames: []string{"key1"}, 153 labelVals: []string{"val1"}, 154 }, 155 { 156 name: "histogram2", 157 labelNames: []string{"key1", "key2"}, 158 labelVals: []string{"val1", "val2"}, 159 }, 160 } 161 for _, test := range tests { 162 t.Run(test.name, func(t *testing.T) { 163 histogram := factory.NewHistogram(test.name, "Test only", test.labelNames...) 164 gotCount, gotSum := histogram.Info(test.labelVals...) 165 if wantCount, wantSum := uint64(0), 0.0; gotCount != wantCount || gotSum != wantSum { 166 t.Errorf("Histogram[%v].Info()=%v,%v; want %v,%v", test.labelVals, gotCount, gotSum, wantCount, wantSum) 167 } 168 histogram.Observe(1.0, test.labelVals...) 169 histogram.Observe(2.0, test.labelVals...) 170 histogram.Observe(3.0, test.labelVals...) 171 gotCount, gotSum = histogram.Info(test.labelVals...) 172 if wantCount, wantSum := uint64(3), 6.0; gotCount != wantCount || gotSum != wantSum { 173 t.Errorf("Histogram[%v].Info()=%v,%v; want %v,%v", test.labelVals, gotCount, gotSum, wantCount, wantSum) 174 } 175 176 // Use an invalid number of labels. 177 libels := append(test.labelVals, "bogus") 178 histogram.Observe(100.0, libels...) 179 histogram.Observe(200.0, libels...) 180 gotCount, gotSum = histogram.Info(libels...) 181 if wantCount, wantSum := uint64(0), 0.0; gotCount != wantCount || gotSum != wantSum { 182 t.Errorf("Histogram[%v].Info()=%v,%v; want %v,%v", libels, gotCount, gotSum, wantCount, wantSum) 183 } 184 // Check that the histogram hasn't changed. 185 gotCount, gotSum = histogram.Info(test.labelVals...) 186 if wantCount, wantSum := uint64(3), 6.0; gotCount != wantCount || gotSum != wantSum { 187 t.Errorf("Histogram[%v].Info()=%v,%v; want %v,%v", test.labelVals, gotCount, gotSum, wantCount, wantSum) 188 } 189 }) 190 } 191 }