-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add tests for all new response types
- Loading branch information
1 parent
1621c49
commit 756801d
Showing
6 changed files
with
329 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
package sarama | ||
|
||
import ( | ||
"reflect" | ||
"testing" | ||
) | ||
|
||
var ( | ||
describeGroupsResponseEmpty = []byte{ | ||
0, 0, 0, 0, // no groups | ||
} | ||
|
||
describeGroupsResponsePopulated = []byte{ | ||
0, 0, 0, 2, // 2 groups | ||
|
||
0, 0, // no error | ||
0, 3, 'f', 'o', 'o', // Group ID | ||
0, 3, 'b', 'a', 'r', // State | ||
0, 8, 'c', 'o', 'n', 's', 'u', 'm', 'e', 'r', // ConsumerProtocol type | ||
0, 3, 'b', 'a', 'z', // Protocol name | ||
0, 0, 0, 1, // 1 member | ||
0, 2, 'i', 'd', // Member ID | ||
0, 6, 's', 'a', 'r', 'a', 'm', 'a', // Client ID | ||
0, 9, 'l', 'o', 'c', 'a', 'l', 'h', 'o', 's', 't', // Client Host | ||
0, 0, 0, 3, 0x01, 0x02, 0x03, // MemberMetadata | ||
0, 0, 0, 3, 0x04, 0x05, 0x06, // MemberAssignment | ||
|
||
0, 30, // ErrGroupAuthorizationFailed | ||
0, 0, | ||
0, 0, | ||
0, 0, | ||
0, 0, | ||
0, 0, 0, 0, | ||
} | ||
) | ||
|
||
func TestDescribeGroupsResponse(t *testing.T) { | ||
var response *DescribeGroupsResponse | ||
|
||
response = new(DescribeGroupsResponse) | ||
testDecodable(t, "empty", response, describeGroupsResponseEmpty) | ||
if len(response.Groups) != 0 { | ||
t.Error("Expected no groups") | ||
} | ||
|
||
response = new(DescribeGroupsResponse) | ||
testDecodable(t, "populated", response, describeGroupsResponsePopulated) | ||
if len(response.Groups) != 2 { | ||
t.Error("Expected two groups") | ||
} | ||
|
||
group0 := response.Groups[0] | ||
if group0.Err != ErrNoError { | ||
t.Error("Unxpected groups[0].Err, found", group0.Err) | ||
} | ||
if group0.GroupId != "foo" { | ||
t.Error("Unxpected groups[0].GroupId, found", group0.GroupId) | ||
} | ||
if group0.State != "bar" { | ||
t.Error("Unxpected groups[0].State, found", group0.State) | ||
} | ||
if group0.ProtocolType != "consumer" { | ||
t.Error("Unxpected groups[0].ProtocolType, found", group0.ProtocolType) | ||
} | ||
if group0.Protocol != "baz" { | ||
t.Error("Unxpected groups[0].Protocol, found", group0.Protocol) | ||
} | ||
if len(group0.Members) != 1 { | ||
t.Error("Unxpected groups[0].Members, found", group0.Members) | ||
} | ||
if group0.Members["id"].ClientId != "sarama" { | ||
t.Error("Unxpected groups[0].Members[id].ClientId, found", group0.Members["id"].ClientId) | ||
} | ||
if group0.Members["id"].ClientHost != "localhost" { | ||
t.Error("Unxpected groups[0].Members[id].ClientHost, found", group0.Members["id"].ClientHost) | ||
} | ||
if !reflect.DeepEqual(group0.Members["id"].MemberMetadata, []byte{0x01, 0x02, 0x03}) { | ||
t.Error("Unxpected groups[0].Members[id].MemberMetadata, found", group0.Members["id"].MemberMetadata) | ||
} | ||
if !reflect.DeepEqual(group0.Members["id"].MemberAssignment, []byte{0x04, 0x05, 0x06}) { | ||
t.Error("Unxpected groups[0].Members[id].MemberAssignment, found", group0.Members["id"].MemberAssignment) | ||
} | ||
|
||
group1 := response.Groups[1] | ||
if group1.Err != ErrGroupAuthorizationFailed { | ||
t.Error("Unxpected groups[1].Err, found", group0.Err) | ||
} | ||
if len(group1.Members) != 0 { | ||
t.Error("Unxpected groups[1].Members, found", group0.Members) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package sarama | ||
|
||
import "testing" | ||
|
||
var ( | ||
heartbeatResponseNoError = []byte{ | ||
0x00, 0x00} | ||
) | ||
|
||
func TestHeartbeatResponse(t *testing.T) { | ||
var response *HeartbeatResponse | ||
|
||
response = new(HeartbeatResponse) | ||
testDecodable(t, "no error", response, heartbeatResponseNoError) | ||
if response.Err != ErrNoError { | ||
t.Error("Decoding error failed: no error expected but found", response.Err) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
package sarama | ||
|
||
import ( | ||
"reflect" | ||
"testing" | ||
) | ||
|
||
var ( | ||
joinGroupResponseNoError = []byte{ | ||
0x00, 0x00, // No error | ||
0x00, 0x01, 0x02, 0x03, // Generation ID | ||
0, 8, 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', // Protocol name chosen | ||
0, 3, 'f', 'o', 'o', // Leader ID | ||
0, 3, 'b', 'a', 'r', // Member ID | ||
0, 0, 0, 0, // No member info | ||
} | ||
|
||
joinGroupResponseWithError = []byte{ | ||
0, 23, // Error: inconsistent group protocol | ||
0x00, 0x00, 0x00, 0x00, // Generation ID | ||
0, 0, // Protocol name chosen | ||
0, 0, // Leader ID | ||
0, 0, // Member ID | ||
0, 0, 0, 0, // No member info | ||
} | ||
|
||
joinGroupResponseLeader = []byte{ | ||
0x00, 0x00, // No error | ||
0x00, 0x01, 0x02, 0x03, // Generation ID | ||
0, 8, 'p', 'r', 'o', 't', 'o', 'c', 'o', 'l', // Protocol name chosen | ||
0, 3, 'f', 'o', 'o', // Leader ID | ||
0, 3, 'f', 'o', 'o', // Member ID == Leader ID | ||
0, 0, 0, 1, // 1 member | ||
0, 3, 'f', 'o', 'o', // Member ID | ||
0, 0, 0, 3, 0x01, 0x02, 0x03, // Member metadata | ||
} | ||
) | ||
|
||
func TestJoinGroupResponse(t *testing.T) { | ||
var response *JoinGroupResponse | ||
|
||
response = new(JoinGroupResponse) | ||
testDecodable(t, "no error", response, joinGroupResponseNoError) | ||
if response.Err != ErrNoError { | ||
t.Error("Decoding Err failed: no error expected but found", response.Err) | ||
} | ||
if response.GenerationId != 66051 { | ||
t.Error("Decoding GenerationId failed, found:", response.GenerationId) | ||
} | ||
if response.LeaderId != "foo" { | ||
t.Error("Decoding LeaderId failed, found:", response.LeaderId) | ||
} | ||
if response.MemberId != "bar" { | ||
t.Error("Decoding MemberId failed, found:", response.MemberId) | ||
} | ||
if len(response.Members) != 0 { | ||
t.Error("Decoding Members failed, found:", response.Members) | ||
} | ||
|
||
response = new(JoinGroupResponse) | ||
testDecodable(t, "with error", response, joinGroupResponseWithError) | ||
if response.Err != ErrInconsistentGroupProtocol { | ||
t.Error("Decoding Err failed: ErrInconsistentGroupProtocol expected but found", response.Err) | ||
} | ||
if response.GenerationId != 0 { | ||
t.Error("Decoding GenerationId failed, found:", response.GenerationId) | ||
} | ||
if response.LeaderId != "" { | ||
t.Error("Decoding LeaderId failed, found:", response.LeaderId) | ||
} | ||
if response.MemberId != "" { | ||
t.Error("Decoding MemberId failed, found:", response.MemberId) | ||
} | ||
if len(response.Members) != 0 { | ||
t.Error("Decoding Members failed, found:", response.Members) | ||
} | ||
|
||
response = new(JoinGroupResponse) | ||
testDecodable(t, "with error", response, joinGroupResponseLeader) | ||
if response.Err != ErrNoError { | ||
t.Error("Decoding Err failed: ErrNoError expected but found", response.Err) | ||
} | ||
if response.GenerationId != 66051 { | ||
t.Error("Decoding GenerationId failed, found:", response.GenerationId) | ||
} | ||
if response.LeaderId != "foo" { | ||
t.Error("Decoding LeaderId failed, found:", response.LeaderId) | ||
} | ||
if response.MemberId != "foo" { | ||
t.Error("Decoding MemberId failed, found:", response.MemberId) | ||
} | ||
if len(response.Members) != 1 { | ||
t.Error("Decoding Members failed, found:", response.Members) | ||
} | ||
if !reflect.DeepEqual(response.Members["foo"], []byte{0x01, 0x02, 0x03}) { | ||
t.Error("Decoding foo member failed, found:", response.Members["foo"]) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package sarama | ||
|
||
import "testing" | ||
|
||
var ( | ||
leaveGroupResponseNoError = []byte{0x00, 0x00} | ||
leaveGroupResponseWithError = []byte{0, 25} | ||
) | ||
|
||
func TestLeaveGroupResponse(t *testing.T) { | ||
var response *LeaveGroupResponse | ||
|
||
response = new(LeaveGroupResponse) | ||
testDecodable(t, "no error", response, leaveGroupResponseNoError) | ||
if response.Err != ErrNoError { | ||
t.Error("Decoding error failed: no error expected but found", response.Err) | ||
} | ||
|
||
response = new(LeaveGroupResponse) | ||
testDecodable(t, "with error", response, leaveGroupResponseWithError) | ||
if response.Err != ErrUnknownMemberId { | ||
t.Error("Decoding error failed: ErrUnknownMemberId expected but found", response.Err) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package sarama | ||
|
||
import ( | ||
"testing" | ||
) | ||
|
||
var ( | ||
listGroupsResponseEmpty = []byte{ | ||
0, 0, // no error | ||
0, 0, 0, 0, // no groups | ||
} | ||
|
||
listGroupsResponseError = []byte{ | ||
0, 31, // no error | ||
0, 0, 0, 0, // ErrClusterAuthorizationFailed | ||
} | ||
|
||
listGroupsResponseWithConsumer = []byte{ | ||
0, 0, // no error | ||
0, 0, 0, 1, // 1 group | ||
0, 3, 'f', 'o', 'o', // group name | ||
0, 8, 'c', 'o', 'n', 's', 'u', 'm', 'e', 'r', // protocol type | ||
} | ||
) | ||
|
||
func TestListGroupsResponse(t *testing.T) { | ||
var response *ListGroupsResponse | ||
|
||
response = new(ListGroupsResponse) | ||
testDecodable(t, "no error", response, listGroupsResponseEmpty) | ||
if response.Err != ErrNoError { | ||
t.Error("Expected no gerror, found:", response.Err) | ||
} | ||
if len(response.Groups) != 0 { | ||
t.Error("Expected no groups") | ||
} | ||
|
||
response = new(ListGroupsResponse) | ||
testDecodable(t, "no error", response, listGroupsResponseError) | ||
if response.Err != ErrClusterAuthorizationFailed { | ||
t.Error("Expected no gerror, found:", response.Err) | ||
} | ||
if len(response.Groups) != 0 { | ||
t.Error("Expected no groups") | ||
} | ||
|
||
response = new(ListGroupsResponse) | ||
testDecodable(t, "no error", response, listGroupsResponseWithConsumer) | ||
if response.Err != ErrNoError { | ||
t.Error("Expected no gerror, found:", response.Err) | ||
} | ||
if len(response.Groups) != 1 { | ||
t.Error("Expected one group") | ||
} | ||
if response.Groups["foo"] != "consumer" { | ||
t.Error("Expected foo group to use consumer protocol") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
package sarama | ||
|
||
import ( | ||
"reflect" | ||
"testing" | ||
) | ||
|
||
var ( | ||
syncGroupResponseNoError = []byte{ | ||
0x00, 0x00, // No error | ||
0, 0, 0, 3, 0x01, 0x02, 0x03, // Member assignment data | ||
} | ||
|
||
syncGroupResponseWithError = []byte{ | ||
0, 27, // ErrRebalanceInProgress | ||
0, 0, 0, 0, // No member assignment data | ||
} | ||
) | ||
|
||
func TestSyncGroupResponse(t *testing.T) { | ||
var response *SyncGroupResponse | ||
|
||
response = new(SyncGroupResponse) | ||
testDecodable(t, "no error", response, syncGroupResponseNoError) | ||
if response.Err != ErrNoError { | ||
t.Error("Decoding Err failed: no error expected but found", response.Err) | ||
} | ||
if !reflect.DeepEqual(response.MemberAssignment, []byte{0x01, 0x02, 0x03}) { | ||
t.Error("Decoding MemberAssignment failed, found:", response.MemberAssignment) | ||
} | ||
|
||
response = new(SyncGroupResponse) | ||
testDecodable(t, "no error", response, syncGroupResponseWithError) | ||
if response.Err != ErrRebalanceInProgress { | ||
t.Error("Decoding Err failed: ErrRebalanceInProgress expected but found", response.Err) | ||
} | ||
if !reflect.DeepEqual(response.MemberAssignment, []byte{}) { | ||
t.Error("Decoding MemberAssignment failed, found:", response.MemberAssignment) | ||
} | ||
} |