Packages

Cafex is a pure Elixir implementation of Kafka client.

Current section

Files

Jump to
misha_cafex test protocol_test.exs
Raw

test/protocol_test.exs

defmodule Cafex.Protocol.Test do
use ExUnit.Case, async: true
test "api keys" do
assert Cafex.Protocol.api_key(:produce) == 0
assert Cafex.Protocol.api_key(:fetch) == 1
assert Cafex.Protocol.api_key(:offset) == 2
assert Cafex.Protocol.api_key(:metadata) == 3
assert Cafex.Protocol.api_key(:offset_commit) == 8
assert Cafex.Protocol.api_key(:offset_fetch) == 9
assert Cafex.Protocol.api_key(:group_coordinator) == 10
assert Cafex.Protocol.api_key(:join_group) == 11
assert Cafex.Protocol.api_key(:heartbeat) == 12
assert Cafex.Protocol.api_key(:leave_group) == 13
assert Cafex.Protocol.api_key(:sync_group) == 14
assert Cafex.Protocol.api_key(:describe_groups) == 15
assert Cafex.Protocol.api_key(:list_groups) == 16
end
test "macros compile" do
message = ~r"To use Cafex.Protocol, `api` must be set"
assert_raise CompileError, message, fn -> Code.compile_quoted(quote do
defmodule BadApi do
use Cafex.Protocol
defrequest do
end
defresponse do
end
end
end) end
message = ~r"Unsupported api: -1"
assert_raise CompileError, message, fn -> Code.compile_quoted(quote do
defmodule BadApi do
use Cafex.Protocol, api: -1
defrequest do
end
defresponse do
end
end
end) end
message = ~r"Use Cafex.Protocol must call `defresponse`"
assert_raise CompileError, message, fn -> Code.compile_quoted(quote do
defmodule BadApi do
use Cafex.Protocol, api: :produce
defrequest do
end
end
end) end
assert [
{TestApi.Response, _},
{Cafex.Protocol.Request.TestApi.Request, _},
{TestApi.Request, _},
{TestApi, _}
] = Code.compile_quoted(quote do
defmodule TestApi do
use Cafex.Protocol, api: :metadata
defresponse do
end
def decode(_), do: %TestApi.Response{}
end
end)
assert [
{Cafex.Protocol.Request.TestApi2.Request, _},
{TestApi2.Request, _},
{TestApi2.Response, _},
{TestApi2, _}
] = Code.compile_quoted(quote do
defmodule TestApi2 do
use Cafex.Protocol, api: :metadata
defrequest do
field :name, binary
end
defresponse do
end
def decode(_), do: %TestApi2.Response{}
def encode(%TestApi2.Request{}), do: <<>>
end
end)
end
defmodule TestApi do
use Cafex.Protocol, api: :metadata
defresponse do
end
def decode(<<>>), do: %TestApi.Response{}
end
test "generated kafka API module" do
req = %TestApi.Request{}
res = %TestApi.Response{}
assert TestApi.encode(req) == <<>>
assert TestApi.decode(<<>>) == res
assert TestApi.api_key(req) == Cafex.Protocol.api_key(:metadata)
assert TestApi.api_version(req) == 0
assert TestApi.has_response?(req) == true
assert :ok == Protocol.assert_impl!(Cafex.Protocol.Request, TestApi.Request)
end
end