浏览代码

Increase test coverage of SyncProducer

Adam Lieskovsky 7 年之前
父节点
当前提交
e9f0281763
共有 1 个文件被更改,包括 80 次插入0 次删除
  1. 80 0
      mocks/sync_producer_test.go

+ 80 - 0
mocks/sync_producer_test.go

@@ -1,6 +1,7 @@
 package mocks
 
 import (
+	"errors"
 	"strings"
 	"testing"
 
@@ -168,3 +169,82 @@ func TestSyncProducerWithCheckerFunctionForSendMessagesWithoutError(t *testing.T
 		t.Errorf("Expected to not report any errors, found: %v", trm.errors)
 	}
 }
+
+func TestSyncProducerSendMessagesExpectationsMismatchTooFew(t *testing.T) {
+	trm := newTestReporterMock()
+
+	sp := NewSyncProducer(trm, nil)
+	sp.ExpectSendMessageWithCheckerFunctionAndSucceed(generateRegexpChecker("^tes"))
+
+	msg1 := &sarama.ProducerMessage{Topic: "test", Value: sarama.StringEncoder("test")}
+	msg2 := &sarama.ProducerMessage{Topic: "test", Value: sarama.StringEncoder("test")}
+
+	msgs := []*sarama.ProducerMessage{msg1, msg2}
+
+	if err := sp.SendMessages(msgs); err == nil {
+		t.Error("Error during value check expected on second message, found: ", err)
+	}
+
+	if err := sp.Close(); err != nil {
+		t.Error(err)
+	}
+
+	if len(trm.errors) != 2 {
+		t.Error("Expected to report 2 errors")
+	}
+}
+
+func TestSyncProducerSendMessagesExpectationsMismatchTooMany(t *testing.T) {
+	trm := newTestReporterMock()
+
+	sp := NewSyncProducer(trm, nil)
+	sp.ExpectSendMessageWithCheckerFunctionAndSucceed(generateRegexpChecker("^tes"))
+	sp.ExpectSendMessageWithCheckerFunctionAndSucceed(generateRegexpChecker("^tes"))
+
+	msg1 := &sarama.ProducerMessage{Topic: "test", Value: sarama.StringEncoder("test")}
+	msgs := []*sarama.ProducerMessage{msg1}
+
+	if err := sp.SendMessages(msgs); err != nil {
+		t.Error("No error expected on SendMessages call, found: ", err)
+	}
+
+	if err := sp.Close(); err != nil {
+		t.Error(err)
+	}
+
+	if len(trm.errors) != 1 {
+		t.Error("Expected to report 1 errors")
+	}
+}
+
+func TestSyncProducerSendMessagesFaultyEncoder(t *testing.T) {
+	trm := newTestReporterMock()
+
+	sp := NewSyncProducer(trm, nil)
+	sp.ExpectSendMessageWithCheckerFunctionAndSucceed(generateRegexpChecker("^tes"))
+
+	msg1 := &sarama.ProducerMessage{Topic: "test", Value: faultyEncoder("123")}
+	msgs := []*sarama.ProducerMessage{msg1}
+
+	if err := sp.SendMessages(msgs); err == nil || !strings.HasPrefix(err.Error(), "encode error") {
+		t.Error("Encoding error expected, found: ", err)
+	}
+
+	if err := sp.Close(); err != nil {
+		t.Error(err)
+	}
+
+	if len(trm.errors) != 1 {
+		t.Error("Expected to report 1 errors")
+	}
+}
+
+type faultyEncoder []byte
+
+func (f faultyEncoder) Encode() ([]byte, error) {
+	return nil, errors.New("encode error")
+}
+
+func (f faultyEncoder) Length() int {
+	return len(f)
+}