3434import io .micrometer .observation .ObservationHandler .FirstMatchingCompositeObservationHandler ;
3535import io .micrometer .observation .ObservationPredicate ;
3636import io .micrometer .observation .ObservationRegistry ;
37+ import io .micrometer .observation .aop .ObservedAspect ;
3738import io .micrometer .tracing .Tracer ;
3839import io .micrometer .tracing .handler .TracingAwareMeterObservationHandler ;
3940import io .micrometer .tracing .handler .TracingObservationHandler ;
41+ import org .aspectj .weaver .Advice ;
4042import org .junit .jupiter .api .Test ;
4143import org .mockito .Answers ;
4244
5860 *
5961 * @author Moritz Halbritter
6062 * @author Jonatan Ivanov
63+ * @author Vedran Pavic
6164 */
6265class ObservationAutoConfigurationTests {
6366
@@ -77,6 +80,7 @@ void beansShouldNotBeSuppliedWhenMicrometerObservationIsNotOnClassPath() {
7780 assertThat (context ).hasSingleBean (MeterRegistry .class );
7881 assertThat (context ).doesNotHaveBean (ObservationRegistry .class );
7982 assertThat (context ).doesNotHaveBean (ObservationHandler .class );
83+ assertThat (context ).doesNotHaveBean (ObservedAspect .class );
8084 assertThat (context ).doesNotHaveBean (ObservationHandlerGrouping .class );
8185 });
8286 }
@@ -88,6 +92,7 @@ void supplyObservationRegistryWhenMicrometerCoreAndTracingAreNotOnClassPath() {
8892 ObservationRegistry observationRegistry = context .getBean (ObservationRegistry .class );
8993 Observation .start ("test-observation" , observationRegistry ).stop ();
9094 assertThat (context ).doesNotHaveBean (ObservationHandler .class );
95+ assertThat (context ).hasSingleBean (ObservedAspect .class );
9196 assertThat (context ).doesNotHaveBean (ObservationHandlerGrouping .class );
9297 });
9398 }
@@ -99,6 +104,7 @@ void supplyMeterHandlerAndGroupingWhenMicrometerCoreIsOnClassPathButTracingIsNot
99104 Observation .start ("test-observation" , observationRegistry ).stop ();
100105 assertThat (context ).hasSingleBean (ObservationHandler .class );
101106 assertThat (context ).hasSingleBean (DefaultMeterObservationHandler .class );
107+ assertThat (context ).hasSingleBean (ObservedAspect .class );
102108 assertThat (context ).hasSingleBean (ObservationHandlerGrouping .class );
103109 assertThat (context ).hasBean ("metricsObservationHandlerGrouping" );
104110 });
@@ -110,6 +116,7 @@ void supplyOnlyTracingObservationHandlerGroupingWhenMicrometerCoreIsNotOnClassPa
110116 ObservationRegistry observationRegistry = context .getBean (ObservationRegistry .class );
111117 Observation .start ("test-observation" , observationRegistry ).stop ();
112118 assertThat (context ).doesNotHaveBean (ObservationHandler .class );
119+ assertThat (context ).hasSingleBean (ObservedAspect .class );
113120 assertThat (context ).hasSingleBean (ObservationHandlerGrouping .class );
114121 assertThat (context ).hasBean ("tracingObservationHandlerGrouping" );
115122 });
@@ -123,6 +130,7 @@ void supplyMeterHandlerAndGroupingWhenMicrometerCoreAndTracingAreOnClassPath() {
123130 // TracingAwareMeterObservationHandler that we don't test here
124131 Observation .start ("test-observation" , observationRegistry );
125132 assertThat (context ).hasSingleBean (ObservationHandler .class );
133+ assertThat (context ).hasSingleBean (ObservedAspect .class );
126134 assertThat (context ).hasSingleBean (TracingAwareMeterObservationHandler .class );
127135 assertThat (context ).hasSingleBean (ObservationHandlerGrouping .class );
128136 assertThat (context ).hasBean ("metricsAndTracingObservationHandlerGrouping" );
@@ -138,6 +146,7 @@ void supplyMeterHandlerAndGroupingWhenMicrometerCoreAndTracingAreOnClassPathButT
138146 Observation .start ("test-observation" , observationRegistry ).stop ();
139147 assertThat (context ).hasSingleBean (ObservationHandler .class );
140148 assertThat (context ).hasSingleBean (DefaultMeterObservationHandler .class );
149+ assertThat (context ).hasSingleBean (ObservedAspect .class );
141150 assertThat (context ).hasSingleBean (ObservationHandlerGrouping .class );
142151 assertThat (context ).hasBean ("metricsAndTracingObservationHandlerGrouping" );
143152 });
@@ -155,6 +164,7 @@ void autoConfiguresDefaultMeterObservationHandler() {
155164 assertThat (meterRegistry .get ("test-observation" ).timer ().count ()).isOne ();
156165 assertThat (context ).hasSingleBean (DefaultMeterObservationHandler .class );
157166 assertThat (context ).hasSingleBean (ObservationHandler .class );
167+ assertThat (context ).hasSingleBean (ObservedAspect .class );
158168 });
159169 }
160170
@@ -164,6 +174,12 @@ void allowsDefaultMeterObservationHandlerToBeDisabled() {
164174 .run ((context ) -> assertThat (context ).doesNotHaveBean (ObservationHandler .class ));
165175 }
166176
177+ @ Test
178+ void allowsObservedAspectToBeDisabled () {
179+ this .contextRunner .withClassLoader (new FilteredClassLoader (Advice .class ))
180+ .run ((context ) -> assertThat (context ).doesNotHaveBean (ObservedAspect .class ));
181+ }
182+
167183 @ Test
168184 void autoConfiguresObservationPredicates () {
169185 this .contextRunner .withUserConfiguration (ObservationPredicates .class ).run ((context ) -> {
0 commit comments