This is an automated email from the ASF dual-hosted git repository. lburgazzoli pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-k-runtime.git
The following commit(s) were added to refs/heads/master by this push: new 33fcf5c java: cleanup loader and tests 33fcf5c is described below commit 33fcf5c9e1b99f1ddb920d10fce2c54d8302081e Author: lburgazzoli <lburgazz...@gmail.com> AuthorDate: Wed Aug 19 13:54:28 2020 +0200 java: cleanup loader and tests --- camel-k-loader-groovy/pom.xml | 23 --- camel-k-loader-java/pom.xml | 18 ++ .../k/loader/java/JavaSourceLoaderTest.groovy | 98 +++++++++++ .../camel/k/loader/java/model/EmployeeDTO.groovy} | 35 +--- .../camel/k/loader/java/support/TestRuntime.groovy | 75 ++++++++ .../camel/k/loader/java/RoutesLoaderTest.java | 191 --------------------- .../src/main/java/org/apache/camel/k/Runtime.java | 7 +- tooling/camel-k-test/pom.xml | 16 ++ 8 files changed, 220 insertions(+), 243 deletions(-) diff --git a/camel-k-loader-groovy/pom.xml b/camel-k-loader-groovy/pom.xml index 5fe3c55..41a1daa 100644 --- a/camel-k-loader-groovy/pom.xml +++ b/camel-k-loader-groovy/pom.xml @@ -76,12 +76,6 @@ <groupId>org.apache.camel.k</groupId> <artifactId>camel-k-test</artifactId> <scope>test</scope> - <exclusions> - <exclusion> - <groupId>org.codehaus.groovy</groupId> - <artifactId>*</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>org.apache.camel</groupId> @@ -120,23 +114,6 @@ </dependency> <dependency> - <groupId>org.spockframework</groupId> - <artifactId>spock-core</artifactId> - <version>${spock.version}</version> - <scope>test</scope> - <exclusions> - <exclusion> - <groupId>org.codehaus.groovy</groupId> - <artifactId>*</artifactId> - </exclusion> - <exclusion> - <groupId>junit</groupId> - <artifactId>*</artifactId> - </exclusion> - </exclusions> - </dependency> - - <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>${commons-dbcp2.version}</version> diff --git a/camel-k-loader-java/pom.xml b/camel-k-loader-java/pom.xml index c280a7c..fe2fda1 100644 --- a/camel-k-loader-java/pom.xml +++ b/camel-k-loader-java/pom.xml @@ -110,6 +110,24 @@ <build> <plugins> <plugin> + <groupId>org.codehaus.gmavenplus</groupId> + <artifactId>gmavenplus-plugin</artifactId> + <version>${gmavenplus-plugin.version}</version> + <executions> + <execution> + <goals> + <goal>addSources</goal> + <goal>addTestSources</goal> + <goal>compile</goal> + <goal>compileTests</goal> + </goals> + </execution> + </executions> + <configuration> + <invokeDynamic>true</invokeDynamic> + </configuration> + </plugin> + <plugin> <groupId>org.jboss.jandex</groupId> <artifactId>jandex-maven-plugin</artifactId> <executions> diff --git a/camel-k-loader-java/src/test/groovy/org/apache/camel/k/loader/java/JavaSourceLoaderTest.groovy b/camel-k-loader-java/src/test/groovy/org/apache/camel/k/loader/java/JavaSourceLoaderTest.groovy new file mode 100644 index 0000000..2b868f8 --- /dev/null +++ b/camel-k-loader-java/src/test/groovy/org/apache/camel/k/loader/java/JavaSourceLoaderTest.groovy @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.camel.k.loader.java + + +import org.apache.camel.k.loader.java.model.EmployeeDTO +import org.apache.camel.k.loader.java.support.TestRuntime +import org.apache.camel.model.ProcessDefinition +import org.apache.camel.model.SetBodyDefinition +import org.apache.camel.model.ToDefinition +import spock.lang.AutoCleanup +import spock.lang.Specification + +class JavaSourceLoaderTest extends Specification { + @AutoCleanup + def runtime = new TestRuntime() + + def "load routes with nested class"() { + when: + runtime.loadRoutes("classpath:MyRoutesWithNestedClass.java") + then: + with(runtime.context.routeDefinitions) { + it.size() == 1 + + it[0].outputs[0] instanceof SetBodyDefinition + it[0].outputs[1] instanceof ProcessDefinition + it[0].outputs[2] instanceof ToDefinition + + it[0].input.endpointUri == 'timer:tick' + } + } + + def "load routes with nested type"() { + when: + runtime.loadRoutes("classpath:MyRoutesWithNestedTypes.java") + runtime.context.applicationContextClassLoader.loadClass('MyRoutesWithNestedTypes$MyModel') + then: + noExceptionThrown() + } + + def "load routes with rest configuration"() { + when: + runtime.loadRoutes("classpath:MyRoutesWithRestConfiguration.java") + then: + runtime.context.restConfiguration.component == 'restlet' + } + + def "load routes with model"() { + when: + runtime.loadRoutes("classpath:MyRoutesWithModel.java") + then: + runtime.context.restDefinitions.any { + it.verbs.first().outType == EmployeeDTO.class.name + } + } + + def "load configuration"() { + when: + runtime.loadRoutes("classpath:MyRoutesConfig.java") + then: + runtime.configurations.size() == 1 + } + + + def "load"(location) { + expect: + runtime.loadRoutes(location) + + with(runtime.context.routeDefinitions) { + it[0].input.endpointUri ==~ /timer:.*tick/ + it[0].outputs[0] instanceof ToDefinition + } + where: + location << [ + "classpath:MyRoutes.java", + "classpath:MyRoutesWithNameOverride.java?name=MyRoutes.java", + "classpath:MyRoutesWithPackage.java", + "classpath:MyRoutesWithPackageAndComment.java", + "classpath:MyRoutesWithPackageAndLineComment.java", + "classpath:MyRoutesWithEndpointDsl.java" + ] + + } +} diff --git a/camel-k-loader-java/src/test/java/org/apache/camel/k/loader/java/model/EmployeeDTO.java b/camel-k-loader-java/src/test/groovy/org/apache/camel/k/loader/java/model/EmployeeDTO.groovy similarity index 61% rename from camel-k-loader-java/src/test/java/org/apache/camel/k/loader/java/model/EmployeeDTO.java rename to camel-k-loader-java/src/test/groovy/org/apache/camel/k/loader/java/model/EmployeeDTO.groovy index 65c4918..62b34d7 100644 --- a/camel-k-loader-java/src/test/java/org/apache/camel/k/loader/java/model/EmployeeDTO.java +++ b/camel-k-loader-java/src/test/groovy/org/apache/camel/k/loader/java/model/EmployeeDTO.groovy @@ -14,34 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.k.loader.java.model; +package org.apache.camel.k.loader.java.model -public class EmployeeDTO { - public int id; - public String name; - public String org; +import groovy.transform.CompileStatic - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getOrg() { - return org; - } - - public void setOrg(String org) { - this.org = org; - } +@CompileStatic +class EmployeeDTO { + int id + String name + String org } diff --git a/camel-k-loader-java/src/test/groovy/org/apache/camel/k/loader/java/support/TestRuntime.groovy b/camel-k-loader-java/src/test/groovy/org/apache/camel/k/loader/java/support/TestRuntime.groovy new file mode 100644 index 0000000..21f16e1 --- /dev/null +++ b/camel-k-loader-java/src/test/groovy/org/apache/camel/k/loader/java/support/TestRuntime.groovy @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.camel.k.loader.java.support + +import org.apache.camel.CamelContext +import org.apache.camel.RoutesBuilder +import org.apache.camel.impl.DefaultCamelContext +import org.apache.camel.k.CompositeClassloader +import org.apache.camel.k.Runtime +import org.apache.camel.model.ModelCamelContext + +import static org.apache.camel.k.listener.RoutesConfigurer.forRoutes + +class TestRuntime implements Runtime, AutoCloseable { + final ModelCamelContext context + final List<RoutesBuilder> builders + final List<Object> configurations + + TestRuntime() { + this.context = new DefaultCamelContext() + this.context.setApplicationContextClassLoader(new CompositeClassloader()) + this.builders = [] + this.configurations = [] + } + + @Override + CamelContext getCamelContext() { + return this.context + } + + @Override + void addRoutes(RoutesBuilder builder) { + this.builders << builder + this.context.addRoutes(builder) + } + + @Override + void addConfiguration(Object configuration) { + this.configurations.add(configuration) + } + + void loadRoutes(String... routes) { + routes.each { + forRoutes(it).accept(Phase.ConfigureRoutes, this) + } + } + + void start() { + context.start() + } + + @Override + void stop() { + context.stop() + } + + @Override + void close() { + stop() + } +} diff --git a/camel-k-loader-java/src/test/java/org/apache/camel/k/loader/java/RoutesLoaderTest.java b/camel-k-loader-java/src/test/java/org/apache/camel/k/loader/java/RoutesLoaderTest.java deleted file mode 100644 index 2519bab..0000000 --- a/camel-k-loader-java/src/test/java/org/apache/camel/k/loader/java/RoutesLoaderTest.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.camel.k.loader.java; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.stream.Stream; - -import org.apache.camel.CamelContext; -import org.apache.camel.RoutesBuilder; -import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.impl.DefaultCamelContext; -import org.apache.camel.k.CompositeClassloader; -import org.apache.camel.k.Runtime; -import org.apache.camel.k.Source; -import org.apache.camel.k.SourceLoader; -import org.apache.camel.k.Sources; -import org.apache.camel.k.listener.RoutesConfigurer; -import org.apache.camel.model.ProcessDefinition; -import org.apache.camel.model.RouteDefinition; -import org.apache.camel.model.SetBodyDefinition; -import org.apache.camel.model.ToDefinition; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; - -import static org.assertj.core.api.Assertions.assertThat; - -public class RoutesLoaderTest { - @Test - public void testLoadJavaWithNestedClass() throws Exception { - TestRuntime runtime = new TestRuntime(); - Source source = Sources.fromURI("classpath:MyRoutesWithNestedClass.java"); - SourceLoader loader = RoutesConfigurer.load(runtime, source); - - assertThat(loader).isInstanceOf(JavaSourceLoader.class); - assertThat(runtime.builders).hasSize(1); - assertThat(runtime.builders).first().isInstanceOf(RouteBuilder.class); - - RouteBuilder builder = (RouteBuilder)runtime.builders.get(0); - builder.setContext(runtime.getCamelContext()); - builder.configure(); - - List<RouteDefinition> routes = builder.getRouteCollection().getRoutes(); - assertThat(routes).hasSize(1); - assertThat(routes.get(0).getInput().getEndpointUri()).isEqualTo("timer:tick"); - assertThat(routes.get(0).getOutputs().get(0)).isInstanceOf(SetBodyDefinition.class); - assertThat(routes.get(0).getOutputs().get(1)).isInstanceOf(ProcessDefinition.class); - assertThat(routes.get(0).getOutputs().get(2)).isInstanceOf(ToDefinition.class); - } - - @Test - public void testLoadJavaWithRestConfiguration() throws Exception { - TestRuntime runtime = new TestRuntime(); - Source source = Sources.fromURI("classpath:MyRoutesWithRestConfiguration.java"); - SourceLoader loader = RoutesConfigurer.load(runtime, source); - - assertThat(loader).isInstanceOf(JavaSourceLoader.class); - assertThat(runtime.builders).hasSize(1); - assertThat(runtime.builders).first().isInstanceOf(RouteBuilder.class); - - runtime.getCamelContext().addRoutes(runtime.builders.get(0)); - - assertThat(runtime.getCamelContext().getRestConfiguration()).hasFieldOrPropertyWithValue("component", "restlet"); - } - - @Test - public void testLoadJavaConfiguration() throws Exception { - TestRuntime runtime = new TestRuntime(); - Source source = Sources.fromURI("classpath:MyRoutesConfig.java"); - SourceLoader loader = RoutesConfigurer.load(runtime, source); - - assertThat(loader).isInstanceOf(JavaSourceLoader.class); - assertThat(runtime.builders).isEmpty(); - assertThat(runtime.configurations).hasSize(1); - } - - @Test - public void testLoadJavaWithModel() throws Exception { - TestRuntime runtime = new TestRuntime(); - Source source = Sources.fromURI("classpath:MyRoutesWithModel.java"); - SourceLoader loader = RoutesConfigurer.load(runtime, source); - - assertThat(loader).isInstanceOf(JavaSourceLoader.class); - assertThat(runtime.builders).hasSize(1); - assertThat(runtime.builders).first().isInstanceOf(RouteBuilder.class); - - runtime.getCamelContext().addRoutes(runtime.builders.get(0)); - - assertThat(runtime.camelContext.getRestDefinitions()).first().satisfies(definition -> { - assertThat(definition.getVerbs()).first().satisfies(verb -> { - assertThat(verb).hasFieldOrPropertyWithValue("outType", "org.apache.camel.k.loader.java.model.EmployeeDTO"); - }); - }); - } - - @Test - public void testLoadJavaWithNestedType() throws Exception { - TestRuntime runtime = new TestRuntime(); - Source source = Sources.fromURI("classpath:MyRoutesWithNestedTypes.java"); - SourceLoader loader = RoutesConfigurer.load(runtime, source); - - assertThat(loader).isInstanceOf(JavaSourceLoader.class); - assertThat(runtime.builders).hasSize(1); - assertThat(runtime.builders).first().isInstanceOf(RouteBuilder.class); - - runtime.getCamelContext().addRoutes(runtime.builders.get(0)); - runtime.getCamelContext().getApplicationContextClassLoader().loadClass("MyRoutesWithNestedTypes$MyModel"); - } - - @ParameterizedTest - @MethodSource("parameters") - public void testLoaders(String location, Class<? extends SourceLoader> type) throws Exception { - TestRuntime runtime = new TestRuntime(); - Source source = Sources.fromURI(location); - SourceLoader loader = RoutesConfigurer.load(runtime, source); - - assertThat(loader).isInstanceOf(type); - assertThat(runtime.builders).hasSize(1); - assertThat(runtime.builders).first().isInstanceOf(RouteBuilder.class); - - RouteBuilder builder = (RouteBuilder)runtime.builders.get(0); - builder.setContext(runtime.getCamelContext()); - builder.configure(); - - List<RouteDefinition> routes = builder.getRouteCollection().getRoutes(); - assertThat(routes).hasSize(1); - assertThat(routes.get(0).getInput().getEndpointUri()).matches("timer:/*tick"); - assertThat(routes.get(0).getOutputs().get(0)).isInstanceOf(ToDefinition.class); - } - - static Stream<Arguments> parameters() { - return Stream.of( - Arguments.arguments("classpath:MyRoutes.java", JavaSourceLoader.class), - Arguments.arguments("classpath:MyRoutesWithNameOverride.java?name=MyRoutes.java", JavaSourceLoader.class), - Arguments.arguments("classpath:MyRoutesWithPackage.java", JavaSourceLoader.class), - Arguments.arguments("classpath:MyRoutesWithPackageAndComment.java", JavaSourceLoader.class), - Arguments.arguments("classpath:MyRoutesWithPackageAndLineComment.java", JavaSourceLoader.class), - Arguments.arguments("classpath:MyRoutesWithEndpointDsl.java", JavaSourceLoader.class) - ); - } - - static class TestRuntime implements Runtime { - private final DefaultCamelContext camelContext; - private final List<RoutesBuilder> builders; - private final List<Object> configurations; - - public TestRuntime() { - this.camelContext = new DefaultCamelContext(); - this.camelContext.setApplicationContextClassLoader(new CompositeClassloader()); - this.builders = new ArrayList<>(); - this.configurations = new ArrayList<>(); - } - - @Override - public CamelContext getCamelContext() { - return this.camelContext; - } - - @Override - public void addRoutes(RoutesBuilder builder) { - this.builders.add(builder); - } - - @Override - public void addConfiguration(Object configuration) { - this.configurations.add(configuration); - } - - @Override - public void setPropertiesLocations(Collection<String> locations) { - } - } -} - diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java index 980f9e0..d0979a0 100644 --- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java +++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java @@ -32,7 +32,7 @@ import org.apache.camel.spi.Registry; import static org.apache.camel.util.CollectionHelper.mapOf; -public interface Runtime extends HasCamelContext { +public interface Runtime extends HasCamelContext, AutoCloseable { default <T extends CamelContext> T getCamelContext(Class<T> type) { return getCamelContext().adapt(type); @@ -113,6 +113,11 @@ public interface Runtime extends HasCamelContext { getCamelContext().stop(); } + @Override + default void close() throws Exception { + stop(); + } + enum Phase { Starting, ConfigureProperties, diff --git a/tooling/camel-k-test/pom.xml b/tooling/camel-k-test/pom.xml index 364c095..2ddb5fa 100644 --- a/tooling/camel-k-test/pom.xml +++ b/tooling/camel-k-test/pom.xml @@ -60,6 +60,22 @@ </dependency> <dependency> + <groupId>org.spockframework</groupId> + <artifactId>spock-core</artifactId> + <version>${spock.version}</version> + <exclusions> + <exclusion> + <groupId>org.codehaus.groovy</groupId> + <artifactId>*</artifactId> + </exclusion> + <exclusion> + <groupId>junit</groupId> + <artifactId>*</artifactId> + </exclusion> + </exclusions> + </dependency> + + <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy</artifactId> </dependency>