Browse Source

Test decoding fetch responses

Evan Huus 12 years ago
parent
commit
4a74cad269
1 changed files with 86 additions and 0 deletions
  1. 86 0
      protocol/fetch_response_test.go

+ 86 - 0
protocol/fetch_response_test.go

@@ -0,0 +1,86 @@
+package protocol
+
+import (
+	"bytes"
+	"testing"
+)
+import kafka "sarama/types"
+
+var (
+	emptyFetchResponse = []byte{
+		0x00, 0x00, 0x00, 0x00}
+
+	oneMessageFetchResponse = []byte{
+		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, 0x1C,
+		// messageSet
+		0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00,
+		0x00, 0x00, 0x00, 0x10,
+		// message
+		0x23, 0x96, 0x4a, 0xf7, // CRC
+		0x00,
+		0x00,
+		0xFF, 0xFF, 0xFF, 0xFF,
+		0x00, 0x00, 0x00, 0x02, 0x00, 0xEE}
+)
+
+func TestEmptyFetchResponse(t *testing.T) {
+	response := FetchResponse{}
+	testDecodable(t, "empty", &response, emptyFetchResponse)
+
+	if len(response.Blocks) != 0 {
+		t.Error("Decoding produced topic blocks where there were none.")
+	}
+
+}
+
+func TestOneMessageFetchResponse(t *testing.T) {
+	response := FetchResponse{}
+	testDecodable(t, "one message", &response, oneMessageFetchResponse)
+
+	if len(response.Blocks) == 1 {
+		if len(response.Blocks["topic"]) == 1 {
+			block := response.GetBlock("topic", 5)
+			if block != nil {
+				if block.Err != kafka.OFFSET_OUT_OF_RANGE {
+					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.MsgSet.PartialTrailingMessage {
+					t.Error("Decoding detected a partial trailing message where there wasn't one.")
+				}
+				if len(block.MsgSet.Messages) == 1 {
+					msgBlock := block.MsgSet.Messages[0]
+					if msgBlock.Offset != 0x550000 {
+						t.Error("Decoding produced incorrect message offset.")
+					}
+					msg := msgBlock.Msg
+					if msg.Codec != kafka.COMPRESSION_NONE {
+						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.")
+					}
+				} else {
+					t.Error("Decoding produced incorrect number of messages.")
+				}
+			} else {
+				t.Error("GetBlock didn't return block.")
+			}
+		} else {
+			t.Error("Decoding produced incorrect number of partition blocks for topic.")
+		}
+	} else {
+		t.Error("Decoding produced incorrect number of topic blocks.")
+	}
+}