aboutsummaryrefslogtreecommitdiff
path: root/weed/pb/schema_pb/offset_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/pb/schema_pb/offset_test.go')
-rw-r--r--weed/pb/schema_pb/offset_test.go93
1 files changed, 93 insertions, 0 deletions
diff --git a/weed/pb/schema_pb/offset_test.go b/weed/pb/schema_pb/offset_test.go
new file mode 100644
index 000000000..28324836e
--- /dev/null
+++ b/weed/pb/schema_pb/offset_test.go
@@ -0,0 +1,93 @@
+package schema_pb
+
+import (
+ "testing"
+ "google.golang.org/protobuf/proto"
+)
+
+func TestOffsetTypeEnums(t *testing.T) {
+ // Test that new offset-based enum values are defined
+ tests := []struct {
+ name string
+ value OffsetType
+ expected int32
+ }{
+ {"EXACT_OFFSET", OffsetType_EXACT_OFFSET, 25},
+ {"RESET_TO_OFFSET", OffsetType_RESET_TO_OFFSET, 30},
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ if int32(tt.value) != tt.expected {
+ t.Errorf("OffsetType_%s = %d, want %d", tt.name, int32(tt.value), tt.expected)
+ }
+ })
+ }
+}
+
+func TestPartitionOffsetSerialization(t *testing.T) {
+ // Test that PartitionOffset can serialize/deserialize with new offset field
+ original := &PartitionOffset{
+ Partition: &Partition{
+ RingSize: 1024,
+ RangeStart: 0,
+ RangeStop: 31,
+ UnixTimeNs: 1234567890,
+ },
+ StartTsNs: 1234567890,
+ StartOffset: 42, // New field
+ }
+
+ // Test proto marshaling/unmarshaling
+ data, err := proto.Marshal(original)
+ if err != nil {
+ t.Fatalf("Failed to marshal PartitionOffset: %v", err)
+ }
+
+ restored := &PartitionOffset{}
+ err = proto.Unmarshal(data, restored)
+ if err != nil {
+ t.Fatalf("Failed to unmarshal PartitionOffset: %v", err)
+ }
+
+ // Verify all fields are preserved
+ if restored.StartTsNs != original.StartTsNs {
+ t.Errorf("StartTsNs = %d, want %d", restored.StartTsNs, original.StartTsNs)
+ }
+ if restored.StartOffset != original.StartOffset {
+ t.Errorf("StartOffset = %d, want %d", restored.StartOffset, original.StartOffset)
+ }
+ if restored.Partition.RingSize != original.Partition.RingSize {
+ t.Errorf("Partition.RingSize = %d, want %d", restored.Partition.RingSize, original.Partition.RingSize)
+ }
+}
+
+func TestPartitionOffsetBackwardCompatibility(t *testing.T) {
+ // Test that PartitionOffset without StartOffset still works
+ original := &PartitionOffset{
+ Partition: &Partition{
+ RingSize: 1024,
+ RangeStart: 0,
+ RangeStop: 31,
+ UnixTimeNs: 1234567890,
+ },
+ StartTsNs: 1234567890,
+ // StartOffset not set (defaults to 0)
+ }
+
+ data, err := proto.Marshal(original)
+ if err != nil {
+ t.Fatalf("Failed to marshal PartitionOffset: %v", err)
+ }
+
+ restored := &PartitionOffset{}
+ err = proto.Unmarshal(data, restored)
+ if err != nil {
+ t.Fatalf("Failed to unmarshal PartitionOffset: %v", err)
+ }
+
+ // StartOffset should default to 0
+ if restored.StartOffset != 0 {
+ t.Errorf("StartOffset = %d, want 0", restored.StartOffset)
+ }
+}