github.com/go-graphite/carbonapi@v0.17.0/expr/functions/aliasByRedis/function_test.go (about) 1 package aliasByRedis 2 3 import ( 4 "fmt" 5 "os" 6 "runtime" 7 "testing" 8 "time" 9 10 "github.com/alicebob/miniredis/v2" 11 12 "github.com/go-graphite/carbonapi/expr/interfaces" 13 "github.com/go-graphite/carbonapi/expr/metadata" 14 "github.com/go-graphite/carbonapi/expr/types" 15 "github.com/go-graphite/carbonapi/pkg/parser" 16 th "github.com/go-graphite/carbonapi/tests" 17 ) 18 19 var ( 20 md []interfaces.FunctionMetadata 21 r *miniredis.Miniredis 22 ) 23 24 func init() { 25 var err error 26 r, err = miniredis.Run() 27 if err != nil { 28 panic(err) 29 } 30 runtime.SetFinalizer(r, func(r *miniredis.Miniredis) { 31 r.Close() 32 }) 33 r.HSet("alias", "metric1", "new1") 34 r.HSet("alias", "metric2", "new2") 35 36 config, err := os.CreateTemp("", "carbonapi-redis-*.yaml") 37 if err != nil { 38 panic(err) 39 } 40 defer os.Remove(config.Name()) 41 config.WriteString(fmt.Sprintf(` 42 address: %s 43 enabled: true 44 `, 45 r.Addr(), 46 )) 47 config.Close() 48 49 md = New(config.Name()) 50 for _, m := range md { 51 metadata.RegisterFunction(m.Name, m.F) 52 } 53 } 54 55 func TestAliasByRedis(t *testing.T) { 56 now32 := int64(time.Now().Unix()) 57 58 tests := []th.EvalTestItem{ 59 { 60 `aliasByRedis(metric*,"alias")`, 61 map[parser.MetricRequest][]*types.MetricData{ 62 { 63 Metric: "metric*", 64 From: 0, 65 Until: 1, 66 }: { 67 types.MakeMetricData("metric1", []float64{1, 2, 3, 4, 5}, 1, now32), 68 types.MakeMetricData("metric2", []float64{1, 2, 3, 4, 5}, 1, now32), 69 }, 70 }, 71 []*types.MetricData{ 72 types.MakeMetricData("new1", []float64{1, 2, 3, 4, 5}, 1, now32), 73 types.MakeMetricData("new2", []float64{1, 2, 3, 4, 5}, 1, now32), 74 }, 75 }, 76 { 77 `aliasByRedis(test.metric2,"alias")`, 78 map[parser.MetricRequest][]*types.MetricData{ 79 { 80 Metric: "test.metric2", 81 From: 0, 82 Until: 1, 83 }: { 84 types.MakeMetricData( 85 "test.metric2", []float64{1, 2, 3, 4, 5}, 1, now32), 86 }, 87 }, 88 []*types.MetricData{ 89 types.MakeMetricData("new2", []float64{1, 2, 3, 4, 5}, 1, now32), 90 }, 91 }, 92 { 93 `aliasByRedis(*,"alias")`, 94 map[parser.MetricRequest][]*types.MetricData{ 95 { 96 Metric: "*", 97 From: 0, 98 Until: 1, 99 }: { 100 types.MakeMetricData("test.metric2;tag1=value1", []float64{1, 2, 3, 4, 5}, 1, now32), 101 }, 102 }, 103 []*types.MetricData{ 104 types.MakeMetricData("new2", []float64{1, 2, 3, 4, 5}, 1, now32).SetTag("tag1", "value1"), 105 }, 106 }, 107 { 108 // non-existing alias 109 `aliasByRedis(*,"alias")`, 110 map[parser.MetricRequest][]*types.MetricData{ 111 { 112 Metric: "*", 113 From: 0, 114 Until: 1, 115 }: { 116 types.MakeMetricData("test.metric3", []float64{1, 2, 3, 4, 5}, 1, now32), 117 types.MakeMetricData("test.metric3;tag1=value1", []float64{1, 2, 3, 4, 5}, 1, now32), 118 }, 119 }, 120 []*types.MetricData{ 121 types.MakeMetricData("test.metric3", []float64{1, 2, 3, 4, 5}, 1, now32), 122 types.MakeMetricData("test.metric3;tag1=value1", []float64{1, 2, 3, 4, 5}, 1, now32), 123 }, 124 }, 125 { 126 // save full path 127 `aliasByRedis(test.metric2,"alias", true)`, 128 map[parser.MetricRequest][]*types.MetricData{ 129 { 130 Metric: "test.metric2", 131 From: 0, 132 Until: 1, 133 }: { 134 types.MakeMetricData("test.metric2", []float64{1, 2, 3, 4, 5}, 1, now32), 135 }, 136 }, 137 []*types.MetricData{types.MakeMetricData("test.new2", 138 []float64{1, 2, 3, 4, 5}, 1, now32)}, 139 }, 140 } 141 142 for _, tt := range tests { 143 testName := tt.Target 144 t.Run(testName, func(t *testing.T) { 145 eval := th.EvaluatorFromFunc(md[0].F) 146 th.TestEvalExpr(t, eval, &tt) 147 }) 148 } 149 }