diff options
| author | feld <feld@feld.me> | 2020-10-27 17:47:56 +0000 | 
|---|---|---|
| committer | feld <feld@feld.me> | 2020-10-27 17:47:56 +0000 | 
| commit | 5aff4799515c141cb0a42686733b2f40faba6f86 (patch) | |
| tree | 2c43ad7595e7f798a8215db691f70fa7efe3a19f /test | |
| parent | 2f7401806bbe5427bbcaa7cdce35130320ae3bb4 (diff) | |
| parent | 50d428088017e0383d8b35d4ab1b831f40646ab0 (diff) | |
| download | pleroma-5aff4799515c141cb0a42686733b2f40faba6f86.tar.gz pleroma-5aff4799515c141cb0a42686733b2f40faba6f86.zip | |
Merge branch '1668-prometheus-access-restrictions' into 'develop'
[#1668] App metrics endpoint (Prometheus) access restrictions
Closes #1668
See merge request pleroma/pleroma!3093
Diffstat (limited to 'test')
| -rw-r--r-- | test/pleroma/web/endpoint/metrics_exporter_test.exs | 69 | 
1 files changed, 69 insertions, 0 deletions
| diff --git a/test/pleroma/web/endpoint/metrics_exporter_test.exs b/test/pleroma/web/endpoint/metrics_exporter_test.exs new file mode 100644 index 000000000..f954cc1e7 --- /dev/null +++ b/test/pleroma/web/endpoint/metrics_exporter_test.exs @@ -0,0 +1,69 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.Endpoint.MetricsExporterTest do +  use Pleroma.Web.ConnCase + +  alias Pleroma.Web.Endpoint.MetricsExporter + +  defp config do +    Application.get_env(:prometheus, MetricsExporter) +  end + +  describe "with default config" do +    test "does NOT expose app metrics", %{conn: conn} do +      conn +      |> get(config()[:path]) +      |> json_response(404) +    end +  end + +  describe "when enabled" do +    setup do +      initial_config = config() +      on_exit(fn -> Application.put_env(:prometheus, MetricsExporter, initial_config) end) + +      Application.put_env( +        :prometheus, +        MetricsExporter, +        Keyword.put(initial_config, :enabled, true) +      ) +    end + +    test "serves app metrics", %{conn: conn} do +      conn = get(conn, config()[:path]) +      assert response = response(conn, 200) + +      for metric <- [ +            "http_requests_total", +            "http_request_duration_microseconds", +            "phoenix_controller_render_duration", +            "phoenix_controller_call_duration", +            "telemetry_scrape_duration", +            "erlang_vm_memory_atom_bytes_total" +          ] do +        assert response =~ ~r/#{metric}/ +      end +    end + +    test "when IP whitelist configured, " <> +           "serves app metrics only if client IP is whitelisted", +         %{conn: conn} do +      Application.put_env( +        :prometheus, +        MetricsExporter, +        Keyword.put(config(), :ip_whitelist, ["127.127.127.127", {1, 1, 1, 1}, '255.255.255.255']) +      ) + +      conn +      |> get(config()[:path]) +      |> json_response(404) + +      conn +      |> Map.put(:remote_ip, {127, 127, 127, 127}) +      |> get(config()[:path]) +      |> response(200) +    end +  end +end | 
