aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkballou <kballou@devnulllabs.io>2016-03-25 15:58:27 -0600
committerkballou <kballou@devnulllabs.io>2016-03-25 16:27:39 -0600
commit050dab3186453c84cbab324d386a4dfb7b2e809c (patch)
tree5b0886f4ceb27ba15b402038bb2a7278a7e2232a
parenta4b25d32f063f9f2982dc6961dd6a7ed13709e12 (diff)
downloadex_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.exs55
-rw-r--r--test/fixtures/prometheus_query.json41
-rw-r--r--test/fixtures/prometheus_range.json155
-rw-r--r--test/fixtures/prometheus_series.json20
-rw-r--r--test/support/test_http_client.ex30
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