Skip to content

Commit

Permalink
add unit tests for protocol/ (#695)
Browse files Browse the repository at this point in the history
* add protocol/alterconfigs unit tests

* add unit tests for protocol/createpartitions

* add unit tests for protocol/deletetopics

* add unit tests for protocol/electleaders

* protocol: use non-zero values for integer fields

to avoid false-negative of detecging encoding/decoding bug

background: https://github.com/segmentio/kafka-go/pull/695/files#r669808931
  • Loading branch information
kenju committed Jul 14, 2021
1 parent 680bd71 commit d45624f
Show file tree
Hide file tree
Showing 4 changed files with 285 additions and 0 deletions.
73 changes: 73 additions & 0 deletions protocol/alterconfigs/alterconfigs_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package alterconfigs_test

import (
"testing"

"github.com/segmentio/kafka-go/protocol/alterconfigs"
"github.com/segmentio/kafka-go/protocol/prototest"
)

const (
v0 = 0
v1 = 1
)

func TestAlterConfigsRequest(t *testing.T) {
prototest.TestRequest(t, v0, &alterconfigs.Request{
ValidateOnly: true,
Resources: []alterconfigs.RequestResources{
{
ResourceType: 1,
ResourceName: "foo",
Configs: []alterconfigs.RequestConfig{
{
Name: "foo",
Value: "foo",
},
},
},
},
})

prototest.TestRequest(t, v1, &alterconfigs.Request{
ValidateOnly: true,
Resources: []alterconfigs.RequestResources{
{
ResourceType: 1,
ResourceName: "foo",
Configs: []alterconfigs.RequestConfig{
{
Name: "foo",
Value: "foo",
},
},
},
},
})
}

func TestAlterConfigsResponse(t *testing.T) {
prototest.TestResponse(t, v0, &alterconfigs.Response{
ThrottleTimeMs: 500,
Responses: []alterconfigs.ResponseResponses{
{
ErrorCode: 1,
ErrorMessage: "foo",
ResourceType: 1,
ResourceName: "foo",
},
},
})

prototest.TestResponse(t, v1, &alterconfigs.Response{
ThrottleTimeMs: 500,
Responses: []alterconfigs.ResponseResponses{
{
ErrorCode: 1,
ErrorMessage: "foo",
ResourceType: 1,
ResourceName: "foo",
},
},
})
}
71 changes: 71 additions & 0 deletions protocol/createpartitions/createpartitions_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package createpartitions_test

import (
"testing"

"github.com/segmentio/kafka-go/protocol/createpartitions"
"github.com/segmentio/kafka-go/protocol/prototest"
)

const (
v0 = 0
v1 = 1
)

func TestCreatePartitionsRequest(t *testing.T) {
prototest.TestRequest(t, v0, &createpartitions.Request{
Topics: []createpartitions.RequestTopic{
{
Name: "foo",
Count: 1,
Assignments: []createpartitions.RequestAssignment{
{
BrokerIDs: []int32{1, 2, 3},
},
},
},
},
TimeoutMs: 500,
ValidateOnly: false,
})

prototest.TestRequest(t, v1, &createpartitions.Request{
Topics: []createpartitions.RequestTopic{
{
Name: "foo",
Count: 1,
Assignments: []createpartitions.RequestAssignment{
{
BrokerIDs: []int32{1, 2, 3},
},
},
},
},
TimeoutMs: 500,
ValidateOnly: false,
})
}

func TestCreatePartitionsResponse(t *testing.T) {
prototest.TestResponse(t, v0, &createpartitions.Response{
ThrottleTimeMs: 500,
Results: []createpartitions.ResponseResult{
{
Name: "foo",
ErrorCode: 1,
ErrorMessage: "foo",
},
},
})

prototest.TestResponse(t, v1, &createpartitions.Response{
ThrottleTimeMs: 500,
Results: []createpartitions.ResponseResult{
{
Name: "foo",
ErrorCode: 1,
ErrorMessage: "foo",
},
},
})
}
74 changes: 74 additions & 0 deletions protocol/deletetopics/deletetopics_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package deletetopics_test

import (
"testing"

"github.com/segmentio/kafka-go/protocol/deletetopics"
"github.com/segmentio/kafka-go/protocol/prototest"
)

const (
v0 = 0
v1 = 1
v3 = 3
)

func TestDeleteTopicsRequest(t *testing.T) {
prototest.TestRequest(t, v0, &deletetopics.Request{
TopicNames: []string{"foo", "bar"},
TimeoutMs: 500,
})

prototest.TestRequest(t, v1, &deletetopics.Request{
TopicNames: []string{"foo", "bar"},
TimeoutMs: 500,
})

prototest.TestRequest(t, v3, &deletetopics.Request{
TopicNames: []string{"foo", "bar"},
TimeoutMs: 500,
})
}

func TestDeleteTopicsResponse(t *testing.T) {
prototest.TestResponse(t, v0, &deletetopics.Response{
Responses: []deletetopics.ResponseTopic{
{
Name: "foo",
ErrorCode: 1,
},
{
Name: "bar",
ErrorCode: 1,
},
},
})

prototest.TestResponse(t, v1, &deletetopics.Response{
ThrottleTimeMs: 500,
Responses: []deletetopics.ResponseTopic{
{
Name: "foo",
ErrorCode: 1,
},
{
Name: "bar",
ErrorCode: 1,
},
},
})

prototest.TestResponse(t, v3, &deletetopics.Response{
ThrottleTimeMs: 500,
Responses: []deletetopics.ResponseTopic{
{
Name: "foo",
ErrorCode: 1,
},
{
Name: "bar",
ErrorCode: 1,
},
},
})
}
67 changes: 67 additions & 0 deletions protocol/electleaders/electleaders_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package electleaders_test

import (
"testing"

"github.com/segmentio/kafka-go/protocol/electleaders"
"github.com/segmentio/kafka-go/protocol/prototest"
)

const (
v0 = 0
v1 = 1
)

func TestElectLeadersRequest(t *testing.T) {
prototest.TestRequest(t, v0, &electleaders.Request{
TimeoutMs: 500,
TopicPartitions: []electleaders.RequestTopicPartitions{
{
Topic: "foo",
PartitionIDs: []int32{100, 101, 102},
},
},
})

prototest.TestRequest(t, v1, &electleaders.Request{
ElectionType: 1,
TimeoutMs: 500,
TopicPartitions: []electleaders.RequestTopicPartitions{
{
Topic: "foo",
PartitionIDs: []int32{100, 101, 102},
},
},
})
}

func TestElectLeadersResponse(t *testing.T) {
prototest.TestResponse(t, v0, &electleaders.Response{
ThrottleTime: 500,
ReplicaElectionResults: []electleaders.ResponseReplicaElectionResult{
{
Topic: "foo",
PartitionResults: []electleaders.ResponsePartitionResult{
{PartitionID: 100, ErrorCode: 0, ErrorMessage: ""},
{PartitionID: 101, ErrorCode: 0, ErrorMessage: ""},
{PartitionID: 102, ErrorCode: 0, ErrorMessage: ""},
},
},
},
})

prototest.TestResponse(t, v1, &electleaders.Response{
ThrottleTime: 500,
ErrorCode: 1,
ReplicaElectionResults: []electleaders.ResponseReplicaElectionResult{
{
Topic: "foo",
PartitionResults: []electleaders.ResponsePartitionResult{
{PartitionID: 100, ErrorCode: 0, ErrorMessage: ""},
{PartitionID: 101, ErrorCode: 0, ErrorMessage: ""},
{PartitionID: 102, ErrorCode: 0, ErrorMessage: ""},
},
},
},
})
}

0 comments on commit d45624f

Please sign in to comment.