github.com/go-graphite/carbonapi@v0.17.0/expr/functions/alias/function_test.go (about) 1 package alias 2 3 import ( 4 "context" 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 md := New("") 21 for _, m := range md { 22 metadata.RegisterFunction(m.Name, m.F) 23 } 24 } 25 26 func TestAlias(t *testing.T) { 27 now32 := int64(time.Now().Unix()) 28 29 tests := []th.EvalTestItem{ 30 { 31 "alias(metric1,\"renamed\")", 32 map[parser.MetricRequest][]*types.MetricData{ 33 { 34 Metric: "metric1", 35 From: 0, 36 Until: 1, 37 }: { 38 types.MakeMetricData( 39 "metric1", 40 []float64{1, 2, 3, 4, 5}, 41 1, 42 now32, 43 ), 44 }, 45 }, 46 []*types.MetricData{types.MakeMetricData("renamed", 47 []float64{1, 2, 3, 4, 5}, 1, now32).SetNameTag("metric1")}, 48 }, 49 { 50 "alias(metric2, \"some format ${expr} str ${expr} and another ${expr\", true)", 51 map[parser.MetricRequest][]*types.MetricData{ 52 { 53 Metric: "metric2", 54 From: 0, 55 Until: 1, 56 }: { 57 types.MakeMetricData( 58 "metric2", 59 []float64{1, 2, 3, 4, 5}, 60 1, 61 now32, 62 ), 63 }, 64 }, 65 []*types.MetricData{ 66 types.MakeMetricData( 67 "some format metric2 str metric2 and another ${expr", 68 []float64{1, 2, 3, 4, 5}, 69 1, 70 now32, 71 ).SetNameTag("metric2"), 72 }, 73 }, 74 { 75 "alias(metric2, 'Метрика 2')", 76 map[parser.MetricRequest][]*types.MetricData{ 77 { 78 Metric: "metric2", 79 From: 0, 80 Until: 1, 81 }: { 82 types.MakeMetricData( 83 "metric2", 84 []float64{1, 2, 3, 4, 5}, 85 1, 86 now32, 87 ), 88 }, 89 }, 90 []*types.MetricData{ 91 types.MakeMetricData( 92 "Метрика 2", 93 []float64{1, 2, 3, 4, 5}, 94 1, 95 now32, 96 ).SetNameTag("metric2"), 97 }, 98 }, 99 } 100 101 for _, tt := range tests { 102 testName := tt.Target 103 t.Run(testName, func(t *testing.T) { 104 eval := th.EvaluatorFromFunc(md[0].F) 105 th.TestEvalExpr(t, eval, &tt) 106 }) 107 } 108 } 109 110 func BenchmarkAverageAlias(b *testing.B) { 111 target := `alias(metric1, "renamed")` 112 metrics := map[parser.MetricRequest][]*types.MetricData{ 113 {Metric: "metric1", From: 0, Until: 1}: {types.MakeMetricData("metric1", []float64{1, 2, 3, 4, 5}, 1, 1)}, 114 {Metric: "metric2", From: 0, Until: 1}: {types.MakeMetricData("metric2", []float64{1, 2, 3, 4, 5}, 1, 1)}, 115 } 116 117 eval := th.EvaluatorFromFunc(md[0].F) 118 exp, _, err := parser.ParseExpr(target) 119 if err != nil { 120 b.Fatalf("failed to parse %s: %+v", target, err) 121 } 122 123 b.ResetTimer() 124 for n := 0; n < b.N; n++ { 125 g, err := eval.Eval(context.Background(), exp, 0, 1, metrics) 126 if err != nil { 127 b.Fatalf("failed to eval %s: %+v", target, err) 128 } 129 _ = g 130 } 131 }