Browse Source

Added Gzip test. Simplified a little.

Dimitrij Denissenko 12 years ago
parent
commit
9675a91962
2 changed files with 38 additions and 14 deletions
  1. 7 9
      message.go
  2. 31 5
      message_test.go

+ 7 - 9
message.go

@@ -121,20 +121,18 @@ func (m *Message) decode(pd packetDecoder) (err error) {
 		if err != nil {
 			return err
 		}
-		raw, err := ioutil.ReadAll(reader)
-		if err != nil {
+		if m.Value, err = ioutil.ReadAll(reader); err != nil {
 			return err
 		}
-		return m.decodeSet(&realDecoder{raw: raw})
+		return m.decodeSet()
 	case CompressionSnappy:
 		if m.Value == nil {
 			return DecodingError{Info: "Snappy compression specified, but no data to uncompress"}
 		}
-		raw, err := SnappyDecode(m.Value)
-		if err != nil {
+		if m.Value, err = SnappyDecode(m.Value); err != nil {
 			return err
 		}
-		return m.decodeSet(&realDecoder{raw: raw})
+		return m.decodeSet()
 	default:
 		return DecodingError{Info: "Invalid compression specified"}
 	}
@@ -148,8 +146,8 @@ func (m *Message) decode(pd packetDecoder) (err error) {
 }
 
 // decodes a message set from a previousy encoded bulk-message
-func (m *Message) decodeSet(pd packetDecoder) (err error) {
-	m.Value = nil // Unset value
+func (m *Message) decodeSet() (err error) {
+	pd := realDecoder{raw: m.Value}
 	m.Set = &MessageSet{}
-	return m.Set.decode(pd)
+	return m.Set.decode(&pd)
 }

+ 31 - 5
message_test.go

@@ -31,6 +31,16 @@ var (
 		0, 0, 0, 1, // min version
 		0, 0, 0, 1, // default version
 		0, 0, 0, 22, 52, 0, 0, 25, 1, 16, 14, 227, 138, 104, 118, 25, 15, 13, 1, 8, 1, 0, 0, 62, 26, 0}
+
+	emptyBulkGzipMessage = []byte{
+		139, 160, 63, 141, //CRC
+		0x00,                   // magic version byte
+		0x01,                   // attribute flags
+		0xFF, 0xFF, 0xFF, 0xFF, // key
+		0x00, 0x00, 0x00, 0x27, // len
+		0x1f, 0x8b, // Gzip Magic
+		0x08, // deflate compressed
+		0, 0, 0, 0, 0, 0, 0, 99, 96, 128, 3, 190, 202, 112, 143, 7, 12, 12, 255, 129, 0, 33, 200, 192, 136, 41, 3, 0, 199, 226, 155, 70, 52, 0, 0, 0}
 )
 
 func TestMessageEncoding(t *testing.T) {
@@ -54,6 +64,9 @@ func TestMessageDecoding(t *testing.T) {
 	if message.Value != nil {
 		t.Error("Decoding produced value where there was none.")
 	}
+	if message.Set != nil {
+		t.Error("Decoding produced set where there was none.")
+	}
 
 	testDecodable(t, "empty gzip", &message, emptyGzipMessage)
 	if message.Codec != CompressionGZIP {
@@ -67,21 +80,34 @@ func TestMessageDecoding(t *testing.T) {
 	}
 }
 
-func TestMessageDecodingWithBulkMessages(t *testing.T) {
+func TestMessageDecodingBulkSnappy(t *testing.T) {
 	message := Message{}
-	testDecodable(t, "empty", &message, emptyBulkSnappyMessage)
+	testDecodable(t, "bulk snappy", &message, emptyBulkSnappyMessage)
 	if message.Codec != CompressionSnappy {
 		t.Errorf("Decoding produced codec %d, but expected %d.", message.Codec, CompressionSnappy)
 	}
 	if message.Key != nil {
 		t.Errorf("Decoding produced key %+v, but none was expected.", message.Key)
 	}
-	if message.Value != nil {
-		t.Errorf("Decoding produced value %+v, but none was expected.", message.Value)
+	if message.Set == nil {
+		t.Error("Decoding produced no set, but one was expected.")
+	} else if len(message.Set.Messages) != 2 {
+		t.Errorf("Decoding produced a set with %d messages, but 2 were expected.", len(message.Set.Messages))
+	}
+}
+
+func TestMessageDecodingBulkGzip(t *testing.T) {
+	message := Message{}
+	testDecodable(t, "bulk gzip", &message, emptyBulkGzipMessage)
+	if message.Codec != CompressionGZIP {
+		t.Errorf("Decoding produced codec %d, but expected %d.", message.Codec, CompressionGZIP)
+	}
+	if message.Key != nil {
+		t.Errorf("Decoding produced key %+v, but none was expected.", message.Key)
 	}
 	if message.Set == nil {
 		t.Error("Decoding produced no set, but one was expected.")
-	} else if len(message.Set.Messages) == 3 {
+	} else if len(message.Set.Messages) != 2 {
 		t.Errorf("Decoding produced a set with %d messages, but 2 were expected.", len(message.Set.Messages))
 	}
 }