From c76660341c9fb0291b3db889b1976a7354deaaf4 Mon Sep 17 00:00:00 2001 From: Yuri Artemev Date: Tue, 14 Feb 2023 18:29:10 +0700 Subject: [PATCH] add dsn parser based on URI and attach to logger handler if it's valid --- lib/sparrow/application.ex | 11 +++-- lib/sparrow/client.ex | 29 +++---------- lib/sparrow/dsn.ex | 49 ++++++++++++++++++++++ mix.lock | 41 +++++++++--------- test/integration/gen_server_test.exs | 2 +- test/integration/logger_test.exs | 2 +- test/integration/proc_test.exs | 2 +- test/integration/supervisor_test.exs | 2 +- test/integration/task_test.exs | 2 +- test/sparrow/event/reducers/ranch_test.exs | 2 +- test/sparrow_test.exs | 5 ++- test/test_helper.exs | 2 + 12 files changed, 95 insertions(+), 54 deletions(-) create mode 100644 lib/sparrow/dsn.ex diff --git a/lib/sparrow/application.ex b/lib/sparrow/application.ex index 7d8a086..781f33f 100644 --- a/lib/sparrow/application.ex +++ b/lib/sparrow/application.ex @@ -1,6 +1,5 @@ defmodule Sparrow.Application do @moduledoc false - use Application def start(_type, _args) do @@ -15,8 +14,14 @@ defmodule Sparrow.Application do Supervisor.start_link(children, opts) end - defp attach_to_logger_handler do - :logger.add_handler(Sparrow, Sparrow.Catcher, handler_config()) + def attach_to_logger_handler do + case Sparrow.DSN.parse(Sparrow.dsn()) do + {:ok, _} -> + :logger.add_handler(Sparrow, Sparrow.Catcher, handler_config()) + + {:error, _} -> + :ok + end end defp handler_config do diff --git a/lib/sparrow/client.ex b/lib/sparrow/client.ex index 140730d..34d4b76 100644 --- a/lib/sparrow/client.ex +++ b/lib/sparrow/client.ex @@ -2,10 +2,7 @@ defmodule Sparrow.Client do @moduledoc false @behaviour Sparrow.Client.Behaviour - @dsn_regex ~r/(?https?:\/\/)(?\w+)(:(?\w+))?@(?.+)\/(?.+)/iu - @version Mix.Project.config()[:version] - - @sentry_client "sparrow-elixir/#{@version}" + @sentry_client "sparrow-elixir/#{Mix.Project.config()[:version]}" @sentry_version 7 def send(%Sparrow.Event{} = event, opts \\ []) do @@ -34,12 +31,12 @@ defmodule Sparrow.Client do end defp get_credentials(opts) do - with {:ok, endpoint, public, secret, project} <- get_dsn(opts) do - {:ok, endpoint, project, authorization_headers(public, secret)} + with {:ok, %Sparrow.DSN{endpoint: endpoint, project: project} = dsn} <- get_dsn(opts) do + {:ok, endpoint, project, authorization_headers(dsn)} end end - defp authorization_headers(public, secret) do + defp authorization_headers(%Sparrow.DSN{public: public, secret: secret}) do [ {"User-Agent", @sentry_client}, {"X-Sentry-Auth", authorization_header(public, secret)} @@ -64,21 +61,7 @@ defmodule Sparrow.Client do "Sentry " <> query end - def get_dsn(opts) do - parse_dsn(Keyword.get_lazy(opts, :dsn, &Sparrow.dsn/0)) - end - - defp parse_dsn(val) when val in [nil, ""] do - {:error, :dsn_empty} - end - - defp parse_dsn(dsn) do - case Regex.named_captures(@dsn_regex, dsn) do - %{"scheme" => scheme, "uri" => uri, "public" => public, "secret" => secret, "project" => project} -> - {:ok, scheme <> uri <> "/api/store/", public, secret, project} - - _ -> - {:error, :dsn_invalid} - end + defp get_dsn(opts) do + Sparrow.DSN.parse(Keyword.get_lazy(opts, :dsn, &Sparrow.dsn/0)) end end diff --git a/lib/sparrow/dsn.ex b/lib/sparrow/dsn.ex new file mode 100644 index 0000000..617e36a --- /dev/null +++ b/lib/sparrow/dsn.ex @@ -0,0 +1,49 @@ +defmodule Sparrow.DSN do + defstruct [:endpoint, :project, :public, :secret] + + def parse(val) when val in [nil, ""] do + {:error, :dsn_empty} + end + + def parse(%URI{scheme: scheme, host: host, userinfo: userinfo, path: "/" <> path}) + when is_binary(scheme) and is_binary(host) and is_binary(userinfo) do + {suffix, [project]} = project(path) + + {public, secret} = + case String.split(userinfo, ":", parts: 2) do + [public, secret] -> {public, secret} + [public] -> {public, nil} + end + + {:ok, + %__MODULE__{ + endpoint: endpoint(scheme, host, suffix) <> "/api/store/", + project: project, + public: public, + secret: secret + }} + end + + def parse(%URI{} = uri) do + {:error, {:dsn_invalid, uri}} + end + + def parse(term) when is_binary(term) do + parse(URI.parse(term)) + end + + defp endpoint(scheme, host, []) do + scheme <> "://" <> host + end + + defp endpoint(scheme, host, suffix) do + scheme <> "://" <> host <> "/" <> Enum.join(suffix, "/") + end + + defp project(path) do + case String.split(path, "/") do + [_] = project -> {[], project} + [_|_] = suffix -> Enum.split(suffix, length(suffix) - 1) + end + end +end diff --git a/mix.lock b/mix.lock index 3eeacd8..c123ee1 100644 --- a/mix.lock +++ b/mix.lock @@ -1,27 +1,28 @@ %{ - "certifi": {:hex, :certifi, "2.5.2", "b7cfeae9d2ed395695dd8201c57a2d019c0c43ecaf8b8bcb9320b40d6662f340", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "3b3b5f36493004ac3455966991eaf6e768ce9884693d9968055aeeeb1e575040"}, - "cowboy": {:hex, :cowboy, "2.8.0", "f3dc62e35797ecd9ac1b50db74611193c29815401e53bac9a5c0577bd7bc667d", [:rebar3], [{:cowlib, "~> 2.9.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.7.1", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "4643e4fba74ac96d4d152c75803de6fad0b3fa5df354c71afdd6cbeeb15fac8a"}, - "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.3.1", "ebd1a1d7aff97f27c66654e78ece187abdc646992714164380d8a041eda16754", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3a6efd3366130eab84ca372cbd4a7d3c3a97bdfcfb4911233b035d117063f0af"}, - "cowlib": {:hex, :cowlib, "2.9.1", "61a6c7c50cf07fdd24b2f45b89500bb93b6686579b069a89f88cb211e1125c78", [:rebar3], [], "hexpm", "e4175dc240a70d996156160891e1c62238ede1729e45740bdd38064dad476170"}, + "certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"}, + "cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"}, + "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"}, + "cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"}, "earmark": {:hex, :earmark, "1.4.1", "07bb382826ee8d08d575a1981f971ed41bd5d7e86b917fd012a93c51b5d28727", [:mix], [], "hexpm", "cdfa03374331187c7b9e86d971423a19138dc1cf9902b26923a657c789673876"}, - "earmark_parser": {:hex, :earmark_parser, "1.4.12", "b245e875ec0a311a342320da0551da407d9d2b65d98f7a9597ae078615af3449", [:mix], [], "hexpm", "711e2cc4d64abb7d566d43f54b78f7dc129308a63bc103fbd88550d2174b3160"}, - "ex_doc": {:hex, :ex_doc, "0.23.0", "a069bc9b0bf8efe323ecde8c0d62afc13d308b1fa3d228b65bca5cf8703a529d", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "f5e2c4702468b2fd11b10d39416ddadd2fcdd173ba2a0285ebd92c39827a5a16"}, - "hackney": {:hex, :hackney, "1.16.0", "5096ac8e823e3a441477b2d187e30dd3fff1a82991a806b2003845ce72ce2d84", [:rebar3], [{:certifi, "2.5.2", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.1", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.0", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.6", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "3bf0bebbd5d3092a3543b783bf065165fa5d3ad4b899b836810e513064134e18"}, - "idna": {:hex, :idna, "6.0.1", "1d038fb2e7668ce41fbf681d2c45902e52b3cb9e9c77b55334353b222c2ee50c", [:rebar3], [{:unicode_util_compat, "0.5.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a02c8a1c4fd601215bb0b0324c8a6986749f807ce35f25449ec9e69758708122"}, - "jason": {:hex, :jason, "1.2.2", "ba43e3f2709fd1aa1dce90aaabfd039d000469c05c56f0b8e31978e03fa39052", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "18a228f5f0058ee183f29f9eae0805c6e59d61c3b006760668d8d18ff0d12179"}, - "makeup": {:hex, :makeup, "1.0.5", "d5a830bc42c9800ce07dd97fa94669dfb93d3bf5fcf6ea7a0c67b2e0e4a7f26c", [:mix], [{:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cfa158c02d3f5c0c665d0af11512fed3fba0144cf1aadee0f2ce17747fba2ca9"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.15.0", "98312c9f0d3730fde4049985a1105da5155bfe5c11e47bdc7406d88e01e4219b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.1", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "75ffa34ab1056b7e24844c90bfc62aaf6f3a37a15faa76b07bc5eba27e4a8b4a"}, + "earmark_parser": {:hex, :earmark_parser, "1.4.30", "0b938aa5b9bafd455056440cdaa2a79197ca5e693830b4a982beada840513c5f", [:mix], [], "hexpm", "3b5385c2d36b0473d0b206927b841343d25adb14f95f0110062506b300cd5a1b"}, + "ex_doc": {:hex, :ex_doc, "0.29.1", "b1c652fa5f92ee9cf15c75271168027f92039b3877094290a75abcaac82a9f77", [:mix], [{:earmark_parser, "~> 1.4.19", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "b7745fa6374a36daf484e2a2012274950e084815b936b1319aeebcf7809574f6"}, + "hackney": {:hex, :hackney, "1.18.1", "f48bf88f521f2a229fc7bae88cf4f85adc9cd9bcf23b5dc8eb6a1788c662c4f6", [:rebar3], [{:certifi, "~> 2.9.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a4ecdaff44297e9b5894ae499e9a070ea1888c84afdd1fd9b7b2bc384950128e"}, + "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, + "jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"}, + "makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"}, + "makeup_elixir": {:hex, :makeup_elixir, "0.16.0", "f8c570a0d33f8039513fbccaf7108c5d750f47d8defd44088371191b76492b0b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "28b2cbdc13960a46ae9a8858c4bebdec3c9a6d7b4b9e7f4ed1502f8159f338e7"}, + "makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, - "mime": {:hex, :mime, "1.5.0", "203ef35ef3389aae6d361918bf3f952fa17a09e8e43b5aa592b93eba05d0fb8d", [:mix], [], "hexpm", "55a94c0f552249fc1a3dd9cd2d3ab9de9d3c89b559c2bd01121f824834f24746"}, + "mime": {:hex, :mime, "2.0.3", "3676436d3d1f7b81b5a2d2bd8405f412c677558c81b1c92be58c00562bb59095", [:mix], [], "hexpm", "27a30bf0db44d25eecba73755acf4068cbfe26a4372f9eb3e4ea3a45956bff6b"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, "mox": {:hex, :mox, "0.5.2", "55a0a5ba9ccc671518d068c8dddd20eeb436909ea79d1799e2209df7eaa98b6c", [:mix], [], "hexpm", "df4310628cd628ee181df93f50ddfd07be3e5ecc30232d3b6aadf30bdfe6092b"}, - "nimble_parsec": {:hex, :nimble_parsec, "1.1.0", "3a6fca1550363552e54c216debb6a9e95bd8d32348938e13de5eda962c0d7f89", [:mix], [], "hexpm", "08eb32d66b706e913ff748f11694b17981c0b04a33ef470e33e11b3d3ac8f54b"}, - "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, - "plug": {:hex, :plug, "1.11.0", "f17217525597628298998bc3baed9f8ea1fa3f1160aa9871aee6df47a6e4d38e", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2d9c633f0499f9dc5c2fd069161af4e2e7756890b81adcbb2ceaa074e8308876"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.4.1", "779ba386c0915027f22e14a48919a9545714f849505fa15af2631a0d298abf0f", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d72113b6dff7b37a7d9b2a5b68892808e3a9a752f2bf7e503240945385b70507"}, - "plug_crypto": {:hex, :plug_crypto, "1.2.0", "1cb20793aa63a6c619dd18bb33d7a3aa94818e5fd39ad357051a67f26dfa2df6", [:mix], [], "hexpm", "a48b538ae8bf381ffac344520755f3007cc10bd8e90b240af98ea29b69683fc2"}, - "ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm", "451d8527787df716d99dc36162fca05934915db0b6141bbdac2ea8d3c7afc7d7"}, + "nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"}, + "parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, + "plug": {:hex, :plug, "1.14.0", "ba4f558468f69cbd9f6b356d25443d0b796fbdc887e03fa89001384a9cac638f", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "bf020432c7d4feb7b3af16a0c2701455cbbbb95e5b6866132cb09eb0c29adc14"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.6.0", "d1cf12ff96a1ca4f52207c5271a6c351a4733f413803488d75b70ccf44aebec2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "073cf20b753ce6682ed72905cd62a2d4bd9bad1bf9f7feb02a1b8e525bd94fa6"}, + "plug_crypto": {:hex, :plug_crypto, "1.2.3", "8f77d13aeb32bfd9e654cb68f0af517b371fb34c56c9f2b58fe3df1235c1251a", [:mix], [], "hexpm", "b5672099c6ad5c202c45f5a403f21a3411247f164e4a8fab056e5cd8a290f4a2"}, + "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, - "telemetry": {:hex, :telemetry, "0.4.2", "2808c992455e08d6177322f14d3bdb6b625fbcfd233a73505870d8738a2f4599", [:rebar3], [], "hexpm", "2d1419bd9dda6a206d7b5852179511722e2b18812310d304620c7bd92a13fcef"}, - "unicode_util_compat": {:hex, :unicode_util_compat, "0.5.0", "8516502659002cec19e244ebd90d312183064be95025a319a6c7e89f4bccd65b", [:rebar3], [], "hexpm", "d48d002e15f5cc105a696cf2f1bbb3fc72b4b770a184d8420c8db20da2674b38"}, + "telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"}, + "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, } diff --git a/test/integration/gen_server_test.exs b/test/integration/gen_server_test.exs index 559cdc9..b74942e 100644 --- a/test/integration/gen_server_test.exs +++ b/test/integration/gen_server_test.exs @@ -1,5 +1,5 @@ defmodule Integration.GenServerTest do - use Sparrow.IntegrationCase, async: false + use Sparrow.IntegrationCase alias Sparrow.Support.GenServer, as: GS diff --git a/test/integration/logger_test.exs b/test/integration/logger_test.exs index 1125f3f..bc0991e 100644 --- a/test/integration/logger_test.exs +++ b/test/integration/logger_test.exs @@ -1,5 +1,5 @@ defmodule Integration.LoggerTest do - use Sparrow.IntegrationCase, async: false + use Sparrow.IntegrationCase if Version.compare(System.version(), "1.11.0") != :lt do require Logger diff --git a/test/integration/proc_test.exs b/test/integration/proc_test.exs index 1c51d9d..5cc9fe9 100644 --- a/test/integration/proc_test.exs +++ b/test/integration/proc_test.exs @@ -1,5 +1,5 @@ defmodule Integration.ProcTest do - use Sparrow.IntegrationCase, async: false + use Sparrow.IntegrationCase describe "crashed with" do setup do diff --git a/test/integration/supervisor_test.exs b/test/integration/supervisor_test.exs index cbcea35..fcbeee8 100644 --- a/test/integration/supervisor_test.exs +++ b/test/integration/supervisor_test.exs @@ -1,5 +1,5 @@ defmodule Integration.SupervisorTest do - use Sparrow.IntegrationCase, async: false + use Sparrow.IntegrationCase setup do {:ok, pid} = start_supervised(Sparrow.Support.Supervisor) diff --git a/test/integration/task_test.exs b/test/integration/task_test.exs index 84d9bd3..1e2dd0c 100644 --- a/test/integration/task_test.exs +++ b/test/integration/task_test.exs @@ -1,5 +1,5 @@ defmodule Integration.TaskTest do - use Sparrow.IntegrationCase, async: false + use Sparrow.IntegrationCase setup do {:ok, pid} = start_supervised({Task.Supervisor, name: __MODULE__}) diff --git a/test/sparrow/event/reducers/ranch_test.exs b/test/sparrow/event/reducers/ranch_test.exs index bc669c4..39fc6cf 100644 --- a/test/sparrow/event/reducers/ranch_test.exs +++ b/test/sparrow/event/reducers/ranch_test.exs @@ -1,5 +1,5 @@ defmodule Sparrow.Event.Reducers.RanchTest do - use ExUnit.Case + use ExUnit.Case, async: true alias Sparrow.Event.Reducers.Ranch diff --git a/test/sparrow_test.exs b/test/sparrow_test.exs index f6c60c5..1134cf1 100644 --- a/test/sparrow_test.exs +++ b/test/sparrow_test.exs @@ -1,5 +1,5 @@ defmodule SparrowTest do - use Sparrow.Case, async: false + use Sparrow.Case doctest Sparrow @@ -105,7 +105,8 @@ defmodule SparrowTest do end test "returns :dsn_invalid when DSN id invalid" do - assert {:error, :dsn_invalid} == Sparrow.capture("test message", dsn: "invalid dsn") + assert {:error, {:dsn_invalid, %URI{}}} = + Sparrow.capture("test message", dsn: "invalid dsn") end end diff --git a/test/test_helper.exs b/test/test_helper.exs index 1670693..d3aecab 100644 --- a/test/test_helper.exs +++ b/test/test_helper.exs @@ -1,4 +1,6 @@ Application.put_env(:sparrow, :client, Sparrow.ClientVoid) Application.put_env(:sparrow, :dsn, "https://user:pass@localhost/42") +Sparrow.Application.attach_to_logger_handler() + ExUnit.start(capture_log: true)