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  }