SLING-4009: implementing multiple queue dispatch strategy to have one queue per receiving endpoint

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1649499 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java b/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java
index 3fb7592..63f4f46 100644
--- a/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java
+++ b/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java
@@ -31,6 +31,7 @@
 import static org.apache.sling.distribution.it.DistributionUtils.authorAgentConfigUrl;
 import static org.apache.sling.distribution.it.DistributionUtils.exporterUrl;
 import static org.apache.sling.distribution.it.DistributionUtils.importerUrl;
+import static org.apache.sling.distribution.it.DistributionUtils.setArrayProperties;
 
 /**
  * Integration test base class for distribution
@@ -59,20 +60,27 @@
             String remoteImporterUrl = publish.getServerBaseUrl() + importerUrl("default");
 
 
-            authorClient.setProperties(authorAgentConfigUrl("publish") + "/packageImporter",
-                    "endpoints", remoteImporterUrl);
+            authorClient.setProperties(authorAgentConfigUrl("publish"),
+                    "packageImporter.endpoints", remoteImporterUrl);
 
 
             Thread.sleep(3000);
 
             assertExists(authorClient, agentUrl("publish"));
 
+
+            assertExists(authorClient, authorAgentConfigUrl("publish-multiple"));
+            setArrayProperties(author, authorAgentConfigUrl("publish-multiple"),
+                    "packageImporter.endpoints", remoteImporterUrl, remoteImporterUrl + "badaddress");
+            assertExists(authorClient, agentUrl("publish-multiple"));
+
+
+
             assertExists(authorClient, authorAgentConfigUrl("publish-reverse"));
 
             String remoteExporterUrl = publish.getServerBaseUrl() + exporterUrl("reverse");
 
-            authorClient.setProperties(authorAgentConfigUrl("publish-reverse") + "/packageExporter",
-                    "endpoints", remoteExporterUrl);
+            authorClient.setProperties(authorAgentConfigUrl("publish-reverse"), "packageExporter.endpoints", remoteExporterUrl);
 
             Thread.sleep(3000);
             assertExists(authorClient, agentUrl("publish-reverse"));
diff --git a/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java b/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java
index eb52159..5180c6d 100644
--- a/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java
+++ b/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java
@@ -80,7 +80,16 @@
         ).assertStatus(status).getContent();
     }
 
+    public static void setArrayProperties(SlingInstance slingInstance, String resource, String property, String... values) throws IOException {
+        List<String> parameters = new ArrayList<String>();
+        for (String value : values) {
+            parameters.add(property);
+            parameters.add(value);
+        }
 
+        assertPostResourceWithParameters(slingInstance, 200, resource, parameters.toArray(new String[0]));
+
+    }
 
     public static void assertResponseContains(SlingInstance slingInstance,
                                               String resource, String... parameters) throws IOException {
diff --git a/src/test/java/org/apache/sling/distribution/it/MultipleForwardDistributionTest.java b/src/test/java/org/apache/sling/distribution/it/MultipleForwardDistributionTest.java
new file mode 100644
index 0000000..e89a668
--- /dev/null
+++ b/src/test/java/org/apache/sling/distribution/it/MultipleForwardDistributionTest.java
@@ -0,0 +1,51 @@
+/*
+ * 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.sling.distribution.it;
+
+import org.apache.sling.distribution.DistributionRequestType;
+import org.junit.Test;
+
+import static org.apache.sling.distribution.it.DistributionUtils.assertExists;
+import static org.apache.sling.distribution.it.DistributionUtils.assertNotExists;
+import static org.apache.sling.distribution.it.DistributionUtils.createRandomNode;
+import static org.apache.sling.distribution.it.DistributionUtils.distribute;
+import static org.apache.sling.distribution.it.DistributionUtils.distributeDeep;
+
+/**
+ * Integration test for forward distribution
+ */
+public class MultipleForwardDistributionTest extends DistributionIntegrationTestBase {
+
+    @Test
+    public void testAddContent() throws Exception {
+        String nodePath = createRandomNode(authorClient, "/content/forward_add_" + System.nanoTime());
+        assertExists(authorClient, nodePath);
+        distribute(author, "publish-multiple", DistributionRequestType.ADD, nodePath);
+        assertExists(publishClient, nodePath);
+    }
+
+    @Test
+    public void testDeleteContent() throws Exception {
+        String nodePath = createRandomNode(publishClient, "/content/forward_del_" + System.nanoTime());
+        assertExists(publishClient, nodePath);
+        distribute(author, "publish-multiple", DistributionRequestType.DELETE, nodePath);
+        assertNotExists(publishClient, nodePath);
+    }
+
+}