71 lines
2.1 KiB
Elixir
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
|