package Ġio . sentry Ċ Ċ 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 . check Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . never Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . spy Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . times Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġio . sentry . protocol . App Ċ import Ġio . sentry . protocol . Request Ċ import Ġio . sentry . protocol . User Ċ import Ġjava . util . Date Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertNot Equals Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertNull Ċ import Ġkotlin . test . assertSame Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠS entry Tracer Test Ġ{ ĊĊĠĠĠ Ġprivate Ġclass ĠFix ture Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠS entry Options () ĊĠĠĠĠĠĠĠ Ġval Ġhub : ĠHub ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . dsn Ġ= Ġ" https :// key @ sentry . io / proj " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . environment Ġ= Ġ" environment " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . release Ġ= Ġ" release @ 3 . 0 . 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhub Ġ= Ġspy ( Hub ( options )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhub . bind Client ( mock ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetS ut ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Configuration : ĠS entry . Options Configuration < S entry Options > Ġ= ĠS entry . Options Configuration Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Timestamp : ĠDate ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwaitFor Children : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Finished Callback : ĠTransaction Finished Callback ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsampled : ĠBoolean ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ): ĠS entry Tracer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Configuration . configure ( options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠS entry Tracer ( Transaction Context (" name ", Ġ" op ", Ġsampled ), Ġhub , Ġstart Timestamp , ĠwaitFor Children , Ġtransaction Finished Callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfixture Ġ= ĠFix ture () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` does Ġnot Ġadd Ġmore Ġspans Ġthan Ġconfigured Ġin Ġoptions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . max Spans Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Debug ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Logger ( System Out Logger ()) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġtracer . start Child (" child 1 ") ĊĠĠĠĠĠĠĠ Ġtracer . start Child (" child 2 ") ĊĠĠĠĠĠĠĠ Ġtracer . start Child (" child 3 ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġtracer . children . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġspan Ġlimit Ġis Ġreached , Ġstart Child Ġreturns ĠNo Op Span `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . max Spans Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Debug ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Logger ( System Out Logger ()) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġtracer . start Child (" child 1 ") ĊĠĠĠĠĠĠĠ Ġtracer . start Child (" child 2 ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( tracer . start Child (" child 3 ") Ġis ĠNo Op Span ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġis Ġcreated , Ġstart Timestamp Ġis Ġset `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ ĠassertNotNull ( tracer . start Timestamp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġis Ġcreated , Ġtimestamp Ġis Ġnot Ġset `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ ĠassertNull ( tracer . timestamp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġis Ġcreated , Ġcontext Ġis Ġset `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ ĠassertNotNull ( tracer . span Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġis Ġcreated , Ġby Ġdefault Ġis Ġnot Ġsampled `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ ĠassertNull ( tracer . is Sample d ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġis Ġfinished , Ġtimestamp Ġis Ġset `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġtracer . finish () ĊĠĠĠĠĠĠĠ ĠassertNotNull ( tracer . timestamp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġis Ġfinished Ġwith Ġstatus , Ġtimestamp Ġand Ġstatus Ġare Ġset `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġtracer . finish ( Span Status . ABORT ED ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( tracer . timestamp ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Span Status . ABORT ED , Ġtracer . status ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġis Ġfinished , Ġtransaction Ġis Ġcaptured `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġtracer . finish () ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub ). capture Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it . transaction , Ġtracer . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany OrNull () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġis Ġfinished , Ġtransaction Ġis Ġcleared Ġfrom Ġthe Ġscope `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġfixture . hub . configure Scope Ġ{ Ġit . transaction Ġ= Ġtracer Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull ( fixture . hub . span ) ĊĠĠĠĠĠĠĠ Ġtracer . finish () ĊĠĠĠĠĠĠĠ ĠassertNull ( fixture . hub . span ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġwith Ġthrowable Ġset Ġis Ġfinished , Ġspan Ġcontext Ġis Ġassociated Ġwith Ġthrowable `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġex Ġ= ĠRuntimeException () ĊĠĠĠĠĠĠĠ Ġtracer . throwable Ġ= Ġex ĊĠĠĠĠĠĠĠ Ġtracer . finish () ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub ). set Span Context ( ex , Ġtracer . root , Ġ" name ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġwith Ġrequest Ġset Ġis Ġfinished , Ġrequest Ġis Ġset Ġon Ġthe Ġtransaction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest () ĊĠĠĠĠĠĠĠ Ġtracer . request Ġ= Ġrequest ĊĠĠĠĠĠĠĠ Ġtracer . finish () ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub ). capture Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( request , Ġit . request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany OrNull () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġwith Ġcontexts Ġis Ġfinished , Ġcontexts Ġare Ġset Ġon Ġthe Ġtransaction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġcontexts Ġ= Ġtracer . contexts ĊĠĠĠĠĠĠĠ Ġval Ġapp Ġ= ĠApp () ĊĠĠĠĠĠĠĠ Ġcontexts . set App ( app ) ĊĠĠĠĠĠĠĠ Ġcontexts [" custom "] Ġ= Ġ" value " ĊĠĠĠĠĠĠĠ Ġtracer . finish () ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub ). capture Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( app , Ġit . contexts . app ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" value ", Ġit . contexts [" custom "]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it . contexts . trace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( tracer . span Context . trace Id , Ġit . trace Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( tracer . span Context . span Id , Ġit . span Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( tracer . span Context . parent Span Id , Ġit . parent Span Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( tracer . span Context . op , Ġit . op ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( tracer . span Context . description , Ġit . description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( tracer . span Context . status , Ġit . status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( tracer . span Context . sampled , Ġit . sampled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany OrNull () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġwith Ġcontexts Ġhas Ġoverwritten Ġtrace , Ġtracer Ġspan Ġcontext Ġis Ġapplied Ġto Ġtransaction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġcontexts Ġ= Ġtracer . contexts ĊĠĠĠĠĠĠĠ Ġval Ġspan Context Ġ= ĠSpan Context (" op ") ĊĠĠĠĠĠĠĠ Ġcontexts . trace Ġ= Ġspan Context ĊĠĠĠĠĠĠĠ Ġtracer . finish () ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub ). capture Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it . contexts . trace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Equals ( span Context , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( tracer . span Context . trace Id , Ġit . trace Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( tracer . span Context . span Id , Ġit . span Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( tracer . span Context . parent Span Id , Ġit . parent Span Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( tracer . span Context . op , Ġit . op ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( tracer . span Context . description , Ġit . description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( tracer . span Context . status , Ġit . status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( tracer . span Context . sampled , Ġit . sampled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany OrNull () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġwith Ġtags Ġset Ġis Ġfinished , Ġtags Ġare Ġset Ġon Ġthe Ġtransaction Ġbut Ġnot Ġon Ġthe Ġtrace Ġcontext `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġtracer . setTag (" tag 1 ", Ġ" val 1 ") ĊĠĠĠĠĠĠĠ Ġtracer . setTag (" tag 2 ", Ġ" val 2 ") ĊĠĠĠĠĠĠĠ Ġtracer . finish () ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub ). capture Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( map Of (" tag 1 " Ġto Ġ" val 1 ", Ġ" tag 2 " Ġto Ġ" val 2 "), Ġit . tags ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it . contexts . trace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( empty Map (), Ġit . tags ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany OrNull () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` not Ġsampled Ġspans Ġare Ġfiltered Ġout `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut ( sampled Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtracer . start Child (" op 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġtracer . start Child (" op 2 ") ĊĠĠĠĠĠĠĠ Ġspan . span Context . sampled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtracer . finish () ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub ). capture Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġit . spans . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" op 1 ", Ġit . spans . first (). op ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany OrNull () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` returns Ġs entry - trace Ġheader `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( tracer . to S entry Trace ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` starting Ġchild Ġcreates Ġa Ġnew Ġspan `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġtracer . start Child (" op ") Ġas ĠSpan ĊĠĠĠĠĠĠĠ ĠassertNotNull ( span ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( span . span Id ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( span . start Timestamp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` starting Ġchild Ġadds Ġa Ġspan Ġto Ġtransaction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġtracer . start Child (" op ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġtracer . children . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( span , Ġtracer . children . first ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` span Ġcreated Ġwith Ġstart Child Ġhas Ġparent Ġspan Ġid Ġthe Ġsame Ġas Ġtransaction Ġspan Ġid `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġtracer . start Child (" op ") Ġas ĠSpan ĊĠĠĠĠĠĠĠ ĠassertEquals ( tracer . root . span Id , Ġspan . parent Span Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` span Ġcreated Ġwith Ġstart Child Ġhas Ġthe Ġsame Ġtrace Ġid Ġas Ġtransaction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġtracer . start Child (" op ") Ġas ĠSpan ĊĠĠĠĠĠĠĠ ĠassertEquals ( tracer . root . trace Id , Ġspan . trace Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` starting Ġchild Ġwith Ġoperation Ġand Ġdescription Ġcreates Ġa Ġnew Ġspan `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġtracer . start Child (" op ", Ġ" description ") Ġas ĠSpan ĊĠĠĠĠĠĠĠ ĠassertNotNull ( span ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( span . span Id ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( span . start Timestamp ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" op ", Ġspan . operation ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" description ", Ġspan . description ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` starting Ġchild Ġwith Ġoperation Ġand Ġdescription Ġadds Ġa Ġspan Ġto Ġtransaction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġtracer . start Child (" op ", Ġ" description ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġtracer . children . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( span , Ġtracer . children . first ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` span Ġcreated Ġwith Ġstart Child Ġwith Ġoperation Ġand Ġdescription Ġhas Ġparent Ġspan Ġid Ġthe Ġsame Ġas Ġtransaction Ġspan Ġid `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġtracer . start Child (" op ", Ġ" description ") Ġas ĠSpan ĊĠĠĠĠĠĠĠ ĠassertEquals ( tracer . root . span Id , Ġspan . parent Span Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` span Ġcreated Ġwith Ġstart Child Ġwith Ġoperation Ġand Ġdescription Ġhas Ġthe Ġsame Ġtrace Ġid Ġas Ġtransaction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġtracer . start Child (" op ", Ġ" description ") Ġas ĠSpan ĊĠĠĠĠĠĠĠ ĠassertEquals ( tracer . root . trace Id , Ġspan . trace Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` setting Ġop Ġsets Ġop Ġon ĠTrace Context `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġtracer . operation Ġ= Ġ" op " ĊĠĠĠĠĠĠĠ Ġtracer . finish () ĊĠĠĠĠĠĠĠ ĠassertEquals (" op ", Ġtracer . span Context . operation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` setting Ġdescription Ġsets Ġdescription Ġon ĠTrace Context `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġtracer . description Ġ= Ġ" desc " ĊĠĠĠĠĠĠĠ Ġtracer . finish () ĊĠĠĠĠĠĠĠ ĠassertEquals (" desc ", Ġtracer . span Context . description ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` setting Ġstatus Ġsets Ġstatus Ġon ĠTrace Context `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġtracer . status Ġ= ĠSpan Status . AL READY _ EXISTS ĊĠĠĠĠĠĠĠ Ġtracer . finish () ĊĠĠĠĠĠĠĠ ĠassertEquals ( Span Status . AL READY _ EXISTS , Ġtracer . span Context . status ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġis Ġnot Ġfinished , Ġstatus Ġis Ġnull `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ ĠassertNull ( tracer . status ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġis Ġnot Ġfinished , Ġstatus Ġcan Ġbe Ġread `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracer Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġtracer . status Ġ= ĠSpan Status . ABORT ED ĊĠĠĠĠĠĠĠ ĠassertEquals ( Span Status . ABORT ED , Ġtracer . status ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġfinish Ġis Ġcalled Ġtwice , Ġdo Ġnothing `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġex Ġ= ĠRuntimeException () ĊĠĠĠĠĠĠĠ Ġtransaction . throwable Ġ= Ġex ĊĊĠĠĠĠĠĠĠ Ġtransaction . finish ( Span Status . OK ) ĊĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= Ġtransaction . timestamp ĊĊĠĠĠĠĠĠĠ Ġtransaction . finish ( Span Status . UNKNOWN _ ERROR ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcall Ġonly Ġonce ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub ). set Span Context ( ex , Ġtransaction . root , Ġ" name ") ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub ). capture Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it . contexts . trace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Span Status . OK , Ġit . status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany OrNull () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Span Status . OK , Ġtransaction . status ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( timestamp , Ġtransaction . timestamp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġtransaction Ġwas Ġnot Ġfinished , Ġis Finished Ġreturns Ġfalse `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut () ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( transaction . is Finished ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġspan Ġwas Ġfinished , Ġis Finished Ġreturns Ġtrue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġtransaction . finish () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( transaction . is Finished ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġstart Timestamp Ġis Ġgiven , Ġuse Ġit Ġas Ġstart Timestamp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate ( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut ( start Timestamp Ġ= Ġdate ) ĊĊĠĠĠĠĠĠĠ ĠassertSame ( date , Ġtransaction . start Timestamp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġstart Timestamp Ġis Ġnullable , Ġset Ġit Ġautomatically `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut ( start Timestamp Ġ= Ġnull ) ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( transaction . start Timestamp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġwaiting Ġfor Ġchildren , Ġfinish ing Ġtransaction Ġdoes Ġnot Ġcall Ġhub Ġif Ġall Ġchildren Ġare Ġnot Ġfinished `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut ( waitFor Children Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtransaction . start Child (" op ") ĊĠĠĠĠĠĠĠ Ġtransaction . finish () ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub , Ġnever ()). capture Transaction ( any (), Ġany ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġwaiting Ġfor Ġchildren , Ġfinish ing Ġtransaction Ġcalls Ġhub Ġif Ġall Ġchildren Ġare Ġfinished `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut ( waitFor Children Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġtransaction . start Child (" op ") ĊĠĠĠĠĠĠĠ Ġchild . finish () ĊĠĠĠĠĠĠĠ Ġtransaction . finish () ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub ). capture Transaction ( any (), Ġany OrNull ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġwaiting Ġfor Ġchildren , Ġfinish ing Ġtransaction Ġcalls Ġtransaction Listener `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtransaction Listener Called Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut ( waitFor Children Ġ= Ġtrue , Ġtransaction Finished Callback Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Listener Called Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġtransaction . start Child (" op ") ĊĠĠĠĠĠĠĠ Ġchild . finish () ĊĠĠĠĠĠĠĠ Ġtransaction . finish () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( transaction Listener Called ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġwaiting Ġfor Ġchildren , Ġhub Ġis Ġnot Ġcalled Ġuntil Ġtransaction Ġis Ġfinished `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut ( waitFor Children Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġtransaction . start Child (" op ") ĊĠĠĠĠĠĠĠ Ġchild . finish () ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub , Ġnever ()). capture Transaction ( any (), Ġany ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġwaiting Ġfor Ġchildren , Ġfinish ing Ġlast Ġchild Ġcalls Ġhub Ġif Ġtransaction Ġis Ġalready Ġfinished `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut ( waitFor Children Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġtransaction . start Child (" op ") ĊĠĠĠĠĠĠĠ Ġtransaction . finish ( Span Status . INVALID _ ARGUMENT ) ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub , Ġnever ()). capture Transaction ( any (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġchild . finish () ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub , Ġtimes ( 1 )). capture Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Span Status . INVALID _ ARGUMENT , Ġit . status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany OrNull () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` finish ing Ġun finished Ġspans Ġwith Ġthe Ġtransaction Ġtimestamp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut ( sampled Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtransaction . start Child (" op ") ĊĠĠĠĠĠĠĠ Ġtransaction . start Child (" op 2 ") ĊĠĠĠĠĠĠĠ Ġtransaction . finish ( Span Status . INVALID _ ARGUMENT ) ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub , Ġtimes ( 1 )). capture Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= Ġit . timestamp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġit . spans . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( timestamp , Ġit . spans [ 0 ]. timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Span Status . DEAD LINE _ EX CE EDED , Ġit . spans [ 0 ]. status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Span Status . DEAD LINE _ EX CE EDED , Ġit . spans [ 1 ]. status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany OrNull () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` returns Ġtrace Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Trace Sampling Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġfixture . hub . setUser ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" user - id " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġothers Ġ= Ġmap Of (" segment " Ġto Ġ" pro ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġtrace Ġ= Ġtransaction . trace State () ĊĠĠĠĠĠĠĠ ĠassertNotNull ( trace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( transaction . span Context . trace Id , Ġit . trace Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" key ", Ġit . publicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" environment ", Ġit . environment ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" release @ 3 . 0 . 0 ", Ġit . release ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( transaction . name , Ġit . transaction ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it . user ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" user - id ", Ġit . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" pro ", Ġit . segment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` trace Ġstate Ġdoes Ġnot Ġchange Ġonce Ġcomputed `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Trace Sampling Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġtrace Before User Set Ġ= Ġtransaction . trace State () ĊĠĠĠĠĠĠĠ Ġfixture . hub . setUser ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" user - id " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġtrace After User Set Ġ= Ġtransaction . trace State () ĊĠĠĠĠĠĠĠ ĠassertNotNull ( trace After User Set ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it , Ġtrace Before User Set ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( it . user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` returns Ġtrace Ġstate Ġheader `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Trace Sampling Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġtransaction . to Trace State Header () ĊĠĠĠĠĠĠĠ ĠassertNotNull ( header ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" trac est ate ", Ġit . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sets ĠI Transaction Ġdata Ġas Ġextra Ġin ĠS entry Transaction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut ( sampled Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtransaction . setData (" key ", Ġ" val ") ĊĠĠĠĠĠĠĠ Ġtransaction . finish () ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub ). capture Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" val ", Ġit . get Extra (" key ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany OrNull () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sets ĠSpan Ġdata Ġas Ġdata Ġin ĠS entry Span `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġfixture . getS ut ( sampled Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġspan Ġ= Ġtransaction . start Child (" op ") ĊĠĠĠĠĠĠĠ Ġspan . setData (" key ", Ġ" val ") ĊĠĠĠĠĠĠĠ Ġspan . finish () ĊĠĠĠĠĠĠĠ Ġtransaction . finish () ĊĠĠĠĠĠĠĠ Ġverify ( fixture . hub ). capture Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it . spans . first (). data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" val ", Ġit [" key "]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany OrNull () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ