Current section
Files
Jump to
Current section
Files
test/protocol/join_group_test.exs
defmodule Cafex.Protocol.JoinGroup.Test do
use ExUnit.Case, async: true
alias Cafex.Protocol.JoinGroup
alias Cafex.Protocol.JoinGroup.Request
alias Cafex.Protocol.JoinGroup.Response
test "JoinGroup protocol implementation" do
req = %Request{}
assert JoinGroup.has_response?(req) == true
assert JoinGroup.decoder(req) == JoinGroup
assert JoinGroup.api_key(req) == Cafex.Protocol.api_key(:join_group)
assert JoinGroup.api_version(req) == 0
end
test "encode creates a valid JoinGroup request" do
good_request = << 19 :: 16,
"cafex_test_consumer" :: binary,
7000 :: 32, # session_timeout
-1 :: 16-signed, # member_id: nil
8 :: 16,
"consumer" :: binary,
1 :: 32, # group_protocols length
5 :: 16,
"cafex" :: binary,
22 :: 32, # group_protocols_metadata length
0 :: 16,
1 :: 32,
10 :: 16,
"test_topic" :: binary,
0 :: 32-signed>>
request = %Request{
group_id: "cafex_test_consumer",
session_timeout: 7000,
protocol_type: "consumer",
group_protocols: [{"cafex", {0, ["test_topic"], ""}}]
}
assert good_request == Cafex.Protocol.Request.encode(request)
end
test "parse_response correctly parse a valid non-leader response" do
response = << 0 :: 16, # error_code
2 :: 32, # generation_id
5 :: 16,
"cafex", # group_protocol
42 :: 16,
"cafex-e6f5cd5e-116b-49a3-a3ca-8746779f3cc5", # leader_id
42 :: 16,
"cafex-4e8326b6-66d5-4ba5-877e-9feb4182462e", # member_id
0 :: 32-signed # members
>>
expected_response = %Response{
error: :no_error,
generation_id: 2,
group_protocol: "cafex",
leader_id: "cafex-e6f5cd5e-116b-49a3-a3ca-8746779f3cc5",
member_id: "cafex-4e8326b6-66d5-4ba5-877e-9feb4182462e",
members: []}
assert expected_response == JoinGroup.decode(response)
end
test "parse_response correctly parse a valid leader response" do
response = << 0 :: 16-signed, # error_code
3 :: 32, # generation_id
5 :: 16,
"cafex", # group_protocol
42 :: 16,
"cafex-4e8326b6-66d5-4ba5-877e-9feb4182462e", # leader_id
42 :: 16,
"cafex-4e8326b6-66d5-4ba5-877e-9feb4182462e", # member_id
1 :: 32, # members
42 :: 16, # member_id
"cafex-4e8326b6-66d5-4ba5-877e-9feb4182462e",
27 :: 32,
0 :: 16, # version
1 :: 32, # subscriptions
10 :: 16,
"cafex_test",
5 :: 32,
"[3,4]"
>>
expected_response = %Response{
error: :no_error,
generation_id: 3,
group_protocol: "cafex",
leader_id: "cafex-4e8326b6-66d5-4ba5-877e-9feb4182462e",
member_id: "cafex-4e8326b6-66d5-4ba5-877e-9feb4182462e",
members: [
{"cafex-4e8326b6-66d5-4ba5-877e-9feb4182462e", {0, ["cafex_test"], "[3,4]"}}]}
assert expected_response == JoinGroup.decode(response)
end
end