Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/pkg/dataobj/builder_test.go

93 lines
2.6 KiB

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()
}
}