github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/pkg/querier/queryrange/value_test.go (about)

     1  package queryrange
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/pkg/errors"
     8  	"github.com/prometheus/prometheus/pkg/labels"
     9  	"github.com/prometheus/prometheus/promql"
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/cortexproject/cortex/pkg/cortexpb"
    13  )
    14  
    15  func TestFromValue(t *testing.T) {
    16  	var testExpr = []struct {
    17  		input    *promql.Result
    18  		err      bool
    19  		expected []SampleStream
    20  	}{
    21  		// string (errors)
    22  		{
    23  			input: &promql.Result{Value: promql.String{T: 1, V: "hi"}},
    24  			err:   true,
    25  		},
    26  		{
    27  			input: &promql.Result{Err: errors.New("foo")},
    28  			err:   true,
    29  		},
    30  		// Scalar
    31  		{
    32  			input: &promql.Result{Value: promql.Scalar{T: 1, V: 1}},
    33  			err:   false,
    34  			expected: []SampleStream{
    35  				{
    36  					Samples: []cortexpb.Sample{
    37  						{
    38  							Value:       1,
    39  							TimestampMs: 1,
    40  						},
    41  					},
    42  				},
    43  			},
    44  		},
    45  		// Vector
    46  		{
    47  			input: &promql.Result{
    48  				Value: promql.Vector{
    49  					promql.Sample{
    50  						Point: promql.Point{T: 1, V: 1},
    51  						Metric: labels.Labels{
    52  							{Name: "a", Value: "a1"},
    53  							{Name: "b", Value: "b1"},
    54  						},
    55  					},
    56  					promql.Sample{
    57  						Point: promql.Point{T: 2, V: 2},
    58  						Metric: labels.Labels{
    59  							{Name: "a", Value: "a2"},
    60  							{Name: "b", Value: "b2"},
    61  						},
    62  					},
    63  				},
    64  			},
    65  			err: false,
    66  			expected: []SampleStream{
    67  				{
    68  					Labels: []cortexpb.LabelAdapter{
    69  						{Name: "a", Value: "a1"},
    70  						{Name: "b", Value: "b1"},
    71  					},
    72  					Samples: []cortexpb.Sample{
    73  						{
    74  							Value:       1,
    75  							TimestampMs: 1,
    76  						},
    77  					},
    78  				},
    79  				{
    80  					Labels: []cortexpb.LabelAdapter{
    81  						{Name: "a", Value: "a2"},
    82  						{Name: "b", Value: "b2"},
    83  					},
    84  					Samples: []cortexpb.Sample{
    85  						{
    86  							Value:       2,
    87  							TimestampMs: 2,
    88  						},
    89  					},
    90  				},
    91  			},
    92  		},
    93  		// Matrix
    94  		{
    95  			input: &promql.Result{
    96  				Value: promql.Matrix{
    97  					{
    98  						Metric: labels.Labels{
    99  							{Name: "a", Value: "a1"},
   100  							{Name: "b", Value: "b1"},
   101  						},
   102  						Points: []promql.Point{
   103  							{T: 1, V: 1},
   104  							{T: 2, V: 2},
   105  						},
   106  					},
   107  					{
   108  						Metric: labels.Labels{
   109  							{Name: "a", Value: "a2"},
   110  							{Name: "b", Value: "b2"},
   111  						},
   112  						Points: []promql.Point{
   113  							{T: 1, V: 8},
   114  							{T: 2, V: 9},
   115  						},
   116  					},
   117  				},
   118  			},
   119  			err: false,
   120  			expected: []SampleStream{
   121  				{
   122  					Labels: []cortexpb.LabelAdapter{
   123  						{Name: "a", Value: "a1"},
   124  						{Name: "b", Value: "b1"},
   125  					},
   126  					Samples: []cortexpb.Sample{
   127  						{
   128  							Value:       1,
   129  							TimestampMs: 1,
   130  						},
   131  						{
   132  							Value:       2,
   133  							TimestampMs: 2,
   134  						},
   135  					},
   136  				},
   137  				{
   138  					Labels: []cortexpb.LabelAdapter{
   139  						{Name: "a", Value: "a2"},
   140  						{Name: "b", Value: "b2"},
   141  					},
   142  					Samples: []cortexpb.Sample{
   143  						{
   144  							Value:       8,
   145  							TimestampMs: 1,
   146  						},
   147  						{
   148  							Value:       9,
   149  							TimestampMs: 2,
   150  						},
   151  					},
   152  				},
   153  			},
   154  		},
   155  	}
   156  
   157  	for i, c := range testExpr {
   158  		t.Run(fmt.Sprintf("[%d]", i), func(t *testing.T) {
   159  			result, err := FromResult(c.input)
   160  			if c.err {
   161  				require.NotNil(t, err)
   162  			} else {
   163  				require.Nil(t, err)
   164  				require.Equal(t, c.expected, result)
   165  			}
   166  		})
   167  	}
   168  }