Current section
Files
Jump to
Current section
Files
test/protocol/offset_commit_test.exs
defmodule Cafex.Protocol.OffsetCommit.Test do
use ExUnit.Case, async: true
alias Cafex.Protocol.OffsetCommit
alias Cafex.Protocol.OffsetCommit.Request
alias Cafex.Protocol.OffsetCommit.Response
test "OffsetCommit protocol implementation" do
req = %Request{}
assert OffsetCommit.has_response?(req) == true
assert OffsetCommit.decoder(req) == OffsetCommit
assert OffsetCommit.api_key(req) == Cafex.Protocol.api_key(:offset_commit)
assert OffsetCommit.api_version(%{req | api_version: 0}) == 0
assert OffsetCommit.api_version(%{req | api_version: 1}) == 1
end
test "create_request creates a valid offset commit message with default version 0" do
offset_commit_request_default = %Request{consumer_group: "bar",
topics: [{"foo", [{0, 10, "baz"}]}]}
offset_commit_request_v0 = %Request{api_version: 0,
consumer_group: "bar",
topics: [{"foo", [{0, 10, "baz"}]}]}
good_request = << 3 :: 16, "bar", 1 :: 32, 3 :: 16, "foo", 1 :: 32, 0 :: 32, 10 :: 64, 3 :: 16, "baz" >>
request_default = OffsetCommit.encode(offset_commit_request_default)
request_v0 = OffsetCommit.encode(offset_commit_request_v0)
assert request_default == good_request
assert request_v0 == good_request
end
test "create_request creates a valid offset commit message with version 1" do
offset_commit_request_v1 = %Request{api_version: 1,
consumer_group: "bar",
consumer_id: "consumer1",
topics: [{"foo", [{0, 10, "baz"}]}]}
good_request = << 3 :: 16, "bar", -1 :: 32, 9 :: 16, "consumer1", 1 :: 32, 3 :: 16, "foo", 1 :: 32, 0 :: 32, 10 :: 64, -1 :: 64, 3 :: 16, "baz" >>
request_v1 = OffsetCommit.encode(offset_commit_request_v1)
assert request_v1 == good_request
end
test "create_request creates a valid offset commit message with version 2" do
offset_commit_request_v2 = %Request{api_version: 2,
consumer_group: "bar",
consumer_group_generation_id: -1,
consumer_id: "consumer1",
topics: [{"foo", [{0, 10, "baz"}]}]}
good_request = << 3 :: 16, "bar", -1 :: 32, 9 :: 16, "consumer1", -1 :: 64, 1 :: 32, 3 :: 16, "foo", 1 :: 32, 0 :: 32, 10 :: 64, 3 :: 16, "baz" >>
request_v2 = OffsetCommit.encode(offset_commit_request_v2)
assert request_v2 == good_request
end
test "parse_response correctly parses a valid response" do
response = <<0, 0, 0, 1, 0, 4, 102, 111, 111, 100, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0>>
assert OffsetCommit.decode(response) == %Response{topics: [{"food", [{0, :no_error}]}]}
end
end