From 27ca7777e9e9ae9a261c7ae0d7077c17b294499b Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Fri, 25 Mar 2016 09:50:30 +0100 Subject: [PATCH] Polish and added tests --- .../sleuth/instrument/web/ServletUtils.java | 5 -- .../sleuth/instrument/web/TraceWebAspect.java | 12 ++-- .../AsyncCustomAutoConfigurationTest.java | 49 ++++++++++++++++ .../LocalComponentTraceCallableTest.java | 58 +++++++++++++++++++ 4 files changed, 113 insertions(+), 11 deletions(-) create mode 100644 spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/AsyncCustomAutoConfigurationTest.java create mode 100644 spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/LocalComponentTraceCallableTest.java diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/ServletUtils.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/ServletUtils.java index 0fc050556..b6f33a35a 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/ServletUtils.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/ServletUtils.java @@ -28,11 +28,6 @@ import javax.servlet.http.HttpServletResponse; * @since 1.0.0 */ class ServletUtils { - static boolean hasHeader(HttpServletRequest request, HttpServletResponse response, - String name) { - String value = request.getHeader(name); - return value != null || response.getHeader(name) != null; - } static String getHeader(HttpServletRequest request, HttpServletResponse response, String name) { diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAspect.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAspect.java index 5fac8cc1c..d778a8a60 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAspect.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceWebAspect.java @@ -78,27 +78,27 @@ public class TraceWebAspect { } @Pointcut("@within(org.springframework.web.bind.annotation.RestController)") - private void anyRestControllerAnnotated() { + private void anyRestControllerAnnotated() { // NOSONAR } @Pointcut("@within(org.springframework.stereotype.Controller)") - private void anyControllerAnnotated() { + private void anyControllerAnnotated() { // NOSONAR } @Pointcut("execution(public java.util.concurrent.Callable *(..))") - private void anyPublicMethodReturningCallable() { + private void anyPublicMethodReturningCallable() { // NOSONAR } @Pointcut("(anyRestControllerAnnotated() || anyControllerAnnotated()) && anyPublicMethodReturningCallable()") - private void anyControllerOrRestControllerWithPublicAsyncMethod() { + private void anyControllerOrRestControllerWithPublicAsyncMethod() { // NOSONAR } @Pointcut("execution(public org.springframework.web.context.request.async.WebAsyncTask *(..))") - private void anyPublicMethodReturningWebAsyncTask() { + private void anyPublicMethodReturningWebAsyncTask() { // NOSONAR } @Pointcut("(anyRestControllerAnnotated() || anyControllerAnnotated()) && anyPublicMethodReturningWebAsyncTask()") - private void anyControllerOrRestControllerWithPublicWebAsyncTaskMethod() { + private void anyControllerOrRestControllerWithPublicWebAsyncTaskMethod() { // NOSONAR } @Around("anyControllerOrRestControllerWithPublicAsyncMethod()") diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/AsyncCustomAutoConfigurationTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/AsyncCustomAutoConfigurationTest.java new file mode 100644 index 000000000..2f73d8fdb --- /dev/null +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/AsyncCustomAutoConfigurationTest.java @@ -0,0 +1,49 @@ +/* + * Copyright 2013-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.sleuth.instrument.async; + +import org.junit.Test; +import org.springframework.scheduling.annotation.AsyncConfigurer; + +import static org.assertj.core.api.BDDAssertions.then; +import static org.mockito.Mockito.mock; + +/** + * @author Marcin Grzejszczak + */ +public class AsyncCustomAutoConfigurationTest { + + @Test + public void should_return_bean_when_its_not_a_async_configurer() throws Exception { + AsyncCustomAutoConfiguration configuration = new AsyncCustomAutoConfiguration(); + + Object bean = configuration + .postProcessAfterInitialization(new Object(), "someName"); + + then(bean).isNotInstanceOf(LazyTraceAsyncCustomizer.class); + } + + @Test + public void should_return_lazy_async_configurer_when_bean_is_async_configurer() throws Exception { + AsyncCustomAutoConfiguration configuration = new AsyncCustomAutoConfiguration(); + + Object bean = configuration + .postProcessAfterInitialization(mock(AsyncConfigurer.class), "someName"); + + then(bean).isInstanceOf(LazyTraceAsyncCustomizer.class); + } +} \ No newline at end of file diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/LocalComponentTraceCallableTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/LocalComponentTraceCallableTest.java new file mode 100644 index 000000000..c9760656e --- /dev/null +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/LocalComponentTraceCallableTest.java @@ -0,0 +1,58 @@ +/* + * Copyright 2013-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.sleuth.instrument.async; + +import java.util.Random; + +import org.junit.Test; +import org.springframework.cloud.sleuth.DefaultSpanNamer; +import org.springframework.cloud.sleuth.NoOpSpanReporter; +import org.springframework.cloud.sleuth.Span; +import org.springframework.cloud.sleuth.TraceKeys; +import org.springframework.cloud.sleuth.Tracer; +import org.springframework.cloud.sleuth.log.NoOpSpanLogger; +import org.springframework.cloud.sleuth.sampler.AlwaysSampler; +import org.springframework.cloud.sleuth.trace.DefaultTracer; + +import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.then; + +/** + * @author Marcin Grzejszczak + */ +public class LocalComponentTraceCallableTest { + + Span closedSpan; + Tracer tracer = new DefaultTracer(new AlwaysSampler(), new Random(), + new DefaultSpanNamer(), new NoOpSpanLogger(), new NoOpSpanReporter()) { + @Override public Span close(Span span) { + LocalComponentTraceCallableTest.this.closedSpan = span; + return super.close(span); + } + }; + + @Test + public void should_delegate_to_callable_wrapped_in_a_local_component() throws Exception { + LocalComponentTraceCallable callable = new LocalComponentTraceCallable<>(this.tracer, new TraceKeys(), new DefaultSpanNamer(), + () -> "hello"); + + String response = callable.call(); + + then(response).isEqualTo("hello"); + then(this.closedSpan).isALocalComponentSpan(); + } + +} \ No newline at end of file