|
@@ -137,6 +137,31 @@ var (
|
|
0x00,
|
|
0x00,
|
|
0xFF, 0xFF, 0xFF, 0xFF,
|
|
0xFF, 0xFF, 0xFF, 0xFF,
|
|
0x00, 0x00, 0x00, 0x02, 0x00, 0xEE}
|
|
0x00, 0x00, 0x00, 0x02, 0x00, 0xEE}
|
|
|
|
+
|
|
|
|
+ preferredReplicaFetchResponseV11 = []byte{
|
|
|
|
+ 0x00, 0x00, 0x00, 0x00,
|
|
|
|
+ 0x00, 0x02,
|
|
|
|
+ 0x00, 0x00, 0x00, 0xAC,
|
|
|
|
+ 0x00, 0x00, 0x00, 0x01,
|
|
|
|
+ 0x00, 0x05, 't', 'o', 'p', 'i', 'c',
|
|
|
|
+ 0x00, 0x00, 0x00, 0x01,
|
|
|
|
+ 0x00, 0x00, 0x00, 0x05,
|
|
|
|
+ 0x00, 0x01,
|
|
|
|
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
|
|
|
|
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x09,
|
|
|
|
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
|
|
|
|
+ 0x00, 0x00, 0x00, 0x00,
|
|
|
|
+ 0x00, 0x00, 0x00, 0x03,
|
|
|
|
+ 0x00, 0x00, 0x00, 0x1C,
|
|
|
|
+
|
|
|
|
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00,
|
|
|
|
+ 0x00, 0x00, 0x00, 0x10,
|
|
|
|
+
|
|
|
|
+ 0x23, 0x96, 0x4a, 0xf7,
|
|
|
|
+ 0x00,
|
|
|
|
+ 0x00,
|
|
|
|
+ 0xFF, 0xFF, 0xFF, 0xFF,
|
|
|
|
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0xEE}
|
|
)
|
|
)
|
|
|
|
|
|
func TestEmptyFetchResponse(t *testing.T) {
|
|
func TestEmptyFetchResponse(t *testing.T) {
|
|
@@ -398,3 +423,75 @@ func TestOneMessageFetchResponseV4(t *testing.T) {
|
|
t.Error("Decoding produced incorrect message value.")
|
|
t.Error("Decoding produced incorrect message value.")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+func TestPreferredReplicaFetchResponseV11(t *testing.T) {
|
|
|
|
+ response := FetchResponse{}
|
|
|
|
+ testVersionDecodable(
|
|
|
|
+ t, "preferred replica fetch response v11", &response,
|
|
|
|
+ preferredReplicaFetchResponseV11, 11)
|
|
|
|
+
|
|
|
|
+ if response.ErrorCode != 0x0002 {
|
|
|
|
+ t.Fatal("Decoding produced incorrect error code.")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if response.SessionID != 0x000000AC {
|
|
|
|
+ t.Fatal("Decoding produced incorrect session ID.")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if len(response.Blocks) != 1 {
|
|
|
|
+ t.Fatal("Decoding produced incorrect number of topic blocks.")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if len(response.Blocks["topic"]) != 1 {
|
|
|
|
+ t.Fatal("Decoding produced incorrect number of partition blocks for topic.")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ block := response.GetBlock("topic", 5)
|
|
|
|
+ if block == nil {
|
|
|
|
+ t.Fatal("GetBlock didn't return block.")
|
|
|
|
+ }
|
|
|
|
+ if block.Err != ErrOffsetOutOfRange {
|
|
|
|
+ t.Error("Decoding didn't produce correct error code.")
|
|
|
|
+ }
|
|
|
|
+ if block.HighWaterMarkOffset != 0x10101010 {
|
|
|
|
+ t.Error("Decoding didn't produce correct high water mark offset.")
|
|
|
|
+ }
|
|
|
|
+ if block.LastStableOffset != 0x10101009 {
|
|
|
|
+ t.Error("Decoding didn't produce correct last stable offset.")
|
|
|
|
+ }
|
|
|
|
+ if block.LogStartOffset != 0x01010101 {
|
|
|
|
+ t.Error("Decoding didn't produce correct log start offset.")
|
|
|
|
+ }
|
|
|
|
+ if block.PreferredReadReplica != 0x0003 {
|
|
|
|
+ t.Error("Decoding didn't produce correct preferred read replica.")
|
|
|
|
+ }
|
|
|
|
+ partial, err := block.isPartial()
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatalf("Unexpected error: %v", err)
|
|
|
|
+ }
|
|
|
|
+ if partial {
|
|
|
|
+ t.Error("Decoding detected a partial trailing record where there wasn't one.")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ n, err := block.numRecords()
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatalf("Unexpected error: %v", err)
|
|
|
|
+ }
|
|
|
|
+ if n != 1 {
|
|
|
|
+ t.Fatal("Decoding produced incorrect number of records.")
|
|
|
|
+ }
|
|
|
|
+ msgBlock := block.RecordsSet[0].MsgSet.Messages[0]
|
|
|
|
+ if msgBlock.Offset != 0x550000 {
|
|
|
|
+ t.Error("Decoding produced incorrect message offset.")
|
|
|
|
+ }
|
|
|
|
+ msg := msgBlock.Msg
|
|
|
|
+ if msg.Codec != CompressionNone {
|
|
|
|
+ t.Error("Decoding produced incorrect message compression.")
|
|
|
|
+ }
|
|
|
|
+ if msg.Key != nil {
|
|
|
|
+ t.Error("Decoding produced message key where there was none.")
|
|
|
|
+ }
|
|
|
|
+ if !bytes.Equal(msg.Value, []byte{0x00, 0xEE}) {
|
|
|
|
+ t.Error("Decoding produced incorrect message value.")
|
|
|
|
+ }
|
|
|
|
+}
|