Repository: aries-rsa
Updated Branches:
  refs/heads/master 63f5aed5f -> 495a0e939


[ARIES-1526] Add itest for fastbin


Project: http://git-wip-us.apache.org/repos/asf/aries-rsa/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-rsa/commit/495a0e93
Tree: http://git-wip-us.apache.org/repos/asf/aries-rsa/tree/495a0e93
Diff: http://git-wip-us.apache.org/repos/asf/aries-rsa/diff/495a0e93

Branch: refs/heads/master
Commit: 495a0e939964167f4008a02ae7c11da891c41534
Parents: 63f5aed
Author: Christian Schneider <[email protected]>
Authored: Tue Apr 12 15:34:12 2016 +0200
Committer: Christian Schneider <[email protected]>
Committed: Tue Apr 12 15:34:21 2016 +0200

----------------------------------------------------------------------
 itests/felix/pom.xml                            |  28 ++++-
 .../aries/rsa/itests/felix/RsaTestBase.java     |  66 ++++++-----
 .../rsa/itests/felix/TestDiscoveryExport.java   | 115 ------------------
 .../aries/rsa/itests/felix/TestRoundTrip.java   |  81 -------------
 .../felix/fastbin/TestFastbinRoundTrip.java     |  85 +++++++++++++
 .../helpers/ZookeeperDiscoveryConfigurer.java   |  28 -----
 .../helpers/ZookeeperServerConfigurer.java      |  32 -----
 .../itests/felix/tcp/TestDiscoveryExport.java   | 118 +++++++++++++++++++
 .../rsa/itests/felix/tcp/TestRoundTrip.java     |  84 +++++++++++++
 itests/pom.xml                                  |   5 +
 10 files changed, 356 insertions(+), 286 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/495a0e93/itests/felix/pom.xml
----------------------------------------------------------------------
diff --git a/itests/felix/pom.xml b/itests/felix/pom.xml
index ae15fe7..4728c9e 100644
--- a/itests/felix/pom.xml
+++ b/itests/felix/pom.xml
@@ -67,6 +67,19 @@
             <artifactId>org.apache.aries.rsa.provider.tcp</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.fusesource.hawtdispatch</groupId>
+            <artifactId>hawtdispatch</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.fusesource.hawtbuf</groupId>
+            <artifactId>hawtbuf</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.aries.rsa.provider</groupId>
+            <artifactId>org.apache.aries.rsa.provider.fastbin</artifactId>
+            <version>${project.version}</version>
+        </dependency>
 
         <dependency>
             <groupId>org.apache.felix</groupId>
@@ -88,8 +101,6 @@
             
<artifactId>org.apache.aries.rsa.examples.echotcp.consumer</artifactId>
             <version>${project.version}</version>
         </dependency>
-        
-        
 
         <dependency>
             <groupId>org.apache.geronimo.specs</groupId>
@@ -103,6 +114,11 @@
         </dependency>
         <dependency>
             <groupId>org.ops4j.pax.exam</groupId>
+            <artifactId>pax-exam-cm</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.ops4j.pax.exam</groupId>
             <artifactId>pax-exam-inject</artifactId>
             <scope>test</scope>
         </dependency>
@@ -150,6 +166,14 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <forkCount>1</forkCount>
+                    <reuseForks>false</reuseForks>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
     

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/495a0e93/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/RsaTestBase.java
----------------------------------------------------------------------
diff --git 
a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/RsaTestBase.java 
b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/RsaTestBase.java
index bd4a9fe..1e63729 100644
--- 
a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/RsaTestBase.java
+++ 
b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/RsaTestBase.java
@@ -6,35 +6,32 @@ import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
 import static org.ops4j.pax.exam.CoreOptions.systemProperty;
 import static org.ops4j.pax.exam.CoreOptions.vmOption;
 import static org.ops4j.pax.exam.CoreOptions.when;
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
 
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 
 import javax.inject.Inject;
 
-import org.apache.aries.rsa.itests.felix.helpers.ZookeeperDiscoveryConfigurer;
-import org.apache.aries.rsa.itests.felix.helpers.ZookeeperServerConfigurer;
 import org.ops4j.pax.exam.CoreOptions;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.options.MavenArtifactProvisionOption;
 import org.ops4j.pax.exam.options.OptionalCompositeOption;
-import org.ops4j.pax.tinybundles.core.TinyBundles;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
 import org.osgi.service.cm.ConfigurationAdmin;
 
 public class RsaTestBase {
+    protected static final String ZK_PORT = "15201";
 
     @Inject
-    BundleContext bundleContext;
+    protected BundleContext bundleContext;
 
     @Inject
     ConfigurationAdmin configAdmin;
 
-    static OptionalCompositeOption localRepo() {
+    protected static OptionalCompositeOption localRepo() {
         String localRepo = System.getProperty("maven.repo.local");
         if (localRepo == null) {
             localRepo = 
System.getProperty("org.ops4j.pax.url.mvn.localRepository");
@@ -43,7 +40,7 @@ public class RsaTestBase {
             .useOptions(vmOption("-Dorg.ops4j.pax.url.mvn.localRepository=" + 
localRepo));
     }
 
-    static MavenArtifactProvisionOption mvn(String groupId, String artifactId) 
{
+    protected static MavenArtifactProvisionOption mvn(String groupId, String 
artifactId) {
         return 
mavenBundle().groupId(groupId).artifactId(artifactId).versionAsInProject();
     }
 
@@ -65,40 +62,27 @@ public class RsaTestBase {
         }
     }
 
-    static Option echoTcpConsumer() {
+    protected static Option echoTcpConsumer() {
         return CoreOptions.composite(
         mvn("org.apache.felix", "org.apache.felix.scr"),
         mvn("org.apache.aries.rsa.examples.echotcp", 
"org.apache.aries.rsa.examples.echotcp.api"),
-        // Consumer is needed to trigger service import. Pax exam inject does 
not work for it
+        // Consumer is needed to trigger service import. Pax exam inject does 
not trigger it
         mvn("org.apache.aries.rsa.examples.echotcp", 
"org.apache.aries.rsa.examples.echotcp.consumer")
         );
     }
 
-    static Option echoTcpService() {
-        return CoreOptions.composite(
+    protected static Option echoTcpService() {
+        return composite(
         mvn("org.apache.felix", "org.apache.felix.scr"),
         mvn("org.apache.aries.rsa.examples.echotcp", 
"org.apache.aries.rsa.examples.echotcp.api"),
         mvn("org.apache.aries.rsa.examples.echotcp", 
"org.apache.aries.rsa.examples.echotcp.service")
         );
     }
 
-    static InputStream configBundleConsumer() {
-        return TinyBundles.bundle()
-            .add(ZookeeperDiscoveryConfigurer.class)
-            .set(Constants.BUNDLE_ACTIVATOR, 
ZookeeperDiscoveryConfigurer.class.getName())
-            .build(TinyBundles.withBnd());
-    }
-
-    static InputStream configBundleServer() {
-        return TinyBundles.bundle()
-            .add(ZookeeperServerConfigurer.class)
-            .set(Constants.BUNDLE_ACTIVATOR, 
ZookeeperServerConfigurer.class.getName())
-            .build(TinyBundles.withBnd());
-    }
-
-    static Option rsaTcpZookeeper() {
+    protected static Option rsaCoreZookeeper() {
         return composite(junitBundles(), 
                          localRepo(),
+                         
systemProperty("pax.exam.osgi.unresolved.fail").value("true"),
                          
systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("INFO"),
                          systemProperty("zkPort").value("15201"),
                          
systemProperty("aries.rsa.hostname").value("localhost"),
@@ -106,7 +90,6 @@ public class RsaTestBase {
                          mvn("org.apache.aries.rsa", 
"org.apache.aries.rsa.core"), 
                          mvn("org.apache.aries.rsa", 
"org.apache.aries.rsa.spi"),
                          mvn("org.apache.aries.rsa", 
"org.apache.aries.rsa.topology-manager"),
-                         mvn("org.apache.aries.rsa.provider", 
"org.apache.aries.rsa.provider.tcp"),
                          mvn("org.apache.aries.rsa.discovery", 
"org.apache.aries.rsa.discovery.local"),
                          mvn("org.apache.zookeeper", "zookeeper"),
                          mvn("org.apache.aries.rsa.discovery", 
"org.apache.aries.rsa.discovery.zookeeper")
@@ -114,4 +97,31 @@ public class RsaTestBase {
             );
     }
 
+    protected static Option rsaTcp() {
+        return mvn("org.apache.aries.rsa.provider", 
"org.apache.aries.rsa.provider.tcp");
+    }
+
+    protected static Option rsaFastBin() {
+        return composite(mvn("org.fusesource.hawtbuf", "hawtbuf"),
+                       mvn("org.fusesource.hawtdispatch", "hawtdispatch"),
+                       mvn("org.apache.aries.rsa.provider", 
"org.apache.aries.rsa.provider.fastbin"));
+    }
+
+    protected static Option configZKConsumer() {
+        return newConfiguration("org.apache.aries.rsa.discovery.zookeeper")
+            .put("zookeeper.host", "127.0.0.1")
+            .put("zookeeper.port", ZK_PORT)
+            .asOption();
+    }
+    
+    protected static Option configZKServer() {
+        return 
newConfiguration("org.apache.aries.rsa.discovery.zookeeper.server")
+            .put("clientPort", ZK_PORT).asOption();
+    } 
+    
+    protected static Option configFastBin(String port) {
+        return newConfiguration("org.apache.aries.rsa.provider.fastbin")
+            .put("uri", "tcp://0.0.0.0:" + port).asOption();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/495a0e93/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/TestDiscoveryExport.java
----------------------------------------------------------------------
diff --git 
a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/TestDiscoveryExport.java
 
b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/TestDiscoveryExport.java
deleted file mode 100644
index ffb4a2c..0000000
--- 
a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/TestDiscoveryExport.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.apache.aries.rsa.itests.felix;
-/**
- * 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.
- */
-
-
-import static org.ops4j.pax.exam.CoreOptions.streamBundle;
-
-import java.io.ByteArrayInputStream;
-import java.util.List;
-import java.util.Map;
-
-import javax.inject.Inject;
-
-import org.apache.aries.rsa.discovery.endpoint.EndpointDescriptionParser;
-import org.apache.aries.rsa.discovery.endpoint.PropertiesMapper;
-import org.apache.aries.rsa.examples.echotcp.api.EchoService;
-import org.apache.aries.rsa.spi.DistributionProvider;
-import org.apache.zookeeper.KeeperException;
-import org.apache.zookeeper.WatchedEvent;
-import org.apache.zookeeper.Watcher;
-import org.apache.zookeeper.ZooKeeper;
-import org.apache.zookeeper.data.Stat;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.Configuration;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.junit.PaxExam;
-import org.osgi.service.remoteserviceadmin.EndpointDescription;
-import org.osgi.xmlns.rsa.v1_0.EndpointDescriptionType;
-
-@RunWith(PaxExam.class)
-public class TestDiscoveryExport extends RsaTestBase {
-    private static final String GREETER_ZOOKEEPER_NODE = 
"/osgi/service_registry/org/apache/aries/rsa/examples/echotcp/api/EchoService";
-
-    @Inject
-    DistributionProvider tcpProvider;
-
-    @Configuration
-    public static Option[] configure() throws Exception {
-        return new Option[] {
-                RsaTestBase.rsaTcpZookeeper(),
-                RsaTestBase.echoTcpService(),
-                localRepo(),
-                streamBundle(configBundleServer())
-        };
-    }
-
-    @Test
-    public void testDiscoveryExport() throws Exception {
-        String zkPort = bundleContext.getProperty("zkPort");
-        ZooKeeper zk = new ZooKeeper("localhost:" + zkPort, 1000, new 
DummyWatcher());
-        assertNodeExists(zk, GREETER_ZOOKEEPER_NODE, 10000);
-        String endpointPath = getEndpointPath(zk, GREETER_ZOOKEEPER_NODE);
-        EndpointDescription epd = getEndpointDescription(zk, endpointPath);
-        zk.close();
-
-        EchoService service = (EchoService)tcpProvider
-            .importEndpoint(EchoService.class.getClassLoader(), 
-                            bundleContext, new Class[]{EchoService.class}, 
epd);
-        Assert.assertEquals("test", service.echo("test"));
-    }
-
-    private EndpointDescription getEndpointDescription(ZooKeeper zk, String 
endpointPath)
-        throws KeeperException, InterruptedException {
-        byte[] data = zk.getData(endpointPath, false, null);
-        ByteArrayInputStream is = new ByteArrayInputStream(data);
-        List<EndpointDescriptionType> epdList = new 
EndpointDescriptionParser().getEndpointDescriptions(is);
-        Map<String, Object> props = new 
PropertiesMapper().toProps(epdList.get(0).getProperty());
-        EndpointDescription epd = new EndpointDescription(props);
-        return epd;
-    }
-
-    private String getEndpointPath(ZooKeeper zk, String servicePath) throws 
KeeperException, InterruptedException {
-        List<String> children = zk.getChildren(servicePath, false);
-        return servicePath + "/" + children.iterator().next();
-    }
-
-    private void assertNodeExists(ZooKeeper zk, String zNode, int timeout) {
-        long endTime = System.currentTimeMillis() + timeout;
-        Stat stat = null;
-        while (stat == null && System.currentTimeMillis() < endTime) {
-            try {
-                stat = zk.exists(zNode, null);
-                Thread.sleep(200);
-            } catch (Exception e) {
-                // Ignore
-            }
-        }
-        Assert.assertNotNull("ZooKeeper node " + zNode + " was not found", 
stat);
-    }
-    
-    private final class DummyWatcher implements Watcher {
-        @Override
-        public void process(WatchedEvent event) {
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/495a0e93/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/TestRoundTrip.java
----------------------------------------------------------------------
diff --git 
a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/TestRoundTrip.java
 
b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/TestRoundTrip.java
deleted file mode 100644
index e6c19a3..0000000
--- 
a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/TestRoundTrip.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.aries.rsa.itests.felix;
-/**
- * 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.
- */
-
-
-import static org.junit.Assert.assertEquals;
-import static org.ops4j.pax.exam.CoreOptions.streamBundle;
-import static org.ops4j.pax.exam.CoreOptions.systemProperty;
-
-import java.io.IOException;
-
-import javax.inject.Inject;
-
-import org.apache.aries.rsa.examples.echotcp.api.EchoService;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.Configuration;
-import org.ops4j.pax.exam.ExamSystem;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.TestContainer;
-import org.ops4j.pax.exam.junit.PaxExam;
-import org.ops4j.pax.exam.spi.PaxExamRuntime;
-
-@RunWith(PaxExam.class)
-public class TestRoundTrip extends RsaTestBase {
-    private static TestContainer remoteContainer;
-
-    @Inject
-    EchoService echoService;
-    
-    public static void startRemote() throws IOException, InterruptedException {
-        ExamSystem testSystem = 
PaxExamRuntime.createTestSystem(remoteConfig());
-        remoteContainer = PaxExamRuntime.createContainer(testSystem);
-        remoteContainer.start();
-    }
-
-    private static Option[] remoteConfig() throws IOException {
-        return new Option[] {
-            rsaTcpZookeeper(),
-            echoTcpService(),
-            streamBundle(RsaTestBase.configBundleServer()),
-            systemProperty("zkPort").value("15201")
-        };
-    }
-
-    @Configuration
-    public static Option[] configure() throws Exception {
-        startRemote();
-        return new Option[] {
-                rsaTcpZookeeper(),
-                RsaTestBase.echoTcpConsumer(),
-                streamBundle(RsaTestBase.configBundleConsumer()),
-                
-        };
-    }
-
-    @Test
-    public void testCall() throws Exception {
-        assertEquals("test", echoService.echo("test"));
-    }
-
-    public static void shutdownRemote() {
-        remoteContainer.stop();
-    }
-}

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/495a0e93/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/fastbin/TestFastbinRoundTrip.java
----------------------------------------------------------------------
diff --git 
a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/fastbin/TestFastbinRoundTrip.java
 
b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/fastbin/TestFastbinRoundTrip.java
new file mode 100644
index 0000000..6efd9fd
--- /dev/null
+++ 
b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/fastbin/TestFastbinRoundTrip.java
@@ -0,0 +1,85 @@
+package org.apache.aries.rsa.itests.felix.fastbin;
+/**
+ * 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.
+ */
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import javax.inject.Inject;
+
+import org.apache.aries.rsa.examples.echotcp.api.EchoService;
+import org.apache.aries.rsa.itests.felix.RsaTestBase;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.ExamSystem;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.TestContainer;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.spi.PaxExamRuntime;
+
+@RunWith(PaxExam.class)
+public class TestFastbinRoundTrip extends RsaTestBase {
+    private static TestContainer remoteContainer;
+
+    @Inject
+    EchoService echoService;
+
+    public static void startRemote() throws IOException, InterruptedException {
+        ExamSystem testSystem = 
PaxExamRuntime.createTestSystem(remoteConfig());
+        remoteContainer = PaxExamRuntime.createContainer(testSystem);
+        remoteContainer.start();
+    }
+
+    private static Option[] remoteConfig() throws IOException {
+        return new Option[] {
+                             rsaCoreZookeeper(),
+                             rsaFastBin(),
+                             echoTcpService(),
+                             configZKServer(),
+                             configZKConsumer(),
+                             configFastBin("2544"),
+        };
+    }
+
+    @Configuration
+    public static Option[] configure() throws Exception {
+        startRemote();
+        return new Option[] {
+                             rsaCoreZookeeper(),
+                             rsaFastBin(),
+                             echoTcpConsumer(),
+                             configZKConsumer(),
+                             configFastBin("2545")
+        };
+    }
+
+    @Test
+    public void testCall() throws Exception {
+        assertEquals("test", echoService.echo("test"));
+    }
+
+    public static void shutdownRemote() {
+        remoteContainer.stop();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/495a0e93/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/helpers/ZookeeperDiscoveryConfigurer.java
----------------------------------------------------------------------
diff --git 
a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/helpers/ZookeeperDiscoveryConfigurer.java
 
b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/helpers/ZookeeperDiscoveryConfigurer.java
deleted file mode 100644
index 33f7d8b..0000000
--- 
a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/helpers/ZookeeperDiscoveryConfigurer.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.apache.aries.rsa.itests.felix.helpers;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.util.tracker.ServiceTracker;
-
-public class ZookeeperDiscoveryConfigurer implements BundleActivator {
-
-    @Override
-    public void start(BundleContext context) throws Exception {
-        ServiceTracker<ConfigurationAdmin, Object> tracker = new 
ServiceTracker<>(context, ConfigurationAdmin.class, null);
-        tracker.open();
-        ConfigurationAdmin configAdmin = 
(ConfigurationAdmin)tracker.getService();
-        Dictionary<String, Object> cliProps = new Hashtable<String, Object>();
-        cliProps.put("zookeeper.host", "127.0.0.1");
-        cliProps.put("zookeeper.port", "" + context.getProperty("zkPort"));
-        
configAdmin.getConfiguration("org.apache.aries.rsa.discovery.zookeeper", 
null).update(cliProps);
-        tracker.close();
-    }
-
-    @Override
-    public void stop(BundleContext context) throws Exception {
-    }
-}

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/495a0e93/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/helpers/ZookeeperServerConfigurer.java
----------------------------------------------------------------------
diff --git 
a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/helpers/ZookeeperServerConfigurer.java
 
b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/helpers/ZookeeperServerConfigurer.java
deleted file mode 100644
index 3d4e90c..0000000
--- 
a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/helpers/ZookeeperServerConfigurer.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.apache.aries.rsa.itests.felix.helpers;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.util.tracker.ServiceTracker;
-
-public class ZookeeperServerConfigurer implements BundleActivator  {
-
-    @Override
-    public void start(BundleContext context) throws Exception {
-        ServiceTracker<ConfigurationAdmin, Object> tracker = new 
ServiceTracker<>(context, ConfigurationAdmin.class, null);
-        tracker.open();
-        ConfigurationAdmin configAdmin = 
(ConfigurationAdmin)tracker.getService();
-        String zkPort = context.getProperty("zkPort");
-        Dictionary<String, Object> svrProps = new Hashtable<String, Object>();
-        svrProps.put("clientPort", zkPort);
-        
configAdmin.getConfiguration("org.apache.aries.rsa.discovery.zookeeper.server", 
null).update(svrProps);
-        Dictionary<String, Object> cliProps = new Hashtable<String, Object>();
-        cliProps.put("zookeeper.host", "127.0.0.1");
-        cliProps.put("zookeeper.port", "" + zkPort);
-        
configAdmin.getConfiguration("org.apache.aries.rsa.discovery.zookeeper", 
null).update(cliProps);
-        tracker.close();
-    }
-
-    @Override
-    public void stop(BundleContext context) throws Exception {
-    }
-}

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/495a0e93/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/tcp/TestDiscoveryExport.java
----------------------------------------------------------------------
diff --git 
a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/tcp/TestDiscoveryExport.java
 
b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/tcp/TestDiscoveryExport.java
new file mode 100644
index 0000000..f8a8271
--- /dev/null
+++ 
b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/tcp/TestDiscoveryExport.java
@@ -0,0 +1,118 @@
+package org.apache.aries.rsa.itests.felix.tcp;
+/**
+ * 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.
+ */
+
+
+import java.io.ByteArrayInputStream;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+
+import org.apache.aries.rsa.discovery.endpoint.EndpointDescriptionParser;
+import org.apache.aries.rsa.discovery.endpoint.PropertiesMapper;
+import org.apache.aries.rsa.examples.echotcp.api.EchoService;
+import org.apache.aries.rsa.itests.felix.RsaTestBase;
+import org.apache.aries.rsa.spi.DistributionProvider;
+import org.apache.zookeeper.KeeperException;
+import org.apache.zookeeper.WatchedEvent;
+import org.apache.zookeeper.Watcher;
+import org.apache.zookeeper.ZooKeeper;
+import org.apache.zookeeper.data.Stat;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.osgi.service.remoteserviceadmin.EndpointDescription;
+import org.osgi.xmlns.rsa.v1_0.EndpointDescriptionType;
+
+@RunWith(PaxExam.class)
+public class TestDiscoveryExport extends RsaTestBase {
+    private static final String GREETER_ZOOKEEPER_NODE = 
"/osgi/service_registry/org/apache/aries/rsa/examples/echotcp/api/EchoService";
+
+    @Inject
+    DistributionProvider tcpProvider;
+
+    @Configuration
+    public static Option[] configure() throws Exception {
+        return new Option[] {
+                rsaCoreZookeeper(),
+                rsaTcp(),
+                echoTcpService(),
+                localRepo(),
+                configZKConsumer(),
+                configZKServer()
+        };
+    }
+
+    @Test
+    public void testDiscoveryExport() throws Exception {
+        EndpointDescription epd = getEndpoint();
+        EchoService service = (EchoService)tcpProvider
+            .importEndpoint(EchoService.class.getClassLoader(), 
+                            bundleContext, new Class[]{EchoService.class}, 
epd);
+        Assert.assertEquals("test", service.echo("test"));
+    }
+
+    private EndpointDescription getEndpoint() throws Exception {
+        ZooKeeper zk = new ZooKeeper("localhost:" + ZK_PORT, 1000, new 
DummyWatcher());
+        assertNodeExists(zk, GREETER_ZOOKEEPER_NODE, 10000);
+        String endpointPath = getEndpointPath(zk, GREETER_ZOOKEEPER_NODE);
+        EndpointDescription epd = getEndpointDescription(zk, endpointPath);
+        zk.close();
+        return epd;
+    }
+
+    private EndpointDescription getEndpointDescription(ZooKeeper zk, String 
endpointPath)
+        throws KeeperException, InterruptedException {
+        byte[] data = zk.getData(endpointPath, false, null);
+        ByteArrayInputStream is = new ByteArrayInputStream(data);
+        List<EndpointDescriptionType> epdList = new 
EndpointDescriptionParser().getEndpointDescriptions(is);
+        Map<String, Object> props = new 
PropertiesMapper().toProps(epdList.get(0).getProperty());
+        return new EndpointDescription(props);
+    }
+
+    private String getEndpointPath(ZooKeeper zk, String servicePath) throws 
KeeperException, InterruptedException {
+        List<String> children = zk.getChildren(servicePath, false);
+        return servicePath + "/" + children.iterator().next();
+    }
+
+    private void assertNodeExists(ZooKeeper zk, String zNode, int timeout) {
+        long endTime = System.currentTimeMillis() + timeout;
+        Stat stat = null;
+        while (stat == null && System.currentTimeMillis() < endTime) {
+            try {
+                stat = zk.exists(zNode, null);
+                Thread.sleep(200);
+            } catch (Exception e) {
+                // Ignore
+            }
+        }
+        Assert.assertNotNull("ZooKeeper node " + zNode + " was not found", 
stat);
+    }
+    
+    private final class DummyWatcher implements Watcher {
+        @Override
+        public void process(WatchedEvent event) {
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/495a0e93/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/tcp/TestRoundTrip.java
----------------------------------------------------------------------
diff --git 
a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/tcp/TestRoundTrip.java
 
b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/tcp/TestRoundTrip.java
new file mode 100644
index 0000000..70ca44e
--- /dev/null
+++ 
b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/tcp/TestRoundTrip.java
@@ -0,0 +1,84 @@
+package org.apache.aries.rsa.itests.felix.tcp;
+/**
+ * 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.
+ */
+
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import javax.inject.Inject;
+
+import org.apache.aries.rsa.examples.echotcp.api.EchoService;
+import org.apache.aries.rsa.itests.felix.RsaTestBase;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.ExamSystem;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.TestContainer;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.spi.PaxExamRuntime;
+
+@RunWith(PaxExam.class)
+public class TestRoundTrip extends RsaTestBase {
+
+    private static TestContainer remoteContainer;
+
+    @Inject
+    EchoService echoService;
+
+    public static void startRemote() throws IOException, InterruptedException {
+        ExamSystem testSystem = 
PaxExamRuntime.createTestSystem(remoteConfig());
+        remoteContainer = PaxExamRuntime.createContainer(testSystem);
+        remoteContainer.start();
+    }
+
+    private static Option[] remoteConfig() throws IOException {
+        return new Option[] {
+            rsaCoreZookeeper(),
+            rsaTcp(),
+            echoTcpService(),
+            configZKServer(),
+            configZKConsumer(),
+        };
+    }
+
+    @Configuration
+    public static Option[] configure() throws Exception {
+        startRemote();
+        return new Option[] {
+                rsaCoreZookeeper(),
+                rsaTcp(),
+                RsaTestBase.echoTcpConsumer(),
+                configZKConsumer()
+        };
+    }
+
+    @Test
+    public void testCall() throws Exception {
+        assertEquals("test", echoService.echo("test"));
+    }
+
+    public static void shutdownRemote() {
+        remoteContainer.stop();
+    }
+}

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/495a0e93/itests/pom.xml
----------------------------------------------------------------------
diff --git a/itests/pom.xml b/itests/pom.xml
index 59ba1e9..8899cb8 100644
--- a/itests/pom.xml
+++ b/itests/pom.xml
@@ -48,6 +48,11 @@
             </dependency>
             <dependency>
                 <groupId>org.ops4j.pax.exam</groupId>
+                <artifactId>pax-exam-cm</artifactId>
+                <version>${pax-exam.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.ops4j.pax.exam</groupId>
                 <artifactId>pax-exam-inject</artifactId>
                 <version>${pax-exam.version}</version>
             </dependency>

Reply via email to