mirror of
https://github.com/grafana/loki.git
synced 2026-03-13 09:33:58 +08:00
Signed-off-by: Robert Fratto <robertfratto@gmail.com> Co-authored-by: George Robinson <george.robinson@grafana.com>
94 lines
2.6 KiB
Go
94 lines
2.6 KiB
Go
package dataobj_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/grafana/loki/v3/pkg/dataobj"
|
|
)
|
|
|
|
func TestBuilder_preserve_section_version(t *testing.T) {
|
|
builder := dataobj.NewBuilder(nil)
|
|
err := builder.Append(fakeSectionBuilder{
|
|
SectionType: dataobj.SectionType{
|
|
Namespace: "github.com/grafana/loki",
|
|
Kind: "custom-section",
|
|
Version: 42,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
obj, closer, err := builder.Flush()
|
|
require.NoError(t, err)
|
|
defer closer.Close()
|
|
|
|
require.Len(t, obj.Sections(), 1, "expected only one section in the object")
|
|
require.Equal(t, uint32(42), obj.Sections()[0].Type.Version, "expected section version to be preserved")
|
|
}
|
|
|
|
func TestBuilder_preserve_extension(t *testing.T) {
|
|
builder := dataobj.NewBuilder(nil)
|
|
err := builder.Append(fakeSectionBuilder{
|
|
SectionType: dataobj.SectionType{Namespace: "github.com/grafana/loki", Kind: "logs"},
|
|
FlushFunc: func(w dataobj.SectionWriter) (n int64, err error) {
|
|
opts := &dataobj.WriteSectionOptions{
|
|
ExtensionData: []byte("test extension"),
|
|
}
|
|
return w.WriteSection(opts, []byte("test data"), []byte("test metadata"))
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
obj, closer, err := builder.Flush()
|
|
require.NoError(t, err)
|
|
defer closer.Close()
|
|
|
|
require.Len(t, obj.Sections(), 1, "expected only one section in the object")
|
|
require.Equal(t, []byte("test extension"), obj.Sections()[0].Reader.ExtensionData())
|
|
}
|
|
|
|
func TestBuilder_preserve_tenant(t *testing.T) {
|
|
builder := dataobj.NewBuilder(nil)
|
|
err := builder.Append(fakeSectionBuilder{
|
|
SectionType: dataobj.SectionType{Namespace: "github.com/grafana/loki", Kind: "logs"},
|
|
FlushFunc: func(w dataobj.SectionWriter) (n int64, err error) {
|
|
opts := &dataobj.WriteSectionOptions{
|
|
Tenant: "my-test-tenant",
|
|
}
|
|
return w.WriteSection(opts, []byte("test data"), []byte("test metadata"))
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
obj, closer, err := builder.Flush()
|
|
require.NoError(t, err)
|
|
defer closer.Close()
|
|
|
|
require.Len(t, obj.Sections(), 1, "expected only one section in the object")
|
|
require.Equal(t, "my-test-tenant", obj.Sections()[0].Tenant)
|
|
}
|
|
|
|
type fakeSectionBuilder struct {
|
|
SectionType dataobj.SectionType
|
|
FlushFunc func(w dataobj.SectionWriter) (n int64, err error)
|
|
ResetFunc func()
|
|
}
|
|
|
|
var _ dataobj.SectionBuilder = (*fakeSectionBuilder)(nil)
|
|
|
|
func (fake fakeSectionBuilder) Type() dataobj.SectionType { return fake.SectionType }
|
|
|
|
func (fake fakeSectionBuilder) Flush(w dataobj.SectionWriter) (n int64, err error) {
|
|
if fake.FlushFunc != nil {
|
|
return fake.FlushFunc(w)
|
|
}
|
|
return w.WriteSection(nil, nil, nil)
|
|
}
|
|
|
|
func (fake fakeSectionBuilder) Reset() {
|
|
if fake.ResetFunc != nil {
|
|
fake.ResetFunc()
|
|
}
|
|
}
|