@@ -18,8 +18,8 @@ defmodule Sentry.TestHelpers do
1818
1919 @ spec put_test_config ( keyword ( ) ) :: :ok
2020 def put_test_config ( config ) when is_list ( config ) do
21- all_original_config = all_config ( )
22-
21+ # Store original values from both process dictionary and :persistent_term
22+ # We validate each key individually like Sentry.put_config/2 does
2323 original_config =
2424 for { key , val } <- config do
2525 renamed_key =
@@ -28,19 +28,45 @@ defmodule Sentry.TestHelpers do
2828 other -> other
2929 end
3030
31- current_val = :persistent_term . get ( { :sentry_config , renamed_key } , :__not_set__ )
32- Sentry . put_config ( renamed_key , val )
33- { renamed_key , current_val }
31+ # Validate this single key-value pair (this also transforms values like DSN strings)
32+ validated_config = Sentry.Config . validate! ( [ { renamed_key , val } ] )
33+ validated_val = Keyword . fetch! ( validated_config , renamed_key )
34+
35+ # Store original values
36+ current_process_val = Process . get ( { :sentry_test_config , renamed_key } , :__not_set__ )
37+ current_persistent_val = :persistent_term . get ( { :sentry_config , renamed_key } , :__not_set__ )
38+
39+ # Set in both locations:
40+ # - Process dictionary for process-local isolation
41+ # - :persistent_term so spawned processes (like sender pool workers) can see it
42+ Process . put ( { :sentry_test_config , renamed_key } , validated_val )
43+ :persistent_term . put ( { :sentry_config , renamed_key } , validated_val )
44+
45+ { renamed_key , current_process_val , current_persistent_val }
3446 end
3547
48+ # Register cleanup to restore original values in both locations
3649 ExUnit.Callbacks . on_exit ( fn ->
3750 Enum . each ( original_config , fn
38- { key , :__not_set__ } -> :persistent_term . erase ( { :sentry_config , key } )
39- { key , original_val } -> :persistent_term . put ( { :sentry_config , key } , original_val )
40- end )
51+ { key , :__not_set__ , :__not_set__ } ->
52+ Process . delete ( { :sentry_test_config , key } )
53+ :persistent_term . erase ( { :sentry_config , key } )
4154
42- assert all_original_config == all_config ( )
55+ { key , :__not_set__ , persistent_val } ->
56+ Process . delete ( { :sentry_test_config , key } )
57+ :persistent_term . put ( { :sentry_config , key } , persistent_val )
58+
59+ { key , process_val , :__not_set__ } ->
60+ Process . put ( { :sentry_test_config , key } , process_val )
61+ :persistent_term . erase ( { :sentry_config , key } )
62+
63+ { key , process_val , persistent_val } ->
64+ Process . put ( { :sentry_test_config , key } , process_val )
65+ :persistent_term . put ( { :sentry_config , key } , persistent_val )
66+ end )
4367 end )
68+
69+ :ok
4470 end
4571
4672 @ spec set_mix_shell ( module ( ) ) :: :ok
@@ -101,9 +127,9 @@ defmodule Sentry.TestHelpers do
101127 items
102128 |> Enum . chunk_every ( 2 )
103129 |> Enum . flat_map ( fn
104- [ header , item ] -> [ { decode! ( header ) , decode! ( item ) } ]
130+ [ header , item ] -> [ { decode! ( header ) , decode! ( item ) } ]
105131
106- [ "" ] -> [ ]
132+ [ "" ] -> [ ]
107133 end )
108134 end
109135end
0 commit comments