VictoriaMetrics/lib/logstorage/index_block_header_test.go
2023-06-19 22:55:12 -07:00

138 lines
3 KiB
Go

package logstorage
import (
"reflect"
"testing"
)
func TestIndexBlockHeaderMarshalUnmarshal(t *testing.T) {
f := func(ih *indexBlockHeader, marshaledLen int) {
t.Helper()
data := ih.marshal(nil)
if len(data) != marshaledLen {
t.Fatalf("unexpected marshaled length of indexBlockHeader; got %d; want %d", len(data), marshaledLen)
}
var ih2 indexBlockHeader
tail, err := ih2.unmarshal(data)
if err != nil {
t.Fatalf("cannot unmarshal indexBlockHeader: %s", err)
}
if len(tail) > 0 {
t.Fatalf("unexpected non-empty tail left after unmarshaling indexBlockHeader: %X", tail)
}
if !reflect.DeepEqual(ih, &ih2) {
t.Fatalf("unexpected unmarshaled indexBlockHeader\ngot\n%v\nwant\n%v", &ih2, ih)
}
}
f(&indexBlockHeader{}, 56)
f(&indexBlockHeader{
streamID: streamID{
tenantID: TenantID{
AccountID: 123,
ProjectID: 456,
},
id: u128{
hi: 214,
lo: 2111,
},
},
minTimestamp: 1234,
maxTimestamp: 898943,
indexBlockOffset: 234,
indexBlockSize: 898,
}, 56)
}
func TestIndexBlockHeaderUnmarshalFailure(t *testing.T) {
f := func(data []byte) {
t.Helper()
dataOrig := append([]byte{}, data...)
var ih indexBlockHeader
tail, err := ih.unmarshal(data)
if err == nil {
t.Fatalf("expecting non-nil error")
}
if string(tail) != string(dataOrig) {
t.Fatalf("unexpected tail; got %q; want %q", tail, dataOrig)
}
}
f(nil)
f([]byte("foo"))
ih := &indexBlockHeader{
streamID: streamID{
tenantID: TenantID{
AccountID: 123,
ProjectID: 456,
},
id: u128{
hi: 214,
lo: 2111,
},
},
minTimestamp: 1234,
maxTimestamp: 898943,
indexBlockOffset: 234,
indexBlockSize: 898,
}
data := ih.marshal(nil)
for len(data) > 0 {
data = data[:len(data)-1]
f(data)
}
}
func TestIndexBlockHeaderReset(t *testing.T) {
ih := &indexBlockHeader{
streamID: streamID{
tenantID: TenantID{
AccountID: 123,
ProjectID: 456,
},
id: u128{
hi: 214,
lo: 2111,
},
},
minTimestamp: 1234,
maxTimestamp: 898943,
indexBlockOffset: 234,
indexBlockSize: 898,
}
ih.reset()
ihZero := &indexBlockHeader{}
if !reflect.DeepEqual(ih, ihZero) {
t.Fatalf("unexpected non-zero indexBlockHeader after reset: %v", ih)
}
}
func TestMarshalUnmarshalIndexBlockHeaders(t *testing.T) {
f := func(ihs []indexBlockHeader, marshaledLen int) {
t.Helper()
var data []byte
for i := range ihs {
data = ihs[i].marshal(data)
}
if len(data) != marshaledLen {
t.Fatalf("unexpected marshaled length for indexBlockHeader entries; got %d; want %d", len(data), marshaledLen)
}
ihs2, err := unmarshalIndexBlockHeaders(nil, data)
if err != nil {
t.Fatalf("cannot unmarshal indexBlockHeader entries: %s", err)
}
if !reflect.DeepEqual(ihs, ihs2) {
t.Fatalf("unexpected indexBlockHeader entries after unmarshaling\ngot\n%v\nwant\n%v", ihs2, ihs)
}
}
f(nil, 0)
f([]indexBlockHeader{{}}, 56)
f([]indexBlockHeader{
{
indexBlockOffset: 234,
indexBlockSize: 5432,
},
{
minTimestamp: -123,
},
}, 112)
}