diff options
author | kballou <kballou@devnulllabs.io> | 2016-03-25 15:58:27 -0600 |
---|---|---|
committer | kballou <kballou@devnulllabs.io> | 2016-03-25 16:27:39 -0600 |
commit | 050dab3186453c84cbab324d386a4dfb7b2e809c (patch) | |
tree | 5b0886f4ceb27ba15b402038bb2a7278a7e2232a | |
parent | a4b25d32f063f9f2982dc6961dd6a7ed13709e12 (diff) | |
download | ex_prometheus_io-050dab3186453c84cbab324d386a4dfb7b2e809c.tar.gz ex_prometheus_io-050dab3186453c84cbab324d386a4dfb7b2e809c.tar.xz |
Add http fixtures and tests
* Add general data query tests
* Add tests for query process death and timeout
-rw-r--r-- | test/ex_prometheus_io_test.exs | 55 | ||||
-rw-r--r-- | test/fixtures/prometheus_query.json | 41 | ||||
-rw-r--r-- | test/fixtures/prometheus_range.json | 155 | ||||
-rw-r--r-- | test/fixtures/prometheus_series.json | 20 | ||||
-rw-r--r-- | test/support/test_http_client.ex | 30 |
5 files changed, 301 insertions, 0 deletions
diff --git a/test/ex_prometheus_io_test.exs b/test/ex_prometheus_io_test.exs index 8990325..dc4e55c 100644 --- a/test/ex_prometheus_io_test.exs +++ b/test/ex_prometheus_io_test.exs @@ -2,4 +2,59 @@ defmodule ExPrometheusIoTest do use ExUnit.Case doctest ExPrometheusIo + test "can query for up data" do + {pid, ref} = ExPrometheusIo.query("up") + assert_receive {:prometheus_results, ^ref, results} + assert results["results"] != [] + assert results["resultType"] == "vector" + refute Process.alive?(pid) + end + + test "can query range for up data" do + {pid, ref} = ExPrometheusIo.range("up", 1458855801, 1458855810, 1) + assert_receive {:prometheus_results, ^ref, results} + assert results["results"] != [] + assert results["resultType"] == "matrix" + refute Process.alive?(pid) + end + + test "can query up series data" do + {pid, ref} = ExPrometheusIo.series(["up"]) + assert_receive {:prometheus_results, ^ref, results} + refute Process.alive?(pid) + end + + test "http query failure doesn't break the world" do + {pid, ref} = ExPrometheusIo.query("kill") + refute_receive {:prometheus_results, ^ref, _} + refute Process.alive?(pid) + end + + test "http range failure doesn't break the wolrd" do + {pid, ref} = ExPrometheusIo.range("kill", 0, 1, 0.5) + refute_receive {:prometheus_results, ^ref, _} + refute Process.alive?(pid) + end + + test "http series failure doesn't break the world" do + {pid, ref} = ExPrometheusIo.series(["kill"]) + refute_receive {:prometheus_results, ^ref, _} + refute Process.alive?(pid) + end + + test "http query timeout doesn't stop the world" do + {_, ref} = ExPrometheusIo.query("timeout") + refute_receive {:prometheus_results, ^ref, _}, 10 + end + + test "http range timeout doesn't stop the world" do + {_, ref} = ExPrometheusIo.range("timeout", 0, 1, 0.5) + refute_receive {:prometheus_results, ^ref, _}, 10 + end + + test "http series timeout doesn't stop the world" do + {_, ref} = ExPrometheusIo.series(["timeout"]) + refute_receive {:prometheus_results, ^ref, _}, 10 + end + end diff --git a/test/fixtures/prometheus_query.json b/test/fixtures/prometheus_query.json new file mode 100644 index 0000000..3c17f13 --- /dev/null +++ b/test/fixtures/prometheus_query.json @@ -0,0 +1,41 @@ +{ + "status": "success", + "data": { + "resultType": "vector", + "result": [ + { + "metric": { + "__name__": "up", + "instance": "prometheus:9090", + "job": "federate" + }, + "value": [ + 1458931600.344, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "dbhost01", + "job": "database-sys" + }, + "value": [ + 1458931600.344, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "dbhost03", + "job": "database-sys" + }, + "value": [ + 1458931600.344, + "0" + ] + } + ] + } +} diff --git a/test/fixtures/prometheus_range.json b/test/fixtures/prometheus_range.json new file mode 100644 index 0000000..b319d8e --- /dev/null +++ b/test/fixtures/prometheus_range.json @@ -0,0 +1,155 @@ +{ + "status": "success", + "data": { + "resultType": "matrix", + "result": [ + { + "metric": { + "__name__": "up", + "instance": "prometheus:9090", + "job": "federate" + }, + "values": [ + [ + 1458855801, + "1" + ], + [ + 1458855802, + "1" + ], + [ + 1458855803, + "1" + ], + [ + 1458855804, + "1" + ], + [ + 1458855805, + "1" + ], + [ + 1458855806, + "1" + ], + [ + 1458855807, + "1" + ], + [ + 1458855808, + "1" + ], + [ + 1458855809, + "1" + ], + [ + 1458855810, + "1" + ] + ] + }, + { + "metric": { + "__name__": "up", + "instance": "dbhost01", + "job": "database-sys" + }, + "values": [ + [ + 1458855801, + "1" + ], + [ + 1458855802, + "1" + ], + [ + 1458855803, + "1" + ], + [ + 1458855804, + "1" + ], + [ + 1458855805, + "1" + ], + [ + 1458855806, + "1" + ], + [ + 1458855807, + "1" + ], + [ + 1458855808, + "1" + ], + [ + 1458855809, + "1" + ], + [ + 1458855810, + "1" + ] + ] + }, + { + "metric": { + "__name__": "up", + "instance": "dbhost03", + "job": "database-sys" + }, + "values": [ + [ + 1458855801, + "1" + ], + [ + 1458855802, + "1" + ], + [ + 1458855803, + "0" + ], + [ + 1458855804, + "0" + ], + [ + 1458855805, + "0" + ], + [ + 1458855806, + "1" + ], + [ + 1458855807, + "1" + ], + [ + 1458855808, + "1" + ], + [ + 1458855809, + "1" + ], + [ + 1458855810, + "1" + ] + ] + } + ] + } +} diff --git a/test/fixtures/prometheus_series.json b/test/fixtures/prometheus_series.json new file mode 100644 index 0000000..755365e --- /dev/null +++ b/test/fixtures/prometheus_series.json @@ -0,0 +1,20 @@ +{ + "status": "success", + "data": [ + { + "__name__": "up", + "instance": "prometheus:9090", + "job": "federate" + }, + { + "__name__": "up", + "instance": "dbhost01", + "job": "database-sys" + }, + { + "__name__": "up", + "instance": "dbhost03", + "job": "database-sys" + } + ] +} diff --git a/test/support/test_http_client.ex b/test/support/test_http_client.ex new file mode 100644 index 0000000..b2f641b --- /dev/null +++ b/test/support/test_http_client.ex @@ -0,0 +1,30 @@ +defmodule ExPrometheusIo.Test.HTTPClient do + + @query_fixture File.read!("test/fixtures/prometheus_query.json") + @range_fixture File.read!("test/fixtures/prometheus_range.json") + @series_fixture File.read!("test/fixtures/prometheus_series.json") + @empty_response """ + {"status": "error", "errorType": "bad_data", "error": "Nope"} + """ + + def request(url) do + url = to_string(url) + cond do + String.contains?(url, "/api/v1/query?query=up") -> + {:ok, {[], [], @query_fixture}} + String.contains?(url, "/api/v1/query_range?query=up") -> + {:ok, {[], [], @range_fixture}} + String.contains?(url, "/api/v1/series?match[]=up") -> + {:ok, {[], [], @series_fixture}} + String.contains?(url, "query=timeout") or + String.contains?(url, "match[]=timeout") -> + :timer.sleep(20) + {:ok, {[], [], @empty_response}} + String.contains?(url, "query=kill") or + String.contains?(url, "match[]=kill") -> + Process.exit(self, :kill) + true -> {:ok, {[], [], @empty_response}} + end + end + +end |