Current section
Files
Jump to
Current section
Files
test/protocol/offset_fetch_test.exs
defmodule Cafex.Protocol.OffsetFetch.Test do
use ExUnit.Case, async: true
alias Cafex.Protocol.OffsetFetch
alias Cafex.Protocol.OffsetFetch.Request
alias Cafex.Protocol.OffsetFetch.Response
test "OffsetFetch protocol implementation" do
req = %Request{}
assert OffsetFetch.has_response?(req) == true
assert OffsetFetch.decoder(req) == OffsetFetch
assert OffsetFetch.api_key(req) == Cafex.Protocol.api_key(:offset_fetch)
assert OffsetFetch.api_version(%{req | api_version: 0}) == 0
assert OffsetFetch.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]}] }
offset_commit_request_v0 = %Request{ api_version: 0,
consumer_group: "bar",
topics: [{"foo", [0]}] }
offset_commit_request_v1 = %Request{ api_version: 1,
consumer_group: "bar",
topics: [{"foo", [0]}] }
offset_commit_request_v2 = %Request{ api_version: 2,
consumer_group: "bar",
topics: [{"foo", [0]}] }
good_request = << 3 :: 16, "bar" :: binary, 1 :: 32, 3 :: 16, "foo" :: binary, 1 :: 32, 0 :: 32 >>
request_default = OffsetFetch.encode(offset_commit_request_default)
request_v0 = OffsetFetch.encode(offset_commit_request_v0)
request_v1 = OffsetFetch.encode(offset_commit_request_v1)
request_v2 = OffsetFetch.encode(offset_commit_request_v2)
assert request_default == good_request
assert request_v0 == good_request
assert request_v1 == good_request
assert request_v2 == good_request
end
test "parse_response correctly parses a valid response" do
response1 = <<0, 0, 0, 1, 0, 4, 102, 111, 111, 100, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0>>
# response1 = <<1 :: 32, 4 :: 16, "food", 1 :: 32, 0 :: 32, 9 :: 64, 0 :: 16, 0 :: 16>>
assert OffsetFetch.decode(response1) == %Response{topics: [{"food", [{0, 9, "", :no_error}]}]}
response2 = <<0, 0, 0, 1, 0, 4, 102, 111, 111, 100, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 0, 0>>
# response2 = << 1 :: 32, 4 :: 16, "food", 1 :: 32, 1 :: 32, 4 :: 64, -1 :: 16, 0 :: 16>>
assert OffsetFetch.decode(response2) == %Response{topics: [{"food", [{1, 4, "", :no_error}]}]}
end
end