Current section
Files
Jump to
Current section
Files
test/concord_test.exs
defmodule ConcordTest do
use ExUnit.Case, async: false
setup do
# Start test cluster
:ok = Concord.TestHelper.start_test_cluster()
# Clean up any existing data
on_exit(fn ->
try do
Concord.delete("test_key")
rescue
_ -> :ok
end
Concord.TestHelper.stop_test_cluster()
end)
:ok
end
describe "basic operations" do
test "put and get a value" do
assert :ok = Concord.put("test_key", "test_value")
assert {:ok, "test_value"} = Concord.get("test_key")
end
test "get non-existent key returns not_found" do
assert {:error, :not_found} = Concord.get("non_existent")
end
test "delete a key" do
assert :ok = Concord.put("delete_me", "value")
assert :ok = Concord.delete("delete_me")
assert {:error, :not_found} = Concord.get("delete_me")
end
test "update existing key" do
assert :ok = Concord.put("update_key", "old_value")
assert :ok = Concord.put("update_key", "new_value")
assert {:ok, "new_value"} = Concord.get("update_key")
end
end
describe "complex values" do
test "store and retrieve maps" do
data = %{name: "Alice", age: 30, roles: ["admin", "user"]}
assert :ok = Concord.put("user:1", data)
assert {:ok, ^data} = Concord.get("user:1")
end
test "store and retrieve lists" do
list = [1, 2, 3, 4, 5]
assert :ok = Concord.put("numbers", list)
assert {:ok, ^list} = Concord.get("numbers")
end
end
describe "validation" do
test "rejects invalid keys" do
assert {:error, :invalid_key} = Concord.put("", "value")
assert {:error, :invalid_key} = Concord.put(nil, "value")
assert {:error, :invalid_key} = Concord.put(123, "value")
end
test "accepts keys up to 4096 bytes" do
key = String.duplicate("a", 4096)
assert :ok = Concord.put(key, "value")
assert {:ok, "value"} = Concord.get(key)
end
test "rejects keys larger than 4096 bytes" do
long_key = String.duplicate("a", 4097)
assert {:error, :invalid_key} = Concord.put(long_key, "value")
end
end
describe "cluster operations" do
test "get cluster status" do
assert {:ok, status} = Concord.status()
assert Map.has_key?(status, :cluster)
assert Map.has_key?(status, :storage)
assert Map.has_key?(status, :node)
end
test "get cluster members" do
assert {:ok, members} = Concord.members()
assert is_list(members)
end
end
end