package Ġcom . l sd consult ing . exception handling . server . tracer Ċ Ċ import Ġbr ave . Span Ċ import Ġbr ave . Tracer Ċ import Ġbr ave . propagation . Trace Context Ċ import Ġorg . apache . commons . lang 3 . Random Utils Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . hamcrest . Matchers Ċ import Ġorg . hamcrest . Matchers .` is ` Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . mockito . Mockito Ċ import Ġorg . springframework . boot . test . util . Test Property Values Ċ import Ġorg . springframework . cloud . sle uth . auto config . instrument . web . Trace Web Auto Configuration Ċ import Ġorg . springframework . context . annotation . Annotation Config ApplicationContext Ċ Ċ internal Ġclass ĠS le uth Request Tracer Configuration Should Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtrace Id Ġ= ĠRandom Utils . next Long ( MIN _ VALID _ TRACE _ ID _ VALUE , ĠLong . MAX _ VALUE ) ĊĠĠĠ Ġprivate Ġval Ġtrace Id String Ġ= Ġjava . lang . Long . to HexString ( trace Id ) ĊĠĠĠ Ġprivate Ġval Ġmock Tracer Ġ= ĠMockito . mock ( Tracer :: class . java ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠAnnotation Config ApplicationContext ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun Ġclose Context () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnot Register Request Tracer When No Tracer Available () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġload ( false ) ĊĠĠĠĠĠĠĠ ĠassertThat ( context . getBean ( Request Tracer :: class . java ). get Trace Id (), ĠMatch ers . null Value ()) ĊĠĠĠĠĠĠĠ ĠMockito . verify No Interactions ( mock Tracer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġhandle Missing Span () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġload ( true ) ĊĠĠĠĠĠĠĠ ĠassertThat ( context . getBean ( Request Tracer :: class . java ). get Trace Id (), ĠMatch ers . null Value ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġregister Request Tracer When S le uth Enabled () Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Tracer () ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġload ( true , Ġ" spring . sle uth . enabled = true ") ĊĠĠĠĠĠĠĠ ĠassertThat ( context . getBean ( Request Tracer :: class . java ). get Trace Id (), Ġ` is `( trace Id String )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnot Register Request Tracer When S le uth Enabled () Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Tracer () ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġload ( true , Ġ" spring . sle uth . enabled = true ") ĊĠĠĠĠĠĠĠ ĠassertThat ( context . getBean ( Request Tracer :: class . java ). get Trace Id (), ĠMatch ers . notNull Value ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġregister Request Tracer () Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Tracer () ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġload ( true ) ĊĠĠĠĠĠĠĠ ĠassertThat ( context . getBean ( Request Tracer :: class . java ). get Trace Id (), Ġ` is `( trace Id String )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload ( register Tracer Bean : ĠBoolean , Ġvar arg Ġproperties : ĠString ): ĠAnnotation Config ApplicationContext Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠAnnotation Config ApplicationContext () ĊĠĠĠĠĠĠĠ ĠTest Property Values . of (* properties ). apply To ( ctx ) ĊĠĠĠĠĠĠĠ Ġif Ġ( register Tracer Bean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . default List able BeanFactory . register Singleton (" mock Tracer ", Ġmock Tracer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . register ( Trace Web Auto Configuration :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġctx . register ( S le uth Request Tracer Configuration :: class . java ) ĊĠĠĠĠĠĠĠ Ġctx . register ( Default Request Tracer Configuration :: class . java ) ĊĠĠĠĠĠĠĠ Ġctx . refresh () ĊĠĠĠĠĠĠĠ Ġreturn Ġctx ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Tracer () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Span Ġ= ĠMockito . mock ( Span :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġmock Trace Context Ġ= ĠTrace Context . newBuilder (). span Id ( 1 ). trace Id ( trace Id ). build () ĊĠĠĠĠĠĠĠ ĠMockito .` when `( mock Span . context ()). thenReturn ( mock Trace Context ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( mock Tracer . current Span ()). thenReturn ( mock Span ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMIN _ VALID _ TRACE _ ID _ VALUE Ġ= Ġ 1 1 5 2 9 2 1 5 0 4 6 0 6 8 4 6 9 7 6 L ĊĠĠĠ Ġ} Ċ } Ċ