 c4439c630f
			
		
	
	
		c4439c630f
		
			
		
	
	
	
	
		
			
			grep -rl '# Copyright © .* Pleroma' * | xargs sed -i 's;Copyright © .* Pleroma .*;Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>;'
		
			
				
	
	
		
			69 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| # Pleroma: A lightweight social networking server
 | |
| # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 | |
| # SPDX-License-Identifier: AGPL-3.0-only
 | |
| 
 | |
| defmodule Pleroma.Web.Endpoint.MetricsExporterTest do
 | |
|   # Modifies AppEnv, has to stay synchronous
 | |
|   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_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
 |