package Ġio . sentry . log 4 j 2 Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . any Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . any OrNull Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġio . sentry . Hub Adapter Ċ import Ġio . sentry . IT r ansport Factory Ċ import Ġio . sentry . S entry Ċ import Ġio . sentry . S entry Level Ċ import Ġio . sentry . test . check Event Ċ import Ġio . sentry . transport . IT r ansport Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Zone Id Ċ import Ġkotlin . test . After Test Ċ import Ġkotlin . test . Before Test Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertNull Ċ import Ġkotlin . test . assertTrue Ċ import Ġorg . apache . logging . log 4 j . Level Ċ import Ġorg . apache . logging . log 4 j . Log Manager Ċ import Ġorg . apache . logging . log 4 j . Marker Manager Ċ import Ġorg . apache . logging . log 4 j . Thread Context Ċ import Ġorg . apache . logging . log 4 j . core . Logger Context Ċ import Ġorg . apache . logging . log 4 j . core . config . Appender Ref Ċ import Ġorg . apache . logging . log 4 j . core . config . Configuration Ċ import Ġorg . apache . logging . log 4 j . core . config . Logger Config Ċ import Ġorg . apache . logging . log 4 j . spi . Extended Logger Ċ import Ġorg . await ility . kotlin . await Ċ Ċ class ĠS entry Appender Test Ġ{ ĊĠĠĠ Ġprivate Ġclass ĠFix ture Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Context Ġ= ĠLog Manager . getContext () Ġas ĠLogger Context ĊĠĠĠĠĠĠĠ Ġvar Ġtransport Factory Ġ= Ġmock < IT r ansport Factory >() ĊĠĠĠĠĠĠĠ Ġvar Ġtransport Ġ= Ġmock < IT r ansport >() ĊĠĠĠĠĠĠĠ Ġval Ġut c TimeZone : ĠZone Id Ġ= ĠZone Id . of (" UTC ") ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( transport Factory . create ( any (), Ġany ())). thenReturn ( transport ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetS ut ( transport Factory : ĠI Transport Factory ? Ġ= Ġnull , Ġminimum Breadcrumb Level : ĠLevel ? Ġ= Ġnull , Ġminimum Event Level : ĠLevel ? Ġ= Ġnull , Ġdebug : ĠBoolean ? Ġ= Ġnull ): ĠExtended Logger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transport Factory Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . transport Factory Ġ= Ġtransport Factory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger Context . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig : ĠConfiguration Ġ= Ġlogger Context . configuration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp ender Ġ= ĠS entry Appender (" sentry ", Ġnull , Ġ" http :// key @ localhost / proj ", Ġminimum Breadcrumb Level , Ġminimum Event Level , Ġdebug , Ġthis . transport Factory , ĠHub Adapter . getInstance ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . add Appender ( appender ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref Ġ= ĠApp ender Ref . create Appender Ref (" sentry ", Ġnull , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogger Config Ġ= ĠLogger Config . create Logger ( false , ĠLevel . TRACE , Ġ" sentry _ logger ", Ġ" true ", ĠarrayOf ( ref ), Ġnull , Ġconfig , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger Config . add Appender ( appender , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . add Logger ( S entry Appender Test :: class . java . name , Ġlogger Config ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger Context . update Log gers ( config ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp ender . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger Context . start () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLog Manager . getContext (). getLogger ( S entry Appender Test :: class . java . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġfixture Ġ= ĠFix ture () ĊĊĠĠĠ Ġ@ After Test ĊĠĠĠ Ġfun Ġ` stop Ġlog 4 j 2 `() Ġ{ ĊĠĠĠĠĠĠĠ Ġfixture . logger Context . stop () ĊĠĠĠĠĠĠĠ ĠS entry . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Before Test ĊĠĠĠ Ġfun Ġ` clear ĠM DC `() Ġ{ ĊĠĠĠĠĠĠĠ ĠThread Context . clear All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` does Ġnot Ġinitialize ĠS entry Ġif ĠS entry Ġis Ġalready Ġenabled `() Ġ{ ĊĠĠĠĠĠĠĠ ĠS entry . init Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . dsn Ġ= Ġ" http :// key @ localhost / proj " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . environment Ġ= Ġ" manual - environment " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Transport Factory ( fixture . transport Factory ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġlogger . error (" testing Ġenvironment Ġfield ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" manual - environment ", Ġevent . environment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġmessage `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . DEBUG ) ĊĠĠĠĠĠĠĠ Ġlogger . debug (" testing Ġmessage Ġconversion Ġ{}, Ġ{}", Ġ 1 , Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( event . message ) Ġ{ Ġmessage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" testing Ġmessage Ġconversion Ġ 1 , Ġ 2 ", Ġmessage . formatted ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" testing Ġmessage Ġconversion Ġ{}, Ġ{}", Ġmessage . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( listOf (" 1 ", Ġ" 2 "), Ġmessage . params ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" io . sentry . log 4 j 2 . S entry Appender Test ", Ġevent . logger ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` event Ġdate Ġis Ġin ĠUTC `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . DEBUG ) ĊĠĠĠĠĠĠĠ Ġval Ġut c Time Ġ= ĠLocalDateTime . now ( fixture . utc TimeZone ) ĊĊĠĠĠĠĠĠĠ Ġlogger . debug (" testing Ġevent Ġdate ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Time Ġ= ĠInstant . of Epoch Milli ( event . timestamp . time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. at Zone ( fixture . utc TimeZone ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to LocalDateTime () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġevent Time . plus Seconds ( 1 ). is After ( utc Time ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġevent Time . minus Seconds ( 1 ). is Before ( utc Time ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġtrace Ġlog Ġlevel Ġto ĠS entry Ġlevel `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . TRACE ) ĊĠĠĠĠĠĠĠ Ġlogger . trace (" testing Ġtrace Ġlevel ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( S entry Level . DEBUG , Ġevent . level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġdebug Ġlog Ġlevel Ġto ĠS entry Ġlevel `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . DEBUG ) ĊĠĠĠĠĠĠĠ Ġlogger . debug (" testing Ġdebug Ġlevel ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( S entry Level . DEBUG , Ġevent . level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġinfo Ġlog Ġlevel Ġto ĠS entry Ġlevel `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . INFO ) ĊĠĠĠĠĠĠĠ Ġlogger . info (" testing Ġinfo Ġlevel ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( S entry Level . INFO , Ġevent . level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġwarn Ġlog Ġlevel Ġto ĠS entry Ġlevel `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . WARN ) ĊĠĠĠĠĠĠĠ Ġlogger . warn (" testing Ġwarn Ġlevel ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( S entry Level . WARNING , Ġevent . level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġerror Ġlog Ġlevel Ġto ĠS entry Ġlevel `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . ERROR ) ĊĠĠĠĠĠĠĠ Ġlogger . error (" testing Ġerror Ġlevel ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( S entry Level . ERROR , Ġevent . level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` con verts Ġfatal Ġlog Ġlevel Ġto ĠS entry Ġlevel `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . FATAL ) ĊĠĠĠĠĠĠĠ Ġlogger . fatal (" testing Ġfatal Ġlevel ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( S entry Level . FATAL , Ġevent . level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` att aches Ġthread Ġinformation `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . WARN ) ĊĠĠĠĠĠĠĠ Ġlogger . warn (" testing Ġthread Ġinformation ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( event . get Extra (" thread _ name ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sets Ġtags Ġfrom ĠThread Context `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . WARN ) ĊĠĠĠĠĠĠĠ ĠThread Context . put (" key ", Ġ" value ") ĊĠĠĠĠĠĠĠ Ġlogger . warn (" testing ĠM DC Ġtags ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( map Of (" key " Ġto Ġ" value "), Ġevent . contexts [" Context ĠData "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ignore Ġset Ġtags Ġwith Ġnull Ġvalues Ġfrom ĠThread Context `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . WARN ) ĊĠĠĠĠĠĠĠ ĠThread Context . put (" key 1 ", Ġnull ) ĊĠĠĠĠĠĠĠ ĠThread Context . put (" key 2 ", Ġ" value ") ĊĠĠĠĠĠĠĠ Ġlogger . warn (" testing ĠM DC Ġtags ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( event . contexts [" Context ĠData "]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Data Ġ= Ġit Ġas ĠMap < *, Ġ*> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( context Data [" key 1 "]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" value ", Ġcontext Data [" key 2 "]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` does Ġnot Ġset Ġcontext Ġdata Ġif Ġall Ġcontext Ġentries Ġare Ġnull `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . WARN ) ĊĠĠĠĠĠĠĠ ĠThread Context . put (" key 1 ", Ġnull ) ĊĠĠĠĠĠĠĠ ĠThread Context . put (" key 2 ", Ġnull ) ĊĠĠĠĠĠĠĠ Ġlogger . warn (" testing ĠM DC Ġtags ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( event . contexts [" Context ĠData "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` does Ġnot Ġcreate ĠM DC Ġcontext Ġwhen Ġno ĠM DC Ġtags Ġare Ġset `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . WARN ) ĊĠĠĠĠĠĠĠ Ġlogger . warn (" testing Ġwithout ĠM DC Ġtags ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( event . contexts . containsKey (" M DC ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` att aches Ġmarker Ġinformation `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . WARN ) ĊĠĠĠĠĠĠĠ Ġval Ġsql Marker Ġ= ĠMarker Manager . get Marker (" SQL "). set Parents ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMarker Manager . get Marker (" SQL _ QUERY "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMarker Manager . get Marker (" SQL _ UPDATE ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġlogger . warn ( sql Marker , Ġ" testing Ġmarker Ġtags ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" SQL [ ĠSQL _ QUERY , ĠSQL _ UPDATE Ġ] ", Ġevent . get Extra (" marker ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sets ĠSDK Ġversion `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . INFO ) ĊĠĠĠĠĠĠĠ Ġlogger . info (" testing Ġsdk Ġversion ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( event . sdk ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Build Config . S ENTRY _ LOG 4 J 2 _ SDK _ NAME , Ġit . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Build Config . VERSION _ NAME , Ġit . version ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it . packages ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( it . packages !!. any Ġ{ Ġpkg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" maven : io . sentry : sentry - log 4 j 2 " Ġ== Ġpkg . name Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Config . VERSION _ NAME Ġ== Ġpkg . version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` att aches Ġbreadcrumb s Ġwith Ġlevel Ġhigher Ġthan Ġminimum Breadcrumb Level `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . WARN , Ġminimum Breadcrumb Level Ġ= ĠLevel . DEBUG ) ĊĠĠĠĠĠĠĠ Ġval Ġut c Time Ġ= ĠLocalDateTime . now ( fixture . utc TimeZone ) ĊĊĠĠĠĠĠĠĠ Ġlogger . debug (" this Ġshould Ġbe Ġa Ġbreadcrumb Ġ# 1 ") ĊĠĠĠĠĠĠĠ Ġlogger . info (" this Ġshould Ġbe Ġa Ġbreadcrumb Ġ# 2 ") ĊĠĠĠĠĠĠĠ Ġlogger . warn (" testing Ġmessage Ġwith Ġbreadcrumb s ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( event . breadcrumbs ) Ġ{ Ġbreadcrumb s Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġbreadcrumb s . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbreadcrumb Ġ= Ġbreadcrumb s [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbreadcrumb Time Ġ= ĠInstant . of Epoch Milli ( event . timestamp . time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. at Zone ( fixture . utc TimeZone ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to LocalDateTime () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġbreadcrumb Time . plus Seconds ( 1 ). is After ( utc Time ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġbreadcrumb Time . minus Seconds ( 1 ). is Before ( utc Time ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" this Ġshould Ġbe Ġa Ġbreadcrumb Ġ# 1 ", Ġbreadcrumb . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" io . sentry . log 4 j 2 . S entry Appender Test ", Ġbreadcrumb . category ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( S entry Level . DEBUG , Ġbreadcrumb . level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` does Ġnot Ġattach Ġbreadcrumb s Ġwith Ġlevel Ġlower Ġthan Ġminimum Breadcrumb Level `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut ( minimum Event Level Ġ= ĠLevel . WARN , Ġminimum Breadcrumb Level Ġ= ĠLevel . INFO ) ĊĊĠĠĠĠĠĠĠ Ġlogger . debug (" this Ġshould ĠNOT Ġbe Ġa Ġbreadcrumb ") ĊĠĠĠĠĠĠĠ Ġlogger . info (" this Ġshould Ġbe Ġa Ġbreadcrumb ") ĊĠĠĠĠĠĠĠ Ġlogger . warn (" testing Ġmessage Ġwith Ġbreadcrumb s ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( event . breadcrumbs ) Ġ{ Ġbreadcrumb s Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġbreadcrumb s . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" this Ġshould Ġbe Ġa Ġbreadcrumb ", Ġbreadcrumb s [ 0 ]. message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` att aches Ġbreadcrumb s Ġfor Ġdefault Ġapp ender Ġconfiguration `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut () ĊĊĠĠĠĠĠĠĠ Ġlogger . debug (" this Ġshould Ġnot Ġbe Ġa Ġbreadcrumb Ġas Ġthe Ġlevel Ġis Ġlower Ġthan Ġthe Ġminimum ĠINFO ") ĊĠĠĠĠĠĠĠ Ġlogger . info (" this Ġshould Ġbe Ġa Ġbreadcrumb ") ĊĠĠĠĠĠĠĠ Ġlogger . warn (" this Ġshould Ġnot Ġbe Ġsent Ġas Ġthe Ġevent Ġbut Ġbe Ġa Ġbreadcrumb ") ĊĠĠĠĠĠĠĠ Ġlogger . error (" this Ġshould Ġbe Ġsent Ġas Ġthe Ġevent ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( event . breadcrumbs ) Ġ{ Ġbreadcrumb s Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġbreadcrumb s . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" this Ġshould Ġbe Ġa Ġbreadcrumb ", Ġbreadcrumb s [ 0 ]. message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" this Ġshould Ġnot Ġbe Ġsent Ġas Ġthe Ġevent Ġbut Ġbe Ġa Ġbreadcrumb ", Ġbreadcrumb s [ 1 ]. message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` uses Ġoptions Ġset Ġin Ġproperties Ġfile `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġlogger . error (" some Ġevent ") ĊĊĠĠĠĠĠĠĠ Ġawait . until Assert ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( fixture . transport ). send ( check Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" release Ġfrom Ġs entry . properties ", Ġevent . release ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sets Ġthe Ġdebug Ġmode `() Ġ{ ĊĠĠĠĠĠĠĠ Ġfixture . getS ut ( debug Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( Hub Adapter . getInstance (). options . isDebug ) ĊĠĠĠ Ġ} Ċ } Ċ