@@ -59,24 +59,23 @@ defmodule Sentry.ClientTest do
5959 end
6060
6161 test "respects the :sample_rate option" , % { bypass: bypass } do
62- event = Event . create_event ( [ ] )
63-
6462 # Always sends with sample rate of 1.
6563 Bypass . expect_once ( bypass , fn conn ->
6664 Plug.Conn . resp ( conn , 200 , ~s< {"id": "340"}> )
6765 end )
6866
69- assert { :ok , "340" } = Client . send_event ( event , sample_rate: 1.0 )
67+ assert { :ok , "340" } = Client . send_event ( Event . create_event ( [ ] ) , sample_rate: 1.0 )
7068
7169 # Never sends with sample rate of 0.
72- assert :unsampled = Client . send_event ( event , sample_rate: 0.0 )
70+ assert :unsampled = Client . send_event ( Event . create_event ( [ ] ) , sample_rate: 0.0 )
7371
7472 # Either sends or doesn't with :sample_rate of 0.5.
7573 Bypass . expect ( bypass , fn conn ->
7674 Plug.Conn . resp ( conn , 200 , ~s< {"id": "340"}> )
7775 end )
7876
7977 for _ <- 1 .. 10 do
78+ event = Event . create_event ( message: "Unique: #{ System . unique_integer ( ) } " )
8079 result = Client . send_event ( event , sample_rate: 0.5 )
8180 assert match? ( { :ok , _ } , result ) or result == :unsampled
8281 end
@@ -276,5 +275,45 @@ defmodule Sentry.ClientTest do
276275 assert % Event { } = event
277276 assert event . message == "Something went wrong"
278277 end
278+
279+ test "dedupes events" , % { bypass: bypass } do
280+ { :current_stacktrace , stacktrace } = Process . info ( self ( ) , :current_stacktrace )
281+
282+ events = [
283+ Event . create_event ( message: "Dedupes by message" )
284+ |> Tuple . duplicate ( 2 ) ,
285+ Event . create_event ( exception: % RuntimeError { message: "Dedupes by exception" } )
286+ |> Tuple . duplicate ( 2 ) ,
287+ Event . create_event ( message: "Dedupes by message and stacktrace" , stacktrace: stacktrace )
288+ |> Tuple . duplicate ( 2 ) ,
289+ {
290+ Event . create_event (
291+ message: "Same message but diff extra" ,
292+ user: % { id: 1 } ,
293+ request: % { method: :GET }
294+ ) ,
295+ Event . create_event (
296+ message: "Same message but diff extra" ,
297+ user: % { id: 2 } ,
298+ request: % { method: :POST }
299+ )
300+ }
301+ ]
302+
303+ for { event , dup_event } <- events do
304+ Bypass . expect_once ( bypass , fn conn ->
305+ Plug.Conn . resp ( conn , 200 , ~s< {"id": "340"}> )
306+ end )
307+
308+ assert { :ok , "340" } = Client . send_event ( event , [ ] )
309+
310+ log =
311+ capture_log ( fn ->
312+ assert :excluded = Client . send_event ( dup_event , [ ] )
313+ end )
314+
315+ assert log =~ "Event dropped due to being a duplicate of a previously-captured event."
316+ end
317+ end
279318 end
280319end
0 commit comments