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

Reply via email to