diff options
author | Hubert Chathi <hubert@uhoreg.ca> | 2020-08-26 18:28:18 -0400 |
---|---|---|
committer | Hubert Chathi <hubert@uhoreg.ca> | 2020-08-26 18:28:18 -0400 |
commit | 0cd4203bfcbb44a082ad6480fb71597f0fb8f3fa (patch) | |
tree | 7e890342c1f076d9f3e4e58ab952169c3f15fc18 /test/polyjuice | |
parent | replace login/logout examples with mix tasks (diff) |
add module for handling .well-known
Diffstat (limited to 'test/polyjuice')
-rw-r--r-- | test/polyjuice/client/well_known_test.exs | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/test/polyjuice/client/well_known_test.exs b/test/polyjuice/client/well_known_test.exs new file mode 100644 index 0000000..8b30a68 --- /dev/null +++ b/test/polyjuice/client/well_known_test.exs @@ -0,0 +1,164 @@ +# Copyright 2020 Hubert Chathi <hubert@uhoreg.ca> +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +defmodule Polyjuice.Client.WellKnownTest do + use ExUnit.Case + alias Polyjuice.Client.WellKnown + + defmodule Httpd do + def _matrix(session_id, env, _input) do + [path | _] = + Keyword.get(env, :path_info) + |> to_string() + |> String.split("?", parts: 2) + + case path do + "client/versions" -> + :mod_esi.deliver( + session_id, + 'Content-Type: application/json\r\n\r\n{"versions": ["foobar"]}' + ) + + "identity/api/v1" -> + :mod_esi.deliver( + session_id, + 'Content-Type: application/json\r\n\r\n{}' + ) + + _ -> + :mod_esi.deliver( + session_id, + 'Status: 404 Not Found\r\nContent-Type: application/json\r\n\r\n{"errcode":"M_NOT_FOUND","error":"Not found"}' + ) + end + end + + # various bad responses + def notfound(session_id, _, _) do + :mod_esi.deliver( + session_id, + 'Status: 404 Not Found\r\nContent-Type: application/json\r\n\r\n{"errcode":"M_NOT_FOUND","error":"Not found"}' + ) + end + + def missingversions(session_id, _, _) do + :mod_esi.deliver( + session_id, + 'Content-Type: application/json\r\n\r\n{}' + ) + end + + def notjson(session_id, _, _) do + :mod_esi.deliver( + session_id, + 'Content-Type: text/plain\r\n\r\nfoo' + ) + end + end + + test "get homeserver" do + {:ok, tmpdir} = TestUtil.mktmpdir("client-call-") + + try do + tmpdir_charlist = to_charlist(tmpdir) + + :inets.start() + + {:ok, httpd_pid} = + :inets.start( + :httpd, + port: 0, + server_name: 'sync.test', + server_root: tmpdir_charlist, + document_root: tmpdir_charlist, + bind_address: {127, 0, 0, 1}, + modules: [:mod_esi], + erl_script_alias: {'', [Polyjuice.Client.WellKnownTest.Httpd]} + ) + + port = :httpd.info(httpd_pid) |> Keyword.fetch!(:port) + + assert WellKnown.get_homeserver(%{}) == {:error, :fail_prompt} + assert WellKnown.get_homeserver(%{"m.homeserver" => %{}}) == {:error, :fail_prompt} + + assert WellKnown.get_homeserver(%{ + "m.homeserver" => %{ + "base_url" => + "http://127.0.0.1:#{port}/Elixir.Polyjuice.Client.WellKnownTest.Httpd" + } + }) == {:ok, "http://127.0.0.1:#{port}/Elixir.Polyjuice.Client.WellKnownTest.Httpd/"} + + assert WellKnown.get_homeserver(%{ + "m.homeserver" => %{ + "base_url" => + "http://127.0.0.1:#{port}/Elixir.Polyjuice.Client.WellKnownTest.Httpd/notfound/" + } + }) == {:error, :fail_error} + + assert WellKnown.get_homeserver(%{ + "m.homeserver" => %{ + "base_url" => + "http://127.0.0.1:#{port}/Elixir.Polyjuice.Client.WellKnownTest.Httpd/missingversions" + } + }) == {:error, :fail_error} + + assert WellKnown.get_homeserver(%{ + "m.homeserver" => %{ + "base_url" => + "http://127.0.0.1:#{port}/Elixir.Polyjuice.Client.WellKnownTest.Httpd/notjson" + } + }) == {:error, :fail_error} + + assert WellKnown.get_identity_server(%{}) == {:ok, nil} + + assert WellKnown.get_identity_server(%{"m.identity_server" => "foo"}) == + {:error, :fail_error} + + assert WellKnown.get_identity_server(%{ + "m.identity_server" => %{ + "base_url" => + "http://127.0.0.1:#{port}/Elixir.Polyjuice.Client.WellKnownTest.Httpd" + } + }) == {:ok, "http://127.0.0.1:#{port}/Elixir.Polyjuice.Client.WellKnownTest.Httpd/"} + + assert WellKnown.get_identity_server(%{ + "m.identity_server" => %{ + "base_url" => + "http://127.0.0.1:#{port}/Elixir.Polyjuice.Client.WellKnownTest.Httpd/notfound/" + } + }) == {:error, :fail_error} + + # lacking a "versions" property in identity server is normal + assert WellKnown.get_identity_server(%{ + "m.identity_server" => %{ + "base_url" => + "http://127.0.0.1:#{port}/Elixir.Polyjuice.Client.WellKnownTest.Httpd/missingversions" + } + }) == + {:ok, + "http://127.0.0.1:#{port}/Elixir.Polyjuice.Client.WellKnownTest.Httpd/missingversions/"} + + assert WellKnown.get_identity_server(%{ + "m.identity_server" => %{ + "base_url" => + "http://127.0.0.1:#{port}/Elixir.Polyjuice.Client.WellKnownTest.Httpd/notjson" + } + }) == {:error, :fail_error} + + :inets.stop(:httpd, httpd_pid) + after + File.rm_rf(tmpdir) + end + end +end |