defmodule TribeOne.TribesPlugin.SupertestWeb.APIPlugTest do use ExUnit.Case, async: true import Phoenix.ConnTest test "rejects non-loopback requests" do conn = :get |> build_conn("/plugins-api/tribe-one-supertest/health") |> Map.put(:remote_ip, {192, 0, 2, 10}) |> TribeOne.TribesPlugin.SupertestWeb.APIPlug.call([]) assert conn.status == 403 assert Jason.decode!(conn.resp_body) == %{"error" => "local-only", "ok" => false} end test "serves health for loopback requests" do for remote_ip <- [{127, 0, 0, 1}, {127, 0, 0, 2}, {0, 0, 0, 0, 0, 0, 0, 1}] do conn = :get |> build_conn("/plugins-api/tribe-one-supertest/health") |> Map.put(:remote_ip, remote_ip) |> TribeOne.TribesPlugin.SupertestWeb.APIPlug.call([]) assert conn.status == 200 assert %{"ok" => true, "plugin" => "tribe-one-supertest"} = Jason.decode!(conn.resp_body) end end test "serves health for IPv4-mapped IPv6 loopback requests" do conn = :get |> build_conn("/plugins-api/tribe-one-supertest/health") |> Map.put(:remote_ip, {0, 0, 0, 0, 0, 65_535, 0x7F00, 1}) |> TribeOne.TribesPlugin.SupertestWeb.APIPlug.call([]) assert conn.status == 200 assert %{"ok" => true, "plugin" => "tribe-one-supertest"} = Jason.decode!(conn.resp_body) end test "serves cluster pubsub probe routes for loopback requests" do pubsub = :"supertest_cluster_pubsub_plug_#{System.unique_integer([:positive])}" start_supervised!({Phoenix.PubSub, name: pubsub}) start_supervised!({TribeOne.TribesPlugin.Supertest.ClusterPubSubProbe, pubsub: pubsub}) conn = :post |> build_conn("/plugins-api/tribe-one-supertest/cluster-pubsub/reset", %{ run_id: "plug-test" }) |> Map.put(:remote_ip, {127, 0, 0, 1}) |> TribeOne.TribesPlugin.SupertestWeb.APIPlug.call([]) assert conn.status == 200 assert %{"ok" => true} = Jason.decode!(conn.resp_body) end test "serves metrics probe route for loopback requests" do conn = :post |> build_conn("/plugins-api/tribe-one-supertest/metrics/probe", %{value: 41}) |> Map.put(:remote_ip, {127, 0, 0, 1}) |> TribeOne.TribesPlugin.SupertestWeb.APIPlug.call([]) assert conn.status == 200 assert %{"ok" => true, "value" => 41} = Jason.decode!(conn.resp_body) end end