github.com/go-graphite/carbonapi@v0.17.0/expr/functions/tukey/function_test.go (about) 1 package tukey 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/go-graphite/carbonapi/expr/interfaces" 8 "github.com/go-graphite/carbonapi/expr/metadata" 9 "github.com/go-graphite/carbonapi/expr/types" 10 "github.com/go-graphite/carbonapi/pkg/parser" 11 th "github.com/go-graphite/carbonapi/tests" 12 ) 13 14 var ( 15 md []interfaces.FunctionMetadata = New("") 16 ) 17 18 func init() { 19 for _, m := range md { 20 metadata.RegisterFunction(m.Name, m.F) 21 } 22 } 23 24 func TestFunctionMultiReturn(t *testing.T) { 25 now32 := int64(time.Now().Unix()) 26 27 tests := []th.MultiReturnEvalTestItem{ 28 { 29 "tukeyAbove(metric*,1.5,5)", 30 map[parser.MetricRequest][]*types.MetricData{ 31 {Metric: "metric*", From: 0, Until: 1}: { 32 types.MakeMetricData("metricA", []float64{21, 17, 20, 20, 10, 29}, 1, now32), 33 types.MakeMetricData("metricB", []float64{20, 18, 21, 19, 20, 20}, 1, now32), 34 types.MakeMetricData("metricC", []float64{19, 19, 21, 17, 23, 20}, 1, now32), 35 types.MakeMetricData("metricD", []float64{18, 20, 22, 14, 26, 20}, 1, now32), 36 types.MakeMetricData("metricE", []float64{17, 21, 8, 30, 18, 28}, 1, now32), 37 }, 38 }, 39 40 "tukeyAbove", 41 map[string][]*types.MetricData{ 42 "metricA": {types.MakeMetricData("metricA", []float64{21, 17, 20, 20, 10, 29}, 1, now32)}, 43 "metricD": {types.MakeMetricData("metricD", []float64{18, 20, 22, 14, 26, 20}, 1, now32)}, 44 "metricE": {types.MakeMetricData("metricE", []float64{17, 21, 8, 30, 18, 28}, 1, now32)}, 45 }, 46 }, 47 { 48 "tukeyAbove(metric*, 3, 5)", 49 map[parser.MetricRequest][]*types.MetricData{ 50 {Metric: "metric*", From: 0, Until: 1}: { 51 types.MakeMetricData("metricA", []float64{21, 17, 20, 20, 10, 29}, 1, now32), 52 types.MakeMetricData("metricB", []float64{20, 18, 21, 19, 20, 20}, 1, now32), 53 types.MakeMetricData("metricC", []float64{19, 19, 21, 17, 23, 20}, 1, now32), 54 types.MakeMetricData("metricD", []float64{18, 20, 22, 14, 26, 20}, 1, now32), 55 types.MakeMetricData("metricE", []float64{17, 21, 8, 30, 18, 28}, 1, now32), 56 }, 57 }, 58 59 "tukeyAbove", 60 map[string][]*types.MetricData{ 61 "metricE": {types.MakeMetricData("metricE", []float64{17, 21, 8, 30, 18, 28}, 1, now32)}, 62 }, 63 }, 64 { 65 "tukeyAbove(metric*, 1.5, 5, 6)", 66 map[parser.MetricRequest][]*types.MetricData{ 67 {Metric: "metric*", From: 0, Until: 1}: { 68 types.MakeMetricData("metricA", []float64{20, 20, 20, 20, 21, 17, 20, 20, 10, 29}, 1, now32), 69 types.MakeMetricData("metricB", []float64{20, 20, 20, 20, 20, 18, 21, 19, 20, 20}, 1, now32), 70 types.MakeMetricData("metricC", []float64{20, 20, 20, 20, 19, 19, 21, 17, 23, 20}, 1, now32), 71 types.MakeMetricData("metricD", []float64{20, 20, 20, 20, 18, 20, 22, 14, 26, 20}, 1, now32), 72 types.MakeMetricData("metricE", []float64{20, 20, 20, 20, 17, 21, 8, 30, 18, 28}, 1, now32), 73 }, 74 }, 75 76 "tukeyAbove(metric*, 1.5, 5, 6)", 77 map[string][]*types.MetricData{ 78 "metricA": {types.MakeMetricData("metricA", []float64{20, 20, 20, 20, 21, 17, 20, 20, 10, 29}, 1, now32)}, 79 "metricD": {types.MakeMetricData("metricD", []float64{20, 20, 20, 20, 18, 20, 22, 14, 26, 20}, 1, now32)}, 80 "metricE": {types.MakeMetricData("metricE", []float64{20, 20, 20, 20, 17, 21, 8, 30, 18, 28}, 1, now32)}, 81 }, 82 }, 83 { 84 "tukeyAbove(metric*,1.5,5,\"6s\")", 85 map[parser.MetricRequest][]*types.MetricData{ 86 {Metric: "metric*", From: 0, Until: 1}: { 87 types.MakeMetricData("metricA", []float64{20, 20, 20, 20, 21, 17, 20, 20, 10, 29}, 1, now32), 88 types.MakeMetricData("metricB", []float64{20, 20, 20, 20, 20, 18, 21, 19, 20, 20}, 1, now32), 89 types.MakeMetricData("metricC", []float64{20, 20, 20, 20, 19, 19, 21, 17, 23, 20}, 1, now32), 90 types.MakeMetricData("metricD", []float64{20, 20, 20, 20, 18, 20, 22, 14, 26, 20}, 1, now32), 91 types.MakeMetricData("metricE", []float64{20, 20, 20, 20, 17, 21, 8, 30, 18, 28}, 1, now32), 92 }, 93 }, 94 95 `tukeyAbove(metric*, 1.5, 5, "6s")`, 96 map[string][]*types.MetricData{ 97 "metricA": {types.MakeMetricData("metricA", []float64{20, 20, 20, 20, 21, 17, 20, 20, 10, 29}, 1, now32)}, 98 "metricD": {types.MakeMetricData("metricD", []float64{20, 20, 20, 20, 18, 20, 22, 14, 26, 20}, 1, now32)}, 99 "metricE": {types.MakeMetricData("metricE", []float64{20, 20, 20, 20, 17, 21, 8, 30, 18, 28}, 1, now32)}, 100 }, 101 }, 102 { 103 "tukeyBelow(metric*,1.5,5)", 104 map[parser.MetricRequest][]*types.MetricData{ 105 {Metric: "metric*", From: 0, Until: 1}: { 106 types.MakeMetricData("metricA", []float64{21, 17, 20, 20, 10, 29}, 1, now32), 107 types.MakeMetricData("metricB", []float64{20, 18, 21, 19, 20, 20}, 1, now32), 108 types.MakeMetricData("metricC", []float64{19, 19, 21, 17, 23, 20}, 1, now32), 109 types.MakeMetricData("metricD", []float64{18, 20, 22, 14, 26, 20}, 1, now32), 110 types.MakeMetricData("metricE", []float64{17, 21, 8, 30, 18, 28}, 1, now32), 111 }, 112 }, 113 114 "tukeyBelow", 115 map[string][]*types.MetricData{ 116 "metricA": {types.MakeMetricData("metricA", []float64{21, 17, 20, 20, 10, 29}, 1, now32)}, 117 "metricE": {types.MakeMetricData("metricE", []float64{17, 21, 8, 30, 18, 28}, 1, now32)}, 118 }, 119 }, 120 { 121 "tukeyBelow(metric*,1.5,5,-4)", 122 map[parser.MetricRequest][]*types.MetricData{ 123 {Metric: "metric*", From: 0, Until: 1}: { 124 types.MakeMetricData("metricA", []float64{21, 17, 20, 20, 10, 29, 20, 20, 20, 20}, 1, now32), 125 types.MakeMetricData("metricB", []float64{20, 18, 21, 19, 20, 20, 20, 20, 20, 20}, 1, now32), 126 types.MakeMetricData("metricC", []float64{19, 19, 21, 17, 23, 20, 20, 20, 20, 20}, 1, now32), 127 types.MakeMetricData("metricD", []float64{18, 20, 22, 14, 26, 20, 20, 20, 20, 20}, 1, now32), 128 types.MakeMetricData("metricE", []float64{17, 21, 8, 30, 18, 28, 20, 20, 20, 20}, 1, now32), 129 }, 130 }, 131 132 "tukeyBelow", 133 map[string][]*types.MetricData{ 134 "metricA": {types.MakeMetricData("metricA", []float64{21, 17, 20, 20, 10, 29, 20, 20, 20, 20}, 1, now32)}, 135 "metricE": {types.MakeMetricData("metricE", []float64{17, 21, 8, 30, 18, 28, 20, 20, 20, 20}, 1, now32)}, 136 }, 137 }, 138 { 139 "tukeyBelow(metric*,1.5,5,\"-4s\")", 140 map[parser.MetricRequest][]*types.MetricData{ 141 {Metric: "metric*", From: 0, Until: 1}: { 142 types.MakeMetricData("metricA", []float64{21, 17, 20, 20, 10, 29, 20, 20, 20, 20}, 1, now32), 143 types.MakeMetricData("metricB", []float64{20, 18, 21, 19, 20, 20, 20, 20, 20, 20}, 1, now32), 144 types.MakeMetricData("metricC", []float64{19, 19, 21, 17, 23, 20, 20, 20, 20, 20}, 1, now32), 145 types.MakeMetricData("metricD", []float64{18, 20, 22, 14, 26, 20, 20, 20, 20, 20}, 1, now32), 146 types.MakeMetricData("metricE", []float64{17, 21, 8, 30, 18, 28, 20, 20, 20, 20}, 1, now32), 147 }, 148 }, 149 150 "tukeyBelow", 151 map[string][]*types.MetricData{ 152 "metricA": {types.MakeMetricData("metricA", []float64{21, 17, 20, 20, 10, 29, 20, 20, 20, 20}, 1, now32)}, 153 "metricE": {types.MakeMetricData("metricE", []float64{17, 21, 8, 30, 18, 28, 20, 20, 20, 20}, 1, now32)}, 154 }, 155 }, 156 { 157 "tukeyBelow(metric*,3,5)", 158 map[parser.MetricRequest][]*types.MetricData{ 159 {Metric: "metric*", From: 0, Until: 1}: { 160 types.MakeMetricData("metricA", []float64{21, 17, 20, 20, 10, 29}, 1, now32), 161 types.MakeMetricData("metricB", []float64{20, 18, 21, 19, 20, 20}, 1, now32), 162 types.MakeMetricData("metricC", []float64{19, 19, 21, 17, 23, 20}, 1, now32), 163 types.MakeMetricData("metricD", []float64{18, 20, 22, 14, 26, 20}, 1, now32), 164 types.MakeMetricData("metricE", []float64{17, 21, 8, 30, 18, 28}, 1, now32), 165 }, 166 }, 167 168 "tukeyBelow", 169 map[string][]*types.MetricData{ 170 "metricE": {types.MakeMetricData("metricE", []float64{17, 21, 8, 30, 18, 28}, 1, now32)}, 171 }, 172 }, 173 } 174 175 for _, tt := range tests { 176 testName := tt.Target 177 t.Run(testName, func(t *testing.T) { 178 eval := th.EvaluatorFromFunc(md[0].F) 179 th.TestMultiReturnEvalExpr(t, eval, &tt) 180 }) 181 } 182 183 }