Repository: camel Updated Branches: refs/heads/master 16163aa05 -> d59125097
CAMEL-9875 CamelBlueprintTestSupport lacks support for multiple PIDs Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/c6b14ba1 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c6b14ba1 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c6b14ba1 Branch: refs/heads/master Commit: c6b14ba1bb9cf0cadd5c78b11110db2f7b50a8ef Parents: 16163aa Author: Kevin Earls <ke...@kevinearls.com> Authored: Fri Apr 22 11:47:28 2016 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Fri Apr 22 21:13:04 2016 +0200 ---------------------------------------------------------------------- .../blueprint/CamelBlueprintTestSupport.java | 26 +++++-- ...ultiConfigurationFileAndOverrideAltTest.java | 63 ++++++++++++++++ ...adMultiConfigurationFileAndOverrideTest.java | 64 ++++++++++++++++ .../src/test/resources/etc/otherstuff.cfg | 20 +++++ .../configadmin-loadmultifileoverride.xml | 78 ++++++++++++++++++++ 5 files changed, 244 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/c6b14ba1/components/camel-test-blueprint/src/main/java/org/apache/camel/test/blueprint/CamelBlueprintTestSupport.java ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/main/java/org/apache/camel/test/blueprint/CamelBlueprintTestSupport.java b/components/camel-test-blueprint/src/main/java/org/apache/camel/test/blueprint/CamelBlueprintTestSupport.java index 35c05c4..3bbfbef 100644 --- a/components/camel-test-blueprint/src/main/java/org/apache/camel/test/blueprint/CamelBlueprintTestSupport.java +++ b/components/camel-test-blueprint/src/main/java/org/apache/camel/test/blueprint/CamelBlueprintTestSupport.java @@ -57,7 +57,7 @@ import org.osgi.service.cm.Configuration; import org.osgi.service.cm.ConfigurationAdmin; /** - * Base class for OSGi Blueprint unit tests with Camel. + * Base class for OSGi Blueprint unit tests with Camel */ public abstract class CamelBlueprintTestSupport extends CamelTestSupport { /** Name of a system property that sets camel context creation timeout. */ @@ -97,24 +97,36 @@ public abstract class CamelBlueprintTestSupport extends CamelTestSupport { // load configuration file String[] file = loadConfigAdminConfigurationFile(); + String[][] configAdminPidFiles = new String[0][0]; if (file != null) { - if (file.length != 2) { - throw new IllegalArgumentException("The returned String[] from loadConfigAdminConfigurationFile must be of length 2, was " + file.length); + if (file.length % 2 !=0) { // This needs to return pairs of filename and pid + throw new IllegalArgumentException("The length of the String[] returned from loadConfigAdminConfigurationFile must divisible by 2, was " + file.length); } - if (!new File(file[0]).exists()) { - throw new IllegalArgumentException("The provided file \"" + file[0] + "\" from loadConfigAdminConfigurationFile doesn't exist"); + configAdminPidFiles = new String[file.length / 2 ][2]; + + int pair = 0; + for (int i=0; i < file.length; i+=2) { + String fileName = file[i]; + String pid = file[i + 1]; + if (!new File(fileName).exists()) { + throw new IllegalArgumentException("The provided file \"" + fileName + "\" from loadConfigAdminConfigurationFile doesn't exist"); + } + configAdminPidFiles[pair][0] = fileName; + configAdminPidFiles[pair][1] = pid; + pair++; } } + // fetch initial configadmin configuration if provided programmatically Properties initialConfiguration = new Properties(); String pid = setConfigAdminInitialConfiguration(initialConfiguration); if (pid != null) { - file = new String[] {prepareInitialConfigFile(initialConfiguration), pid}; + configAdminPidFiles = new String[][] {{prepareInitialConfigFile(initialConfiguration), pid}}; } final String symbolicName = getClass().getSimpleName(); final BundleContext answer = CamelBlueprintHelper.createBundleContext(symbolicName, getBlueprintDescriptor(), - includeTestBundle(), getBundleFilter(), getBundleVersion(), getBundleDirectives(), file); + includeTestBundle(), getBundleFilter(), getBundleVersion(), getBundleDirectives(), configAdminPidFiles); boolean expectReload = expectBlueprintContainerReloadOnConfigAdminUpdate(); http://git-wip-us.apache.org/repos/asf/camel/blob/c6b14ba1/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminLoadMultiConfigurationFileAndOverrideAltTest.java ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminLoadMultiConfigurationFileAndOverrideAltTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminLoadMultiConfigurationFileAndOverrideAltTest.java new file mode 100644 index 0000000..c12220e --- /dev/null +++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminLoadMultiConfigurationFileAndOverrideAltTest.java @@ -0,0 +1,63 @@ +/** + * 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.test.blueprint; + +import org.junit.Test; + +import java.util.Dictionary; + +/** + * This test should be run in tandem with ConfigAdminLoadConfigurationFileAndOverrideTest. These examples will load a + * Blueprint .cfg file with multiple property placeholders defined. We need two tests to make sure we + * process both of them correctly + */ +public class ConfigAdminLoadMultiConfigurationFileAndOverrideAltTest extends CamelBlueprintTestSupport { + @Override + protected String getBlueprintDescriptor() { + // which blueprint XML file to use for this test + return "org/apache/camel/test/blueprint/configadmin-loadmultifileoverride.xml"; + } + + @Override + protected String[] loadConfigAdminConfigurationFile() { + // which .cfg files to use, and their corresponding persistence-ids + return new String[]{"src/test/resources/etc/stuff.cfg", "stuff", "src/test/resources/etc/otherstuff.cfg", "otherstuff"}; + } + + @Override + protected String useOverridePropertiesWithConfigAdmin(Dictionary props) throws Exception { + // override / add extra properties + props.put("destination", "mock:extra"); + + // return the persistence-id to use + return "stuff"; + } + + @Test + public void testConfigAdmin() throws Exception { + // mock:original comes from <cm:default-properties>/<cm:property name="destination" value="mock:original" /> + getMockEndpoint("mock:original").setExpectedMessageCount(0); + // mock:result comes from loadConfigAdminConfigurationFile() + getMockEndpoint("mock:result").setExpectedMessageCount(0); + // mock:extra comes from useOverridePropertiesWithConfigAdmin() + getMockEndpoint("mock:extra").expectedBodiesReceived("Bye World", "Yay Bye WorldYay Bye World"); + + template.sendBody("direct:start", "World"); + + assertMockEndpointsSatisfied(); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/c6b14ba1/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminLoadMultiConfigurationFileAndOverrideTest.java ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminLoadMultiConfigurationFileAndOverrideTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminLoadMultiConfigurationFileAndOverrideTest.java new file mode 100644 index 0000000..72943e4 --- /dev/null +++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminLoadMultiConfigurationFileAndOverrideTest.java @@ -0,0 +1,64 @@ +/** + * 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.test.blueprint; + +import org.junit.Test; + +import java.util.Dictionary; + +/** + * This is the first of two tests which will load a Blueprint .cfg file (which will initialize configadmin), containing + * multiple property placeholders and also override its property placeholders directly (the change will reload blueprint + * container). + */ +public class ConfigAdminLoadMultiConfigurationFileAndOverrideTest extends CamelBlueprintTestSupport { + + @Override + protected String getBlueprintDescriptor() { + // which blueprint XML file to use for this test + return "org/apache/camel/test/blueprint/configadmin-loadmultifileoverride.xml"; + } + + @Override + protected String[] loadConfigAdminConfigurationFile() { + // which .cfg files to use, and their corresponding persistence-ids + return new String[]{"src/test/resources/etc/stuff.cfg", "stuff", "src/test/resources/etc/otherstuff.cfg", "otherstuff"}; + } + + @Override + protected String useOverridePropertiesWithConfigAdmin(Dictionary properties) throws Exception { + // override / add extra properties + properties.put("arrive", "mock:otherExtra"); + + // return the persistence-id to use + return "otherstuff"; + } + + @Test + public void testConfigAdminWithMultiplePids() throws Exception { + // mock:otherOriginal comes from <cm:default-properties>/<cm:property name="arrive" value="mock:otherOriginal" /> + getMockEndpoint("mock:otherOriginal").setExpectedMessageCount(0); + // mock:result comes from loadConfigAdminConfigurationFile() + getMockEndpoint("mock:otherResult").setExpectedMessageCount(0); + // mock:extra comes from useOverridePropertiesWithConfigAdmin() + getMockEndpoint("mock:otherExtra").expectedBodiesReceived("Adieu World", "tiens! Adieu Worldtiens! Adieu World"); + + template.sendBody("direct:otherStart", "World"); + + assertMockEndpointsSatisfied(); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/c6b14ba1/components/camel-test-blueprint/src/test/resources/etc/otherstuff.cfg ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/resources/etc/otherstuff.cfg b/components/camel-test-blueprint/src/test/resources/etc/otherstuff.cfg new file mode 100644 index 0000000..cb1d44f --- /dev/null +++ b/components/camel-test-blueprint/src/test/resources/etc/otherstuff.cfg @@ -0,0 +1,20 @@ +## ------------------------------------------------------------------------ +## 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. +## ------------------------------------------------------------------------ + +salutation=Adieu +resonner=tiens! +arrive=mock:otherResult http://git-wip-us.apache.org/repos/asf/camel/blob/c6b14ba1/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/configadmin-loadmultifileoverride.xml ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/configadmin-loadmultifileoverride.xml b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/configadmin-loadmultifileoverride.xml new file mode 100644 index 0000000..dd3f5d9 --- /dev/null +++ b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/configadmin-loadmultifileoverride.xml @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<!-- START SNIPPET: e1 --> +<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0" + xsi:schemaLocation=" + http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0 http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.1.0.xsd + http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> + + <!-- blueprint property placeholders, that will use etc/stuff.cfg as the properties file --> + <cm:property-placeholder persistent-id="stuff" update-strategy="reload" > + <cm:default-properties> + <cm:property name="greeting" value="Hello" /> + <cm:property name="echo" value="Hey" /> + <cm:property name="destination" value="mock:original" /> + </cm:default-properties> + </cm:property-placeholder> + + <!-- blueprint property placeholders, that will use etc/otherstuff.cfg as the properties file --> + <cm:property-placeholder persistent-id="otherstuff" update-strategy="reload" placeholder-prefix="[" placeholder-suffix="]"> + <cm:default-properties> + <cm:property name="salutation" value="Salut" /> + <cm:property name="resonner" value="Hep" /> + <cm:property name="arrive" value="mock:otherOriginal" /> + </cm:default-properties> + </cm:property-placeholder> + + <!-- a bean that uses a blueprint property placeholder --> + <bean id="myCoolBean" class="org.apache.camel.test.blueprint.MyCoolBean"> + <property name="say" value="${greeting}"/> + <property name="echo" value="${echo}"/> + </bean> + + <!-- a bean that uses a different blueprint property placeholder --> + <bean id="myOtherCoolBean" class="org.apache.camel.test.blueprint.MyCoolBean"> + <property name="say" value="[salutation]"/> + <property name="echo" value="[resonner]"/> + </bean> + + + <camelContext xmlns="http://camel.apache.org/schema/blueprint"> + + <route> + <from uri="direct:start"/> + <bean ref="myCoolBean" method="saySomething"/> + <to uri="{{destination}}"/> + <bean ref="myCoolBean" method="echoSomething"/> + <to uri="{{destination}}"/> + </route> + + <route> + <from uri="direct:otherStart"/> + <bean ref="myOtherCoolBean" method="saySomething"/> + <to uri="{{arrive}}"/> + <bean ref="myOtherCoolBean" method="echoSomething"/> + <to uri="{{arrive}}"/> + </route> + + </camelContext> + +</blueprint> +<!-- END SNIPPET: e1 --> \ No newline at end of file