MCPcopy
hub / github.com/grafana/tempo / TestDedicatedColumnsMarshalRoundTrip

Function TestDedicatedColumnsMarshalRoundTrip

tempodb/backend/block_meta_test.go:347–413  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

345}
346
347func TestDedicatedColumnsMarshalRoundTrip(t *testing.T) {
348 roundTripTestCases := []struct {
349 name string
350 skipProto bool
351 cols DedicatedColumns
352 }{
353 {
354 name: "null",
355 },
356 {
357 name: "empty",
358 cols: DedicatedColumns{},
359 skipProto: true,
360 },
361 {
362 name: "single",
363 cols: DedicatedColumns{
364 {Scope: DedicatedColumnScopeSpan, Name: "test.span.1", Type: DedicatedColumnTypeString},
365 },
366 },
367 {
368 name: "multiple",
369 cols: DedicatedColumns{
370 {Scope: DedicatedColumnScopeResource, Name: "test.res.1", Type: DedicatedColumnTypeString},
371 {Scope: DedicatedColumnScopeSpan, Name: "test.span.1", Type: DedicatedColumnTypeString},
372 {Scope: DedicatedColumnScopeSpan, Name: "test.span.2", Type: DedicatedColumnTypeString},
373 {Scope: DedicatedColumnScopeSpan, Name: "test.span.3", Type: DedicatedColumnTypeInt},
374 {Scope: DedicatedColumnScopeSpan, Name: "test.span.4", Type: DedicatedColumnTypeString, Options: DedicatedColumnOptions{DedicatedColumnOptionArray}},
375 {Scope: DedicatedColumnScopeSpan, Name: "test.span.5", Type: DedicatedColumnTypeString, Options: DedicatedColumnOptions{DedicatedColumnOptionArray, DedicatedColumnOptionBlob}},
376 },
377 },
378 }
379
380 t.Run("json", func(t *testing.T) {
381 for _, tc := range roundTripTestCases {
382 t.Run(tc.name, func(t *testing.T) {
383 data, err := json.Marshal(tc.cols)
384 require.NoError(t, err)
385
386 var cols DedicatedColumns
387 err = json.Unmarshal(data, &cols)
388 require.NoError(t, err)
389 assert.Equal(t, tc.cols, cols)
390 })
391 }
392 })
393
394 t.Run("proto", func(t *testing.T) {
395 for _, tc := range roundTripTestCases {
396 if tc.skipProto {
397 continue
398 }
399 t.Run(tc.name, func(t *testing.T) {
400 // DedicatedColumns does not implement proto.Message, needs to be wrapped in BlockMeta
401 bm1 := BlockMeta{DedicatedColumns: tc.cols}
402
403 data, err := proto.Marshal(&bm1)
404 require.NoError(t, err)

Callers

nothing calls this directly

Calls 4

MarshalMethod · 0.65
UnmarshalMethod · 0.65
RunMethod · 0.45
EqualMethod · 0.45

Tested by

no test coverage detected