github.com/go-graphite/carbonapi@v0.17.0/expr/functions/cactiStyle/function_test.go (about) 1 package cactiStyle 2 3 import ( 4 "math" 5 "testing" 6 "time" 7 8 "github.com/go-graphite/carbonapi/expr/interfaces" 9 "github.com/go-graphite/carbonapi/expr/metadata" 10 "github.com/go-graphite/carbonapi/expr/types" 11 "github.com/go-graphite/carbonapi/pkg/parser" 12 th "github.com/go-graphite/carbonapi/tests" 13 ) 14 15 var ( 16 md []interfaces.FunctionMetadata = New("") 17 ) 18 19 func init() { 20 for _, m := range md { 21 metadata.RegisterFunction(m.Name, m.F) 22 } 23 } 24 25 func TestCactiStyle(t *testing.T) { 26 now32 := int64(time.Now().Unix()) 27 28 tests := []th.EvalTestItem{ 29 { 30 "cactiStyle(metric1,\"si\")", 31 map[parser.MetricRequest][]*types.MetricData{ 32 {Metric: "metric1", From: 0, Until: 1}: { 33 types.MakeMetricData("metric1", 34 []float64{math.NaN(), 20531.733333333334, 20196.4, 17925.333333333332, 20950.4, 35168.13333333333, 19965.866666666665, 24556.4, 22266.4, 58039.86666666667}, 1, now32), 35 }, 36 }, 37 []*types.MetricData{ 38 types.MakeMetricData("metric1 Current:58.04k Max:58.04k Min:17.93k", 39 []float64{math.NaN(), 20531.733333333334, 20196.4, 17925.333333333332, 20950.4, 35168.13333333333, 19965.866666666665, 24556.4, 22266.4, 58039.86666666667}, 1, now32). 40 SetNameTag("metric1"), 41 }, 42 }, 43 { 44 "cactiStyle(metric1,\"si\")", 45 map[parser.MetricRequest][]*types.MetricData{ 46 {Metric: "metric1", From: 0, Until: 1}: { 47 types.MakeMetricData("metric1", 48 []float64{1.432729, 1.434207, 1.404762, 1.414609, 1.399159, 1.411343, 1.406217, 1.407123, 1.392078, math.NaN()}, 1, now32).SetNameTag("metric1"), 49 }, 50 }, 51 []*types.MetricData{ 52 types.MakeMetricData("metric1 Current:1.39 Max:1.43 Min:1.39", 53 []float64{1.432729, 1.434207, 1.404762, 1.414609, 1.399159, 1.411343, 1.406217, 1.407123, 1.392078, math.NaN()}, 1, now32).SetNameTag("metric1"), 54 }, 55 }, 56 { 57 "cactiStyle(metric1,\"si\",\"carrot\")", 58 map[parser.MetricRequest][]*types.MetricData{ 59 {Metric: "metric1", From: 0, Until: 1}: { 60 types.MakeMetricData("metric1", 61 []float64{1.432729, 1.434207, 1.404762, 1.414609, 1.399159, 1.411343, 1.406217, 1.407123, 1.392078, math.NaN()}, 1, now32).SetNameTag("metric1"), 62 }, 63 }, 64 []*types.MetricData{ 65 types.MakeMetricData("metric1 Current:1.39 carrot Max:1.43 carrot Min:1.39 carrot", 66 []float64{1.432729, 1.434207, 1.404762, 1.414609, 1.399159, 1.411343, 1.406217, 1.407123, 1.392078, math.NaN()}, 1, now32).SetNameTag("metric1"), 67 }, 68 }, 69 { 70 "cactiStyle(metric1,\"si\")", 71 map[parser.MetricRequest][]*types.MetricData{ 72 {Metric: "metric1", From: 0, Until: 1}: { 73 types.MakeMetricData("metric1", 74 []float64{math.NaN(), 88364212.53333333, 79008410.93333334, 80312920.0, 69860465.2, 83876830.0, 80399148.8, 90481297.46666667, 79628113.73333333, math.NaN()}, 1, now32), 75 }, 76 }, 77 []*types.MetricData{ 78 types.MakeMetricData("metric1 Current:79.63M Max:90.48M Min:69.86M", 79 []float64{math.NaN(), 88364212.53333333, 79008410.93333334, 80312920.0, 69860465.2, 83876830.0, 80399148.8, 90481297.46666667, 79628113.73333333, math.NaN()}, 1, now32). 80 SetNameTag("metric1"), 81 }, 82 }, 83 { 84 "cactiStyle(metric1,\"si\")", 85 map[parser.MetricRequest][]*types.MetricData{ 86 {Metric: "metric1", From: 0, Until: 1}: { 87 types.MakeMetricData("metric1", 88 []float64{1000}, 1, now32), 89 }, 90 }, 91 []*types.MetricData{ 92 types.MakeMetricData("metric1 Current:1.00k Max:1.00k Min:1.00k", []float64{1000}, 1, now32).SetNameTag("metric1"), 93 }, 94 }, 95 { 96 "cactiStyle(metric1)", 97 map[parser.MetricRequest][]*types.MetricData{ 98 {Metric: "metric1", From: 0, Until: 1}: { 99 types.MakeMetricData("metric1", 100 []float64{1000}, 1, now32), 101 }, 102 }, 103 []*types.MetricData{ 104 types.MakeMetricData("metric1 Current:1000 Max:1000 Min:1000", []float64{1000}, 1, now32).SetNameTag("metric1"), 105 }, 106 }, 107 { 108 "cactiStyle(metric1,units=\"apples\")", 109 map[parser.MetricRequest][]*types.MetricData{ 110 {Metric: "metric1", From: 0, Until: 1}: { 111 types.MakeMetricData("metric1", 112 []float64{10}, 1, now32), 113 }, 114 }, 115 []*types.MetricData{ 116 types.MakeMetricData("metric1 Current:10 apples Max:10 apples Min:10 apples", []float64{10}, 1, now32).SetNameTag("metric1"), 117 }, 118 }, 119 { 120 "cactiStyle(metric1,\"si\")", 121 map[parser.MetricRequest][]*types.MetricData{ 122 {Metric: "metric1", From: 0, Until: 1}: { 123 types.MakeMetricData("metric1", 124 []float64{240.0, 240.0, 240.0, 240.0, 240.0, 240.0, 240.0, 240.0, 240.0, math.NaN()}, 1, now32), 125 }, 126 }, 127 []*types.MetricData{ 128 types.MakeMetricData("metric1 Current:240.00 Max:240.00 Min:240.00", 129 []float64{240.0, 240.0, 240.0, 240.0, 240.0, 240.0, 240.0, 240.0, 240.0, math.NaN()}, 1, now32).SetNameTag("metric1"), 130 }, 131 }, 132 { 133 "cactiStyle(metric1,\"si\")", 134 map[parser.MetricRequest][]*types.MetricData{ 135 {Metric: "metric1", From: 0, Until: 1}: { 136 types.MakeMetricData("metric1", 137 []float64{-1.0, -2.0, -1.0, -3.0, -1.0, -1.0, -0.0, -0.0, -0.0}, 1, now32), 138 }, 139 }, 140 []*types.MetricData{ 141 types.MakeMetricData("metric1 Current:0.00 Max:0.00 Min:-3.00", 142 []float64{-1.0, -2.0, -1.0, -3.0, -1.0, -1.0, -0.0, -0.0, -0.0}, 1, now32).SetNameTag("metric1"), 143 }, 144 }, 145 { 146 "cactiStyle(metric1,\"si\")", 147 map[parser.MetricRequest][]*types.MetricData{ 148 {Metric: "metric1", From: 0, Until: 1}: { 149 types.MakeMetricData("metric1", 150 []float64{math.NaN(), math.NaN(), math.NaN(), math.NaN(), math.NaN()}, 1, now32), 151 }, 152 }, 153 []*types.MetricData{ 154 types.MakeMetricData("metric1 Current:NaN Max:NaN Min:NaN", 155 []float64{math.NaN(), math.NaN(), math.NaN(), math.NaN(), math.NaN()}, 1, now32).SetNameTag("metric1"), 156 }, 157 }, 158 } 159 160 for _, tt := range tests { 161 testName := tt.Target 162 t.Run(testName, func(t *testing.T) { 163 eval := th.EvaluatorFromFunc(md[0].F) 164 th.TestEvalExpr(t, eval, &tt) 165 }) 166 } 167 168 }