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 }