@@ -47,10 +47,175 @@ func TestRW2TypesCompatible(t *testing.T) {
47
47
}
48
48
49
49
func TestRW2Unmarshal (t * testing.T ) {
50
- syms := test .NewSymbolTableBuilder (nil )
50
+ t .Run ("rw2 compatible produces expected WriteRequest" , func (t * testing.T ) {
51
+ syms := test .NewSymbolTableBuilder (nil )
52
+ // Create a new WriteRequest with some sample data.
53
+ writeRequest := makeTestRW2WriteRequest (syms )
54
+ data , err := writeRequest .Marshal ()
55
+ require .NoError (t , err )
51
56
52
- // Create a new WriteRequest with some sample data.
53
- writeRequest := & rw2.Request {
57
+ // Unmarshal the data back into Mimir's WriteRequest.
58
+ received := PreallocWriteRequest {}
59
+ received .UnmarshalFromRW2 = true
60
+ err = received .Unmarshal (data )
61
+ require .NoError (t , err )
62
+
63
+ expected := & PreallocWriteRequest {
64
+ WriteRequest : WriteRequest {
65
+ Timeseries : []PreallocTimeseries {
66
+ {
67
+ TimeSeries : & TimeSeries {
68
+ Labels : []LabelAdapter {
69
+ {
70
+ Name : "__name__" ,
71
+ Value : "test_metric_total" ,
72
+ },
73
+ {
74
+ Name : "job" ,
75
+ Value : "test_job" ,
76
+ },
77
+ },
78
+ Samples : []Sample {
79
+ {
80
+ Value : 123.456 ,
81
+ TimestampMs : 1234567890 ,
82
+ },
83
+ },
84
+ Exemplars : []Exemplar {
85
+ {
86
+ Value : 123.456 ,
87
+ TimestampMs : 1234567890 ,
88
+ Labels : []LabelAdapter {
89
+ {
90
+ Name : "__name__" ,
91
+ Value : "test_metric_total" ,
92
+ },
93
+ {
94
+ Name : "traceID" ,
95
+ Value : "1234567890abcdef" ,
96
+ },
97
+ },
98
+ },
99
+ },
100
+ },
101
+ },
102
+ },
103
+ Metadata : []* MetricMetadata {
104
+ {
105
+ MetricFamilyName : "test_metric_total" ,
106
+ Type : COUNTER ,
107
+ Help : "test_metric_help" ,
108
+ Unit : "test_metric_unit" ,
109
+ },
110
+ },
111
+ unmarshalFromRW2 : true ,
112
+ },
113
+ UnmarshalFromRW2 : true ,
114
+ }
115
+
116
+ // Check that the unmarshalled data matches the original data.
117
+ require .Equal (t , expected , & received )
118
+ })
119
+
120
+ t .Run ("rw2 with offset produces expected WriteRequest" , func (t * testing.T ) {
121
+ syms := test .NewSymbolTableBuilderWithOffset (nil , 256 )
122
+ // Create a new WriteRequest with some sample data.
123
+ writeRequest := makeTestRW2WriteRequest (syms )
124
+ data , err := writeRequest .Marshal ()
125
+ require .NoError (t , err )
126
+
127
+ // Unmarshal the data back into Mimir's WriteRequest.
128
+ received := PreallocWriteRequest {}
129
+ received .UnmarshalFromRW2 = true
130
+ received .RW2SymbolOffset = 256
131
+ err = received .Unmarshal (data )
132
+ require .NoError (t , err )
133
+
134
+ expected := & PreallocWriteRequest {
135
+ WriteRequest : WriteRequest {
136
+ Timeseries : []PreallocTimeseries {
137
+ {
138
+ TimeSeries : & TimeSeries {
139
+ Labels : []LabelAdapter {
140
+ {
141
+ Name : "__name__" ,
142
+ Value : "test_metric_total" ,
143
+ },
144
+ {
145
+ Name : "job" ,
146
+ Value : "test_job" ,
147
+ },
148
+ },
149
+ Samples : []Sample {
150
+ {
151
+ Value : 123.456 ,
152
+ TimestampMs : 1234567890 ,
153
+ },
154
+ },
155
+ Exemplars : []Exemplar {
156
+ {
157
+ Value : 123.456 ,
158
+ TimestampMs : 1234567890 ,
159
+ Labels : []LabelAdapter {
160
+ {
161
+ Name : "__name__" ,
162
+ Value : "test_metric_total" ,
163
+ },
164
+ {
165
+ Name : "traceID" ,
166
+ Value : "1234567890abcdef" ,
167
+ },
168
+ },
169
+ },
170
+ },
171
+ },
172
+ },
173
+ },
174
+ Metadata : []* MetricMetadata {
175
+ {
176
+ MetricFamilyName : "test_metric_total" ,
177
+ Type : COUNTER ,
178
+ Help : "test_metric_help" ,
179
+ Unit : "test_metric_unit" ,
180
+ },
181
+ },
182
+ unmarshalFromRW2 : true ,
183
+ rw2symbols : rw2PagedSymbols {offset : 256 },
184
+ },
185
+ UnmarshalFromRW2 : true ,
186
+ RW2SymbolOffset : 256 ,
187
+ }
188
+
189
+ // Check that the unmarshalled data matches the original data.
190
+ require .Equal (t , expected , & received )
191
+ })
192
+
193
+ t .Run ("wrong offset fails to unmarshal" , func (t * testing.T ) {
194
+ syms := test .NewSymbolTableBuilderWithOffset (nil , 256 )
195
+ // Create a new WriteRequest with some sample data.
196
+ writeRequest := makeTestRW2WriteRequest (syms )
197
+ data , err := writeRequest .Marshal ()
198
+ require .NoError (t , err )
199
+
200
+ // Unmarshal the data back into Mimir's WriteRequest.
201
+ received := PreallocWriteRequest {}
202
+ received .UnmarshalFromRW2 = true
203
+ received .RW2SymbolOffset = 257
204
+ err = received .Unmarshal (data )
205
+ require .ErrorContains (t , err , "invalid" )
206
+
207
+ // Unmarshal the data back into Mimir's WriteRequest.
208
+ received = PreallocWriteRequest {}
209
+ received .UnmarshalFromRW2 = true
210
+ received .RW2SymbolOffset = 255
211
+ err = received .Unmarshal (data )
212
+
213
+ require .ErrorContains (t , err , "invalid" )
214
+ })
215
+ }
216
+
217
+ func makeTestRW2WriteRequest (syms * test.SymbolTableBuilder ) * rw2.Request {
218
+ req := & rw2.Request {
54
219
Timeseries : []rw2.TimeSeries {
55
220
{
56
221
LabelsRefs : []uint32 {syms .GetSymbol ("__name__" ), syms .GetSymbol ("test_metric_total" ), syms .GetSymbol ("job" ), syms .GetSymbol ("test_job" )},
@@ -75,69 +240,6 @@ func TestRW2Unmarshal(t *testing.T) {
75
240
},
76
241
},
77
242
}
78
- writeRequest .Symbols = syms .GetSymbols ()
79
- data , err := writeRequest .Marshal ()
80
- require .NoError (t , err )
81
-
82
- // Unmarshal the data back into Mimir's WriteRequest.
83
- received := PreallocWriteRequest {}
84
- received .UnmarshalFromRW2 = true
85
- err = received .Unmarshal (data )
86
- require .NoError (t , err )
87
-
88
- expected := & PreallocWriteRequest {
89
- WriteRequest : WriteRequest {
90
- Timeseries : []PreallocTimeseries {
91
- {
92
- TimeSeries : & TimeSeries {
93
- Labels : []LabelAdapter {
94
- {
95
- Name : "__name__" ,
96
- Value : "test_metric_total" ,
97
- },
98
- {
99
- Name : "job" ,
100
- Value : "test_job" ,
101
- },
102
- },
103
- Samples : []Sample {
104
- {
105
- Value : 123.456 ,
106
- TimestampMs : 1234567890 ,
107
- },
108
- },
109
- Exemplars : []Exemplar {
110
- {
111
- Value : 123.456 ,
112
- TimestampMs : 1234567890 ,
113
- Labels : []LabelAdapter {
114
- {
115
- Name : "__name__" ,
116
- Value : "test_metric_total" ,
117
- },
118
- {
119
- Name : "traceID" ,
120
- Value : "1234567890abcdef" ,
121
- },
122
- },
123
- },
124
- },
125
- },
126
- },
127
- },
128
- Metadata : []* MetricMetadata {
129
- {
130
- MetricFamilyName : "test_metric_total" ,
131
- Type : COUNTER ,
132
- Help : "test_metric_help" ,
133
- Unit : "test_metric_unit" ,
134
- },
135
- },
136
- unmarshalFromRW2 : true ,
137
- },
138
- UnmarshalFromRW2 : true ,
139
- }
140
-
141
- // Check that the unmarshalled data matches the original data.
142
- require .Equal (t , expected , & received )
243
+ req .Symbols = syms .GetSymbols ()
244
+ return req
143
245
}
0 commit comments