towerops/test/towerops_web/telemetry_test.exs
2026-01-17 17:49:53 -06:00

109 lines
2.9 KiB
Elixir

defmodule ToweropsWeb.TelemetryTest do
use ExUnit.Case, async: false
alias ToweropsWeb.Telemetry
describe "metrics/0" do
test "returns list of telemetry metrics" do
metrics = Telemetry.metrics()
assert is_list(metrics)
refute metrics == []
# Verify Phoenix metrics exist
assert Enum.any?(metrics, fn metric ->
metric.event_name == [:phoenix, :endpoint, :stop]
end)
# Verify Database metrics exist
assert Enum.any?(metrics, fn metric ->
metric.event_name == [:towerops, :repo, :query, :total_time]
end)
# Verify VM metrics exist
assert Enum.any?(metrics, fn metric ->
metric.event_name == [:vm, :memory, :total]
end)
# Verify Exq metrics exist
assert Enum.any?(metrics, fn metric ->
metric.event_name == [:towerops, :exq, :queue, :size]
end)
assert Enum.any?(metrics, fn metric ->
metric.event_name == [:towerops, :exq, :processes, :busy]
end)
# Verify Redis metrics exist
assert Enum.any?(metrics, fn metric ->
metric.event_name == [:towerops, :redis, :connected_clients]
end)
assert Enum.any?(metrics, fn metric ->
metric.event_name == [:towerops, :redis, :used_memory]
end)
end
end
describe "parse_redis_info/1" do
test "parses Redis INFO output correctly" do
info_string = """
# Server
redis_version:7.0.0
# Stats
total_commands_processed:1000
# Memory
used_memory:1048576
# Clients
connected_clients:5
"""
result = Telemetry.parse_redis_info(info_string)
assert result["redis_version"] == "7.0.0"
assert result["total_commands_processed"] == "1000"
assert result["used_memory"] == "1048576"
assert result["connected_clients"] == "5"
end
test "ignores comment lines" do
info_string = """
# Server
redis_version:7.0.0
"""
result = Telemetry.parse_redis_info(info_string)
refute Map.has_key?(result, "# Server")
assert result["redis_version"] == "7.0.0"
end
test "handles empty lines" do
info_string = """
redis_version:7.0.0
total_commands:100
"""
result = Telemetry.parse_redis_info(info_string)
assert result["redis_version"] == "7.0.0"
assert result["total_commands"] == "100"
assert map_size(result) == 2
end
end
describe "publish_exq_stats/0" do
test "does not crash in test environment" do
# In test env, this should not execute but should not crash
assert :ok = Telemetry.publish_exq_stats()
end
end
describe "publish_redis_stats/0" do
test "does not crash in test environment" do
# In test env, this should not execute but should not crash
assert :ok = Telemetry.publish_redis_stats()
end
end
end