Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions test/statix/config_test.exs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
defmodule Statix.ConfigTest do
use Statix.TestCase, async: false
use Statix.TestCase, async: false, auto_connect: false

use Statix, runtime_config: true

test "connect/1" do
connect(tags: ["tag:test"], prefix: "foo")
port = Statix.TestServer.get_port(__MODULE__.Server)
connect(port: port, tags: ["tag:test"], prefix: "foo")

increment("sample", 2)
assert_receive {:test_server, _, "foo.sample:2|c|#tag:test"}
Expand All @@ -13,7 +14,8 @@ defmodule Statix.ConfigTest do
test "global tags when present" do
Application.put_env(:statix, :tags, ["tag:test"])

connect()
port = Statix.TestServer.get_port(__MODULE__.Server)
connect(port: port)

increment("sample", 3)
assert_receive {:test_server, _, "sample:3|c|#tag:test"}
Expand All @@ -27,7 +29,8 @@ defmodule Statix.ConfigTest do
test "global connection-specific tags" do
Application.put_env(:statix, __MODULE__, tags: ["tag:test"])

connect()
port = Statix.TestServer.get_port(__MODULE__.Server)
connect(port: port)

set("sample", 4)
assert_receive {:test_server, _, "sample:4|s|#tag:test"}
Expand Down
3 changes: 0 additions & 3 deletions test/statix/overriding_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,6 @@ defmodule Statix.OverridingTest do
super([key, "-overridden"], value, options)
end

setup do
connect()
end

test "increment/3" do
increment("sample", 3, tags: ["foo"])
Expand Down
3 changes: 2 additions & 1 deletion test/statix/pool_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ defmodule Statix.PoolingTest do
@pool_size 3

setup do
connect(pool_size: @pool_size)
port = Statix.TestServer.get_port(__MODULE__.Server)
connect(port: port, pool_size: @pool_size)
end

test "starts :pool_size number of ports and randomly picks one" do
Expand Down
13 changes: 5 additions & 8 deletions test/statix_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@ defmodule StatixTest do
end)
end

setup do
connect()
end

test "increment/1,2,3" do
__MODULE__.increment("sample")
Expand Down Expand Up @@ -160,22 +157,22 @@ defmodule StatixTest do

assert capture_log(fn ->
assert {:error, :port_closed} == increment("sample")
end) =~ "counter metric \"sample\" lost value 1 error=:port_closed\n\e[0m"
end) =~ "counter metric \"sample\" lost value 1 error=:port_closed"

assert capture_log(fn ->
assert {:error, :port_closed} == decrement("sample")
end) =~ "counter metric \"sample\" lost value -1 error=:port_closed\n\e[0m"
end) =~ "counter metric \"sample\" lost value -1 error=:port_closed"

assert capture_log(fn ->
assert {:error, :port_closed} == gauge("sample", 2)
end) =~ "gauge metric \"sample\" lost value 2 error=:port_closed\n\e[0m"
end) =~ "gauge metric \"sample\" lost value 2 error=:port_closed"

assert capture_log(fn ->
assert {:error, :port_closed} == histogram("sample", 3)
end) =~ "histogram metric \"sample\" lost value 3 error=:port_closed\n\e[0m"
end) =~ "histogram metric \"sample\" lost value 3 error=:port_closed"

assert capture_log(fn ->
assert {:error, :port_closed} == timing("sample", 2.5)
end) =~ "timing metric \"sample\" lost value 2.5 error=:port_closed\n\e[0m"
end) =~ "timing metric \"sample\" lost value 2.5 error=:port_closed"
end
end
14 changes: 12 additions & 2 deletions test/support/test_server.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,26 @@ defmodule Statix.TestServer do
use GenServer

def start_link(port, test_module) do
GenServer.start_link(__MODULE__, port, name: test_module)
GenServer.start_link(__MODULE__, {port, test_module}, name: test_module)
end

def get_port(test_module) do
GenServer.call(test_module, :get_port)
end

@impl true
def init(port) do
def init({port, _test_module}) do
{:ok, socket} = :gen_udp.open(port, [:binary, active: true])
Process.flag(:trap_exit, true)
{:ok, %{socket: socket, test: nil}}
end

@impl true
def handle_call(:get_port, _from, %{socket: socket} = state) do
{:ok, port} = :inet.port(socket)
{:reply, port, state}
end

@impl true
def handle_call({:set_current_test, current_test}, _from, %{test: test} = state) do
if is_nil(test) or is_nil(current_test) do
Expand Down
11 changes: 10 additions & 1 deletion test/test_helper.exs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ defmodule Statix.TestCase do
use ExUnit.CaseTemplate

using options do
port = Keyword.get(options, :port, 8125)
# Use random high port to avoid collisions with typical infra (statsd/dogstatsd)
port = Keyword.get(options, :port, 8125 + :rand.uniform(10000))
auto_connect = Keyword.get(options, :auto_connect, true)

quote do
setup_all do
Expand All @@ -16,6 +18,13 @@ defmodule Statix.TestCase do

setup do
Statix.TestServer.setup(__MODULE__.Server)

if unquote(auto_connect) do
port = Statix.TestServer.get_port(__MODULE__.Server)
connect(port: port)
end

:ok
end
end
end
Expand Down
Loading