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  }