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