message-server/test/message_server/server_registry_test.exs

71 lines
2.1 KiB
Elixir

defmodule MessageServer.ServerRegistryTest do
use ExUnit.Case
alias MessageServer.ServerRegistry
@test_server_id "99"
@test_servers %{
"10" => %{host: "amy.planetexpress.com", port: 4001},
"11" => %{host: "omicron-persei-8.galaxy", port: 8080}
}
setup do
pid = start_supervised!({ServerRegistry, {@test_server_id, @test_servers, :test_server}})
%{registry: pid}
end
test "returns correct server id" do
assert ServerRegistry.get_server_id(:test_server) == @test_server_id
end
test "returns server info for known server" do
@test_servers
|> Map.keys()
|> Enum.each(fn key ->
config = @test_servers[key]
assert {:ok, config} == ServerRegistry.get_server_info(key, :test_server)
end)
end
test "returns error for unknown server" do
assert {:error, :not_found} = ServerRegistry.get_server_info("1234567", :test_server)
end
test "lists all servers" do
servers = ServerRegistry.list_servers(:test_server)
assert servers == @test_servers
# local server not in list
refute Map.has_key?(servers, @test_server_id)
end
test "returns local server info" do
info = ServerRegistry.get_local_server_info(:test_server)
assert info.id == @test_server_id
assert info.servers == @test_servers
end
test "server info contains required fields" do
server = @test_servers |> Map.keys() |> Enum.at(0)
{:ok, server_info} = ServerRegistry.get_server_info(server, :test_server)
assert Map.has_key?(server_info, :host)
assert Map.has_key?(server_info, :port)
assert is_binary(server_info.host)
assert is_integer(server_info.port)
end
test "multiple calls return consistent results" do
# Call multiple times to ensure Agent state is stable
assert ServerRegistry.get_server_id(:test_server) == @test_server_id
assert ServerRegistry.get_server_id(:test_server) == @test_server_id
server = @test_servers |> Map.keys() |> Enum.at(1)
{:ok, info1} = ServerRegistry.get_server_info(server, :test_server)
{:ok, info2} = ServerRegistry.get_server_info(server, :test_server)
assert info1 == info2
end
end