2021-11-07 19:29:06 +00:00
|
|
|
defmodule FarsideTest do
|
2021-11-10 18:47:03 +00:00
|
|
|
|
2021-10-23 00:28:12 +00:00
|
|
|
use ExUnit.Case
|
2021-10-26 06:23:31 +00:00
|
|
|
use Plug.Test
|
2021-10-23 00:28:12 +00:00
|
|
|
|
2021-11-07 19:29:06 +00:00
|
|
|
alias Farside.Router
|
2021-10-26 06:23:31 +00:00
|
|
|
|
|
|
|
@opts Router.init([])
|
|
|
|
|
2021-11-12 21:34:36 +00:00
|
|
|
def test_conn(path) do
|
|
|
|
:timer.sleep(1000)
|
2021-11-12 21:40:05 +00:00
|
|
|
|
2021-11-12 21:34:36 +00:00
|
|
|
:get
|
2021-11-12 21:40:05 +00:00
|
|
|
|> conn(path, "")
|
|
|
|
|> Router.call(@opts)
|
2021-11-12 21:34:36 +00:00
|
|
|
end
|
2021-10-26 06:23:31 +00:00
|
|
|
|
2021-11-12 21:37:20 +00:00
|
|
|
test "throttle" do
|
2022-03-18 19:59:35 +00:00
|
|
|
first_conn =
|
|
|
|
:get
|
|
|
|
|> conn("/", "")
|
|
|
|
|> Router.call(@opts)
|
|
|
|
|
|
|
|
first_redirect = elem(List.last(first_conn.resp_headers), 1)
|
2021-11-12 21:37:20 +00:00
|
|
|
|
|
|
|
throttled_conn =
|
|
|
|
:get
|
|
|
|
|> conn("/", "")
|
|
|
|
|> Router.call(@opts)
|
|
|
|
|
2022-03-18 19:59:35 +00:00
|
|
|
throttled_redirect = elem(List.last(first_conn.resp_headers), 1)
|
|
|
|
|
2021-11-12 21:37:20 +00:00
|
|
|
assert throttled_conn.state == :sent
|
2022-03-18 19:59:35 +00:00
|
|
|
assert throttled_redirect == first_redirect
|
2021-11-12 21:37:20 +00:00
|
|
|
end
|
|
|
|
|
2021-11-12 21:34:36 +00:00
|
|
|
test "/" do
|
|
|
|
conn = test_conn("/")
|
2021-10-26 06:23:31 +00:00
|
|
|
assert conn.state == :sent
|
|
|
|
assert conn.status == 200
|
2021-10-23 00:28:12 +00:00
|
|
|
end
|
2021-11-10 18:47:03 +00:00
|
|
|
|
|
|
|
test "/:service" do
|
2022-07-27 19:50:23 +00:00
|
|
|
services_json = Application.fetch_env!(:farside, :services_json)
|
|
|
|
{:ok, file} = File.read(services_json)
|
2022-02-14 18:21:32 +00:00
|
|
|
{:ok, service_list} = Jason.decode(file)
|
2021-11-10 18:47:03 +00:00
|
|
|
|
|
|
|
service_names =
|
|
|
|
Enum.map(
|
|
|
|
service_list,
|
|
|
|
fn service -> service["type"] end
|
|
|
|
)
|
|
|
|
|
|
|
|
IO.puts("")
|
|
|
|
|
|
|
|
Enum.map(service_names, fn service_name ->
|
2021-11-12 21:34:36 +00:00
|
|
|
conn = test_conn("/#{service_name}")
|
2021-11-10 19:19:37 +00:00
|
|
|
first_redirect = elem(List.last(conn.resp_headers), 1)
|
2021-11-12 21:34:36 +00:00
|
|
|
|
2021-11-10 19:19:37 +00:00
|
|
|
IO.puts(" /#{service_name} (#1) -- #{first_redirect}")
|
2021-11-10 18:47:03 +00:00
|
|
|
assert conn.state == :set
|
|
|
|
assert conn.status == 302
|
2021-11-10 19:19:37 +00:00
|
|
|
|
2021-11-12 21:34:36 +00:00
|
|
|
conn = test_conn("/#{service_name}")
|
2021-11-10 19:19:37 +00:00
|
|
|
second_redirect = elem(List.last(conn.resp_headers), 1)
|
2021-11-12 21:34:36 +00:00
|
|
|
|
2021-11-10 19:19:37 +00:00
|
|
|
IO.puts(" /#{service_name} (#2) -- #{second_redirect}")
|
|
|
|
assert conn.state == :set
|
|
|
|
assert conn.status == 302
|
|
|
|
assert first_redirect != second_redirect
|
2021-11-10 18:47:03 +00:00
|
|
|
end)
|
|
|
|
end
|
2022-06-09 19:08:01 +00:00
|
|
|
|
|
|
|
test "/https://..." do
|
|
|
|
parent_service = "https://www.youtube.com"
|
|
|
|
parent_path = "watch?v=dQw4w9WgXcQ"
|
|
|
|
conn = test_conn("/#{parent_service}/#{parent_path}")
|
|
|
|
|
|
|
|
redirect = elem(List.last(conn.resp_headers), 1)
|
|
|
|
|
|
|
|
IO.puts("")
|
|
|
|
IO.puts(" /#{parent_service}/#{parent_path}")
|
|
|
|
IO.puts(" redirected to")
|
|
|
|
IO.puts(" #{redirect}")
|
|
|
|
|
|
|
|
assert conn.state == :set
|
|
|
|
assert conn.status == 302
|
|
|
|
assert redirect =~ parent_path
|
|
|
|
assert !(redirect =~ parent_service)
|
|
|
|
end
|
2021-10-23 00:28:12 +00:00
|
|
|
end
|