diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootRequestHandler.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootRequestHandler.java index 56a94cea4..c801c4830 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootRequestHandler.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootRequestHandler.java @@ -30,7 +30,9 @@ import reactor.core.publisher.Flux; public class AzureSpringBootRequestHandler extends AzureSpringFunctionInitializer { public O handleRequest(I foo, ExecutionContext context) { - context.getLogger().info("Handler Java HTTP trigger processed a request."); + if (context != null) { + context.getLogger().fine("Handler Java HTTP trigger processed a request."); + } initialize(context); Object convertedEvent = convertEvent(foo); diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringFunctionInitializer.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringFunctionInitializer.java index 0fb0bdb1e..d11b35d88 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringFunctionInitializer.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringFunctionInitializer.java @@ -46,7 +46,7 @@ public class AzureSpringFunctionInitializer implements Closeable { private AtomicBoolean initialized = new AtomicBoolean(); - private Class configurationClass; + private Class configurationClass; @Autowired(required = false) private FunctionCatalog catalog; @@ -61,7 +61,6 @@ public class AzureSpringFunctionInitializer implements Closeable { this(getStartClass()); } - @Override public void close() throws IOException { if (AzureSpringFunctionInitializer.context != null) { @@ -73,24 +72,27 @@ public class AzureSpringFunctionInitializer implements Closeable { protected void initialize(ExecutionContext ctxt) { ConfigurableApplicationContext context = AzureSpringFunctionInitializer.context; - + if (!this.initialized.compareAndSet(false, true)) { return; } - ctxt.getLogger().info("Initializing function"); - - if (context==null) { + if (ctxt != null) { + ctxt.getLogger().info("Initializing function"); + } + + if (context == null) { synchronized (AzureSpringFunctionInitializer.class) { - if (context==null) { + if (context == null) { SpringApplicationBuilder builder = new SpringApplicationBuilder( configurationClass); - ClassUtils.overrideThreadContextClassLoader(AzureSpringFunctionInitializer.class.getClassLoader()); + ClassUtils.overrideThreadContextClassLoader( + AzureSpringFunctionInitializer.class.getClassLoader()); context = builder.web(false).run(); AzureSpringFunctionInitializer.context = context; } } - + } context.getAutowireCapableBeanFactory().autowireBean(this); @@ -116,7 +118,8 @@ public class AzureSpringFunctionInitializer implements Closeable { } private static Class getStartClass() { - ClassLoader classLoader = org.springframework.cloud.function.adapter.azure.AzureSpringFunctionInitializer.class.getClassLoader(); + ClassLoader classLoader = org.springframework.cloud.function.adapter.azure.AzureSpringFunctionInitializer.class + .getClassLoader(); if (System.getenv("MAIN_CLASS") != null) { return ClassUtils.resolveClassName(System.getenv("MAIN_CLASS"), classLoader); } @@ -144,8 +147,10 @@ public class AzureSpringFunctionInitializer implements Closeable { .getValue("Main-Class"); if (startClass != null) { Class aClass = ClassUtils.forName(startClass, - org.springframework.cloud.function.adapter.azure.AzureSpringFunctionInitializer.class.getClassLoader()); - SpringBootApplication declaredAnnotation = aClass.getDeclaredAnnotation(SpringBootApplication.class); + org.springframework.cloud.function.adapter.azure.AzureSpringFunctionInitializer.class + .getClassLoader()); + SpringBootApplication declaredAnnotation = aClass + .getDeclaredAnnotation(SpringBootApplication.class); if (declaredAnnotation != null) { return aClass; } diff --git a/spring-cloud-function-samples/function-sample-azure/pom.xml b/spring-cloud-function-samples/function-sample-azure/pom.xml index 13b8f0984..b47ea38c7 100644 --- a/spring-cloud-function-samples/function-sample-azure/pom.xml +++ b/spring-cloud-function-samples/function-sample-azure/pom.xml @@ -46,13 +46,8 @@ - junit - junit - test - - - org.mockito - mockito-core + org.springframework.boot + spring-boot-starter-test test diff --git a/spring-cloud-function-samples/function-sample-azure/src/test/java/example/MapTests.java b/spring-cloud-function-samples/function-sample-azure/src/test/java/example/MapTests.java new file mode 100644 index 000000000..a1e78e64e --- /dev/null +++ b/spring-cloud-function-samples/function-sample-azure/src/test/java/example/MapTests.java @@ -0,0 +1,45 @@ +/* + * Copyright 2016-2017 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 example; + +import org.junit.Test; + +import org.springframework.cloud.function.adapter.azure.AzureSpringBootRequestHandler; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Dave Syer + * + */ +public class MapTests { + + @Test + public void test() { + Bar result = new Config().uppercase().apply(new Foo("foo")); + assertThat(result.getValue()).isEqualTo("FOO"); + } + + @Test + public void start() throws Exception { + AzureSpringBootRequestHandler handler = new AzureSpringBootRequestHandler<>(); + Bar result = handler.handleRequest(new Foo("foo"), null); + handler.close(); + assertThat(result.getValue()).isEqualTo("FOO"); + } + +}