Skip to content

Commit 52cf642

Browse files
authored
Fix all flaky tests (#613)
Also removes Mox, yay!
1 parent a4ee2ed commit 52cf642

File tree

11 files changed

+238
-265
lines changed

11 files changed

+238
-265
lines changed

config/config.exs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ if config_env() == :test do
99
root_source_code_paths: [File.cwd!()],
1010
hackney_opts: [recv_timeout: 50],
1111
send_result: :sync,
12-
send_max_attempts: 1,
13-
__sender_module__: Sentry.TransportSenderMock
12+
send_max_attempts: 1
13+
14+
config :logger, backends: []
1415
end
1516

1617
config :phoenix, :json_library, Jason

lib/sentry/client.ex

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,6 @@ defmodule Sentry.Client do
1212
# Max message length per https://github.com/getsentry/sentry/blob/0fcec33ac94ad81a205f86f208072b0f57b39ff4/src/sentry/conf/server.py#L1021
1313
@max_message_length 8_192
1414

15-
# We read this at compile time and use it exclusively for tests. Any user of the Sentry
16-
# application will get the real deal, but we'll be able to swap this out with a mock
17-
# in tests.
18-
@sender_module Application.compile_env(:sentry, :__sender_module__, Transport.Sender)
19-
2015
# This is what executes the "Event Pipeline".
2116
# See: https://develop.sentry.dev/sdk/unified-api/#event-pipeline
2217
@spec send_event(Event.t(), keyword()) ::
@@ -95,7 +90,7 @@ defmodule Sentry.Client do
9590
end
9691

9792
defp encode_and_send(%Event{} = event, _result_type = :none, _request_retries) do
98-
:ok = @sender_module.send_async(event)
93+
:ok = Transport.Sender.send_async(event)
9994
Sentry.put_last_event_id_and_source(event.event_id, event.source)
10095
{:ok, ""}
10196
end

lib/sentry/transport/sender.ex

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,6 @@ defmodule Sentry.Transport.Sender do
99

1010
@registry Sentry.Transport.SenderRegistry
1111

12-
# This behaviour is only present for mocks in tests.
13-
defmodule Behaviour do
14-
@moduledoc false
15-
@callback send_async(Event.t()) :: :ok
16-
end
17-
18-
@behaviour Behaviour
19-
2012
## Public API
2113

2214
@spec start_link(keyword()) :: GenServer.on_start()
@@ -25,7 +17,6 @@ defmodule Sentry.Transport.Sender do
2517
GenServer.start_link(__MODULE__, [], name: {:via, Registry, {@registry, index}})
2618
end
2719

28-
@impl Behaviour
2920
@spec send_async(Event.t()) :: :ok
3021
def send_async(%Event{} = event) do
3122
pool_size = Application.fetch_env!(:sentry, :sender_pool_size)

mix.exs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ defmodule Sentry.Mixfile do
8383
{:dialyxir, "~> 1.0", only: [:test, :dev], runtime: false},
8484
{:ex_doc, "~> 0.29.0", only: :dev},
8585
{:excoveralls, "~> 0.17.1", only: [:test]},
86-
{:mox, "~> 1.0", only: [:test]},
8786
{:phoenix, "~> 1.5", only: [:test]},
8887
{:phoenix_html, "~> 2.0", only: [:test]}
8988
]

mix.lock

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
"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"},
66
"cowlib": {:hex, :cowlib, "2.9.1", "61a6c7c50cf07fdd24b2f45b89500bb93b6686579b069a89f88cb211e1125c78", [:rebar3], [], "hexpm", "e4175dc240a70d996156160891e1c62238ede1729e45740bdd38064dad476170"},
77
"dialyxir": {:hex, :dialyxir, "1.1.0", "c5aab0d6e71e5522e77beff7ba9e08f8e02bad90dfbeffae60eaf0cb47e29488", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "07ea8e49c45f15264ebe6d5b93799d4dd56a44036cf42d0ad9c960bc266c0b9a"},
8-
"earmark": {:hex, :earmark, "1.4.5", "62ffd3bd7722fb7a7b1ecd2419ea0b458c356e7168c1f5d65caf09b4fbdd13c8", [:mix], [], "hexpm", "b7d0e6263d83dc27141a523467799a685965bf8b13b6743413f19a7079843f4f"},
98
"earmark_parser": {:hex, :earmark_parser, "1.4.32", "fa739a0ecfa34493de19426681b23f6814573faee95dfd4b4aafe15a7b5b32c6", [:mix], [], "hexpm", "b8b0dd77d60373e77a3d7e8afa598f325e49e8663a51bcc2b88ef41838cca755"},
109
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
1110
"ex_doc": {:hex, :ex_doc, "0.29.4", "6257ecbb20c7396b1fe5accd55b7b0d23f44b6aa18017b415cb4c2b91d997729", [:mix], [{:earmark_parser, "~> 1.4.31", [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", "2c6699a737ae46cb61e4ed012af931b57b699643b24dabe2400a8168414bc4f5"},
@@ -19,7 +18,6 @@
1918
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
2019
"mime": {:hex, :mime, "1.5.0", "203ef35ef3389aae6d361918bf3f952fa17a09e8e43b5aa592b93eba05d0fb8d", [:mix], [], "hexpm", "55a94c0f552249fc1a3dd9cd2d3ab9de9d3c89b559c2bd01121f824834f24746"},
2120
"mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"},
22-
"mox": {:hex, :mox, "1.0.2", "dc2057289ac478b35760ba74165b4b3f402f68803dd5aecd3bfd19c183815d64", [:mix], [], "hexpm", "f9864921b3aaf763c8741b5b8e6f908f44566f1e427b2630e89e9a73b981fef2"},
2321
"nimble_parsec": {:hex, :nimble_parsec, "1.3.1", "2c54013ecf170e249e9291ed0a62e5832f70a476c61da16f6aac6dca0189f2af", [:mix], [], "hexpm", "2682e3c0b2eb58d90c6375fc0cc30bc7be06f365bf72608804fb9cffa5e1b167"},
2422
"parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"},
2523
"phoenix": {:hex, :phoenix, "1.5.8", "71cfa7a9bb9a37af4df98939790642f210e35f696b935ca6d9d9c55a884621a4", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.13", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.1.2 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "35ded0a32f4836168c7ab6c33b88822eccd201bcd9492125a9bea4c54332d955"},
@@ -30,7 +28,6 @@
3028
"plug_crypto": {:hex, :plug_crypto, "1.2.2", "05654514ac717ff3a1843204b424477d9e60c143406aa94daf2274fdd280794d", [:mix], [], "hexpm", "87631c7ad914a5a445f0a3809f99b079113ae4ed4b867348dd9eec288cecb6db"},
3129
"ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm", "451d8527787df716d99dc36162fca05934915db0b6141bbdac2ea8d3c7afc7d7"},
3230
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"},
33-
"ssl_verify_hostname": {:hex, :ssl_verify_hostname, "1.0.5", "2e73e068cd6393526f9fa6d399353d7c9477d6886ba005f323b592d389fb47be", [:make], []},
3431
"telemetry": {:hex, :telemetry, "0.4.2", "2808c992455e08d6177322f14d3bdb6b625fbcfd233a73505870d8738a2f4599", [:rebar3], [], "hexpm", "2d1419bd9dda6a206d7b5852179511722e2b18812310d304620c7bd92a13fcef"},
3532
"unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"},
3633
}

test/event_test.exs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,6 @@ defmodule Sentry.EventTest do
388388
:metrics,
389389
:mime,
390390
:mimerl,
391-
:mox,
392391
:parse_trans,
393392
:phoenix,
394393
:phoenix_html,

test/logger_backend_test.exs

Lines changed: 35 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,24 @@
11
defmodule Sentry.LoggerBackendTest do
2-
use ExUnit.Case
3-
4-
import Mox
2+
use ExUnit.Case, async: false
53

4+
alias Sentry.TestEnvironmentHelper
65
alias Sentry.TestGenServer
76

87
require Logger
98

109
@moduletag :capture_log
1110

12-
setup :set_mox_global
13-
setup :verify_on_exit!
14-
1511
setup do
16-
{:ok, _} = Logger.add_backend(Sentry.LoggerBackend)
12+
assert {:ok, _} = Logger.add_backend(Sentry.LoggerBackend)
1713

18-
ExUnit.Callbacks.on_exit(fn ->
14+
on_exit(fn ->
1915
Logger.configure_backend(Sentry.LoggerBackend, [])
2016
:ok = Logger.remove_backend(Sentry.LoggerBackend)
2117
end)
2218
end
2319

24-
defp expect_sender_call do
25-
pid = self()
26-
ref = make_ref()
27-
28-
expect(Sentry.TransportSenderMock, :send_async, fn event ->
29-
send(pid, {ref, event})
30-
:ok
31-
end)
32-
33-
ref
34-
end
35-
3620
test "a logged raised exception is reported" do
37-
ref = expect_sender_call()
21+
ref = register_before_send()
3822

3923
Task.start(fn ->
4024
raise "Unique Error"
@@ -47,7 +31,7 @@ defmodule Sentry.LoggerBackendTest do
4731
end
4832

4933
test "a GenServer throw is reported" do
50-
ref = expect_sender_call()
34+
ref = register_before_send()
5135

5236
pid = start_supervised!(TestGenServer)
5337
Sentry.TestGenServer.throw(pid)
@@ -61,7 +45,7 @@ defmodule Sentry.LoggerBackendTest do
6145
end
6246

6347
test "abnormal GenServer exit is reported" do
64-
ref = expect_sender_call()
48+
ref = register_before_send()
6549

6650
pid = start_supervised!(TestGenServer)
6751
Sentry.TestGenServer.exit(pid)
@@ -75,7 +59,7 @@ defmodule Sentry.LoggerBackendTest do
7559
end
7660

7761
test "bad function call causing GenServer crash is reported" do
78-
ref = expect_sender_call()
62+
ref = register_before_send()
7963

8064
pid = start_supervised!(TestGenServer)
8165

@@ -96,7 +80,7 @@ defmodule Sentry.LoggerBackendTest do
9680
end
9781

9882
test "GenServer timeout is reported" do
99-
ref = expect_sender_call()
83+
ref = register_before_send()
10084

10185
pid = start_supervised!(TestGenServer)
10286

@@ -120,7 +104,7 @@ defmodule Sentry.LoggerBackendTest do
120104
end
121105

122106
test "captures errors from spawn/0 in Plug app" do
123-
ref = expect_sender_call()
107+
ref = register_before_send()
124108

125109
:get
126110
|> Plug.Test.conn("/spawn_error_route")
@@ -135,7 +119,7 @@ defmodule Sentry.LoggerBackendTest do
135119
test "sends two errors when a Plug process crashes if cowboy domain is not excluded" do
136120
Logger.configure_backend(Sentry.LoggerBackend, excluded_domains: [])
137121

138-
ref = expect_sender_call()
122+
ref = register_before_send()
139123

140124
{:ok, _plug_pid} = Plug.Cowboy.http(Sentry.ExamplePlugApplication, [], port: 8003)
141125

@@ -152,7 +136,7 @@ defmodule Sentry.LoggerBackendTest do
152136
excluded_domains: [:test_domain]
153137
)
154138

155-
ref = expect_sender_call()
139+
ref = register_before_send()
156140

157141
Logger.error("no domain")
158142
Logger.error("test_domain", domain: [:test_domain])
@@ -164,7 +148,7 @@ defmodule Sentry.LoggerBackendTest do
164148
test "includes Logger metadata for keys configured to be included" do
165149
Logger.configure_backend(Sentry.LoggerBackend, metadata: [:string, :number, :map, :list])
166150

167-
ref = expect_sender_call()
151+
ref = register_before_send()
168152

169153
pid = start_supervised!(TestGenServer)
170154
Sentry.TestGenServer.add_logger_metadata(pid, :string, "string")
@@ -182,7 +166,7 @@ defmodule Sentry.LoggerBackendTest do
182166

183167
test "does not include Logger metadata when disabled" do
184168
Logger.configure_backend(Sentry.LoggerBackend, metadata: [])
185-
ref = expect_sender_call()
169+
ref = register_before_send()
186170

187171
pid = start_supervised!(TestGenServer)
188172
Sentry.TestGenServer.add_logger_metadata(pid, :string, "string")
@@ -197,7 +181,7 @@ defmodule Sentry.LoggerBackendTest do
197181

198182
test "supports :all for Logger metadata" do
199183
Logger.configure_backend(Sentry.LoggerBackend, metadata: :all)
200-
ref = expect_sender_call()
184+
ref = register_before_send()
201185

202186
pid = start_supervised!(TestGenServer)
203187
Sentry.TestGenServer.add_logger_metadata(pid, :string, "string")
@@ -220,7 +204,7 @@ defmodule Sentry.LoggerBackendTest do
220204
test "sends all messages if :capture_log_messages is true" do
221205
Logger.configure_backend(Sentry.LoggerBackend, capture_log_messages: true)
222206

223-
ref = expect_sender_call()
207+
ref = register_before_send()
224208

225209
Logger.error("Testing")
226210

@@ -236,7 +220,7 @@ defmodule Sentry.LoggerBackendTest do
236220
capture_log_messages: true
237221
)
238222

239-
ref = expect_sender_call()
223+
ref = register_before_send()
240224

241225
Sentry.Context.set_user_context(%{user_id: 3})
242226
Logger.log(:warning, "Testing")
@@ -252,7 +236,7 @@ defmodule Sentry.LoggerBackendTest do
252236
test "does not send debug messages when configured to :error" do
253237
Logger.configure_backend(Sentry.LoggerBackend, capture_log_messages: true)
254238

255-
ref = expect_sender_call()
239+
ref = register_before_send()
256240

257241
Sentry.Context.set_user_context(%{user_id: 3})
258242

@@ -268,7 +252,7 @@ defmodule Sentry.LoggerBackendTest do
268252

269253
test "Sentry metadata and extra context are retrieved from callers" do
270254
Logger.configure_backend(Sentry.LoggerBackend, capture_log_messages: true)
271-
ref = expect_sender_call()
255+
ref = register_before_send()
272256

273257
Sentry.Context.set_extra_context(%{day_of_week: "Friday"})
274258
Sentry.Context.set_user_context(%{user_id: 3})
@@ -288,7 +272,7 @@ defmodule Sentry.LoggerBackendTest do
288272

289273
test "handles malformed :callers metadata" do
290274
Logger.configure_backend(Sentry.LoggerBackend, capture_log_messages: true)
291-
ref = expect_sender_call()
275+
ref = register_before_send()
292276

293277
dead_pid = spawn(fn -> :ok end)
294278

@@ -304,7 +288,7 @@ defmodule Sentry.LoggerBackendTest do
304288
capture_log_messages: true
305289
)
306290

307-
ref = expect_sender_call()
291+
ref = register_before_send()
308292

309293
Logger.log(:warning, "warn")
310294

@@ -326,4 +310,18 @@ defmodule Sentry.LoggerBackendTest do
326310
exit(:shutdown)
327311
end
328312
end
313+
314+
defp register_before_send(_context \\ %{}) do
315+
pid = self()
316+
ref = make_ref()
317+
318+
TestEnvironmentHelper.modify_env(:sentry,
319+
before_send_event: fn event ->
320+
send(pid, {ref, event})
321+
false
322+
end
323+
)
324+
325+
ref
326+
end
329327
end

test/sentry/client_test.exs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,10 @@ defmodule Sentry.ClientTest do
22
use ExUnit.Case
33

44
import ExUnit.CaptureLog
5-
import Mox
65
import Sentry.TestEnvironmentHelper
76

87
alias Sentry.{Client, Event}
98

10-
setup :set_mox_global
11-
setup :verify_on_exit!
12-
13-
setup do
14-
Mox.stub_with(Sentry.TransportSenderMock, Sentry.Transport.Sender)
15-
:ok
16-
end
17-
189
describe "render_event/1" do
1910
test "transforms structs into maps" do
2011
event = Event.transform_exception(%RuntimeError{message: "foo"}, user: %{id: 1})

0 commit comments

Comments
 (0)