github.com/go-graphite/carbonapi@v0.17.0/expr/functions/timeShift/function_test.go (about) 1 package timeShift 2 3 import ( 4 "testing" 5 6 "github.com/go-graphite/carbonapi/expr/interfaces" 7 "github.com/go-graphite/carbonapi/expr/metadata" 8 "github.com/go-graphite/carbonapi/expr/types" 9 "github.com/go-graphite/carbonapi/pkg/parser" 10 th "github.com/go-graphite/carbonapi/tests" 11 ) 12 13 var ( 14 md []interfaces.FunctionMetadata = New("") 15 ) 16 17 func init() { 18 for _, m := range md { 19 metadata.RegisterFunction(m.Name, m.F) 20 } 21 } 22 23 func TestTimeShift(t *testing.T) { 24 var startTime int64 = 86400 25 26 tests := []th.EvalTestItemWithRange{ 27 // TODO(civil): Do not pass `true` resetEnd parameter in 0.15 28 { 29 Target: `timeShift(metric1, "0s", true)`, 30 M: map[parser.MetricRequest][]*types.MetricData{ 31 {Metric: "metric1", From: startTime, Until: startTime + 6}: {types.MakeMetricData("metric1", []float64{0, 1, 2, 3, 4, 5}, 1, startTime)}, 32 }, 33 Want: []*types.MetricData{types.MakeMetricData("timeShift(metric1,'0',true)", 34 []float64{0, 1, 2, 3, 4, 5}, 1, startTime).SetTag("timeshift", "0")}, 35 From: startTime, 36 Until: startTime + 6, 37 }, 38 { 39 Target: `timeShift(metric1, "1s", false)`, 40 M: map[parser.MetricRequest][]*types.MetricData{ 41 {Metric: "metric1", From: startTime - 1, Until: startTime + 5}: {types.MakeMetricData("metric1", []float64{-1, 0, 1, 2, 3, 4}, 1, startTime-1)}, 42 }, 43 Want: []*types.MetricData{types.MakeMetricData("timeShift(metric1,'-1',false)", 44 []float64{-1, 0, 1, 2, 3, 4}, 1, startTime).SetTag("timeshift", "-1")}, 45 From: startTime, 46 Until: startTime + 6, 47 }, 48 { 49 Target: `timeShift(metric1, "1s", true)`, 50 M: map[parser.MetricRequest][]*types.MetricData{ 51 {Metric: "metric1", From: startTime - 1, Until: startTime + 5}: {types.MakeMetricData("metric1", []float64{-1, 0, 1, 2, 3}, 1, startTime-1)}, 52 }, 53 Want: []*types.MetricData{types.MakeMetricData("timeShift(metric1,'-1',true)", 54 []float64{-1, 0, 1, 2, 3}, 1, startTime).SetTag("timeshift", "-1")}, 55 From: startTime, 56 Until: startTime + 6, 57 }, 58 { 59 Target: `timeShift(metric1, "1h", false)`, 60 M: map[parser.MetricRequest][]*types.MetricData{ 61 {Metric: "metric1", From: startTime - 60*60, Until: startTime - 60*60 + 6}: {types.MakeMetricData("metric1", []float64{-1, 0, 1, 2, 3, 4}, 1, startTime-60*60)}, 62 }, 63 Want: []*types.MetricData{types.MakeMetricData("timeShift(metric1,'-3600',false)", 64 []float64{-1, 0, 1, 2, 3, 4}, 1, startTime).SetTag("timeshift", "-3600")}, 65 From: startTime, 66 Until: startTime + 6, 67 }, 68 { 69 Target: `timeShift(metric1, "1h", true)`, 70 M: map[parser.MetricRequest][]*types.MetricData{ 71 {Metric: "metric1", From: startTime - 60*60, Until: startTime - 60*60 + 6}: {types.MakeMetricData("metric1", []float64{-1, 0, 1, 2, 3, 4}, 1, startTime-60*60)}, 72 }, 73 Want: []*types.MetricData{types.MakeMetricData("timeShift(metric1,'-3600',true)", 74 []float64{-1, 0, 1, 2, 3, 4}, 1, startTime).SetTag("timeshift", "-3600")}, 75 From: startTime, 76 Until: startTime + 6, 77 }, 78 { 79 Target: `timeShift(metric1, "1d", false)`, 80 M: map[parser.MetricRequest][]*types.MetricData{ 81 {Metric: "metric1", From: startTime - 86400, Until: startTime - 86400 + 6}: {types.MakeMetricData("metric1", []float64{-1, 0, 1, 2, 3, 4}, 1, startTime-86400)}, 82 }, 83 Want: []*types.MetricData{types.MakeMetricData("timeShift(metric1,'-86400',false)", 84 []float64{-1, 0, 1, 2, 3, 4}, 1, startTime).SetTag("timeshift", "-86400")}, 85 From: startTime, 86 Until: startTime + 6, 87 }, 88 { 89 Target: `timeShift(metric1, "1d", true)`, 90 M: map[parser.MetricRequest][]*types.MetricData{ 91 {Metric: "metric1", From: startTime - 86400, Until: startTime - 86400 + 6}: {types.MakeMetricData("metric1", []float64{-1, 0, 1, 2, 3, 4}, 1, startTime-86400)}, 92 }, 93 Want: []*types.MetricData{types.MakeMetricData("timeShift(metric1,'-86400',true)", 94 []float64{-1, 0, 1, 2, 3, 4}, 1, startTime).SetTag("timeshift", "-86400")}, 95 From: startTime, 96 Until: startTime + 6, 97 }, 98 } 99 100 for _, tt := range tests { 101 testName := tt.Target 102 t.Run(testName, func(t *testing.T) { 103 eval := th.EvaluatorFromFunc(md[0].F) 104 th.TestEvalExprWithRange(t, eval, &tt) 105 }) 106 } 107 }