2023-06-20 05:55:12 +00:00
|
|
|
package logstorage
|
|
|
|
|
|
|
|
import (
|
|
|
|
"reflect"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
2024-06-20 01:08:07 +00:00
|
|
|
func TestStreamIDMarshalUnmarshalString(t *testing.T) {
|
2024-09-24 16:31:21 +00:00
|
|
|
f := func(sid *streamID, resultExpected string) {
|
2024-06-20 01:08:07 +00:00
|
|
|
t.Helper()
|
|
|
|
|
2024-09-24 16:31:21 +00:00
|
|
|
result := string(sid.marshalString(nil))
|
|
|
|
|
|
|
|
if result != resultExpected {
|
|
|
|
t.Fatalf("unexpected result\ngot\n%q\nwant\n%q", result, resultExpected)
|
|
|
|
}
|
2024-06-20 01:08:07 +00:00
|
|
|
|
|
|
|
var sid2 streamID
|
2024-09-24 16:31:21 +00:00
|
|
|
if !sid2.tryUnmarshalFromString(result) {
|
|
|
|
t.Fatalf("cannot unmarshal streamID from %q", result)
|
2024-06-20 01:08:07 +00:00
|
|
|
}
|
|
|
|
|
2024-09-24 16:31:21 +00:00
|
|
|
result2 := string(sid2.marshalString(nil))
|
|
|
|
if result != result2 {
|
|
|
|
t.Fatalf("unexpected marshaled streamID; got %s; want %s", result2, result)
|
2024-06-20 01:08:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-09-24 16:31:21 +00:00
|
|
|
f(&streamID{}, "000000000000000000000000000000000000000000000000")
|
2024-06-20 01:08:07 +00:00
|
|
|
f(&streamID{
|
|
|
|
tenantID: TenantID{
|
|
|
|
AccountID: 123,
|
|
|
|
ProjectID: 456,
|
|
|
|
},
|
|
|
|
id: u128{
|
|
|
|
lo: 89,
|
|
|
|
hi: 344334,
|
|
|
|
},
|
2024-09-24 16:31:21 +00:00
|
|
|
}, "0000007b000001c8000000000005410e0000000000000059")
|
2024-06-20 01:08:07 +00:00
|
|
|
}
|
|
|
|
|
2023-06-20 05:55:12 +00:00
|
|
|
func TestStreamIDMarshalUnmarshal(t *testing.T) {
|
|
|
|
f := func(sid *streamID, marshaledLen int) {
|
|
|
|
t.Helper()
|
|
|
|
data := sid.marshal(nil)
|
|
|
|
if len(data) != marshaledLen {
|
|
|
|
t.Fatalf("unexpected length of marshaled streamID; got %d; want %d", len(data), marshaledLen)
|
|
|
|
}
|
|
|
|
var sid2 streamID
|
|
|
|
tail, err := sid2.unmarshal(data)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("unexpected error on unmarshal(%s): %s", sid, err)
|
|
|
|
}
|
|
|
|
if len(tail) != 0 {
|
|
|
|
t.Fatalf("unexpected non-empty tail on unmarshal(%s): %X", sid, tail)
|
|
|
|
}
|
|
|
|
if !reflect.DeepEqual(sid, &sid2) {
|
|
|
|
t.Fatalf("unexpected result on unmarshal; got %s; want %s", &sid2, sid)
|
|
|
|
}
|
|
|
|
s1 := sid.String()
|
|
|
|
s2 := sid2.String()
|
|
|
|
if s1 != s2 {
|
|
|
|
t.Fatalf("unexpected string result on unmarshal; got %s; want %s", s2, s1)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
f(&streamID{}, 24)
|
|
|
|
f(&streamID{
|
|
|
|
tenantID: TenantID{
|
|
|
|
AccountID: 123,
|
|
|
|
ProjectID: 456,
|
|
|
|
},
|
|
|
|
id: u128{
|
|
|
|
lo: 89,
|
|
|
|
hi: 344334,
|
|
|
|
},
|
|
|
|
}, 24)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestStreamIDUnmarshalFailure(t *testing.T) {
|
|
|
|
f := func(data []byte) {
|
|
|
|
t.Helper()
|
|
|
|
dataOrig := append([]byte{}, data...)
|
|
|
|
var sid streamID
|
|
|
|
tail, err := sid.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"))
|
|
|
|
f([]byte("1234567890"))
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestStreamIDLessEqual(t *testing.T) {
|
|
|
|
// compare equal values
|
|
|
|
sid1 := &streamID{}
|
|
|
|
sid2 := &streamID{}
|
|
|
|
if sid1.less(sid2) {
|
|
|
|
t.Fatalf("less for equal values must return false")
|
|
|
|
}
|
|
|
|
if sid2.less(sid1) {
|
|
|
|
t.Fatalf("less for equal values must return false")
|
|
|
|
}
|
|
|
|
if !sid1.equal(sid2) {
|
|
|
|
t.Fatalf("unexpected equal(%s, %s) result; got false; want true", sid1, sid2)
|
|
|
|
}
|
|
|
|
if !sid2.equal(sid1) {
|
|
|
|
t.Fatalf("unexpected equal(%s, %s) result; got false; want true", sid2, sid1)
|
|
|
|
}
|
|
|
|
|
|
|
|
sid1 = &streamID{
|
|
|
|
tenantID: TenantID{
|
|
|
|
AccountID: 1,
|
|
|
|
ProjectID: 2,
|
|
|
|
},
|
|
|
|
id: u128{
|
|
|
|
hi: 123,
|
|
|
|
lo: 456,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
sid2 = &streamID{
|
|
|
|
tenantID: TenantID{
|
|
|
|
AccountID: 1,
|
|
|
|
ProjectID: 2,
|
|
|
|
},
|
|
|
|
id: u128{
|
|
|
|
hi: 123,
|
|
|
|
lo: 456,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
if sid1.less(sid2) {
|
|
|
|
t.Fatalf("less for equal values must return false")
|
|
|
|
}
|
|
|
|
if sid2.less(sid1) {
|
|
|
|
t.Fatalf("less for equal values must return false")
|
|
|
|
}
|
|
|
|
if !sid1.equal(sid2) {
|
|
|
|
t.Fatalf("unexpected equal(%s, %s) result; got false; want true", sid1, sid2)
|
|
|
|
}
|
|
|
|
if !sid2.equal(sid1) {
|
|
|
|
t.Fatalf("unexpected equal(%s, %s) result; got false; want true", sid2, sid1)
|
|
|
|
}
|
|
|
|
|
|
|
|
// compare unequal values
|
|
|
|
sid1 = &streamID{
|
|
|
|
id: u128{
|
|
|
|
lo: 456,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
sid2 = &streamID{
|
|
|
|
id: u128{
|
|
|
|
hi: 123,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
if !sid1.less(sid2) {
|
|
|
|
t.Fatalf("unexpected result for less(%s, %s); got false; want true", sid1, sid2)
|
|
|
|
}
|
|
|
|
if sid2.less(sid1) {
|
|
|
|
t.Fatalf("unexpected result for less(%s, %s); got true; want false", sid2, sid1)
|
|
|
|
}
|
|
|
|
if sid1.equal(sid2) {
|
|
|
|
t.Fatalf("unexpected result for equal(%s, %s); got true; want false", sid1, sid2)
|
|
|
|
}
|
|
|
|
|
|
|
|
sid1 = &streamID{
|
|
|
|
id: u128{
|
|
|
|
hi: 123,
|
|
|
|
lo: 456,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
sid2 = &streamID{
|
|
|
|
tenantID: TenantID{
|
|
|
|
AccountID: 123,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
if !sid1.less(sid2) {
|
|
|
|
t.Fatalf("unexpected result for less(%s, %s); got false; want true", sid1, sid2)
|
|
|
|
}
|
|
|
|
if sid2.less(sid1) {
|
|
|
|
t.Fatalf("unexpected result for less(%s, %s); got true; want false", sid2, sid1)
|
|
|
|
}
|
|
|
|
if sid1.equal(sid2) {
|
|
|
|
t.Fatalf("unexpected result for equal(%s, %s); got true; want false", sid1, sid2)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestStreamIDReset(t *testing.T) {
|
|
|
|
sid := &streamID{
|
|
|
|
tenantID: TenantID{
|
|
|
|
AccountID: 123,
|
|
|
|
ProjectID: 456,
|
|
|
|
},
|
|
|
|
id: u128{
|
|
|
|
hi: 234,
|
|
|
|
lo: 9843,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
sid.reset()
|
|
|
|
sidZero := &streamID{}
|
|
|
|
if !reflect.DeepEqual(sid, sidZero) {
|
|
|
|
t.Fatalf("non-zero streamID after reset(): %s", sid)
|
|
|
|
}
|
|
|
|
}
|