http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceDataMonitorListenerImplTest.java ---------------------------------------------------------------------- diff --git a/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceDataMonitorListenerImplTest.java b/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceDataMonitorListenerImplTest.java deleted file mode 100644 index 53b6139..0000000 --- a/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceDataMonitorListenerImplTest.java +++ /dev/null @@ -1,183 +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.cxf.dosgi.discovery.zookeeper; - -import junit.framework.TestCase; - -public class InterfaceDataMonitorListenerImplTest extends TestCase { - - public void testDUMMY() { - assertTrue(true); - } - -// public void testChange() throws Exception { -// final List<DiscoveredServiceNotification> dsnCallbacks = new ArrayList<DiscoveredServiceNotification>(); -// DiscoveredServiceTracker dst = new DiscoveredServiceTracker() { -// public void serviceChanged(DiscoveredServiceNotification dsn) { -// dsnCallbacks.add(dsn); -// } -// }; -// -// //---------------------------------------------------------------- -// // Test DiscoveredServiceNotification.AVAILABLE -// //---------------------------------------------------------------- -// Properties initial = new Properties(); -// initial.put("a", "b"); -// initial.put(ServicePublication.ENDPOINT_LOCATION, "http://somehost:12345/some/context"); -// ByteArrayOutputStream propBytes = new ByteArrayOutputStream(); -// initial.store(propBytes, ""); -// -// ZooKeeper zk = EasyMock.createMock(ZooKeeper.class); -// EasyMock.expect(zk.getChildren(Utils.getZooKeeperPath(String.class.getName()), false)) -// .andReturn(Arrays.asList("x#y#z")); -// EasyMock.expect(zk.getData(Utils.getZooKeeperPath(String.class.getName()) + "/x#y#z", false, null)) -// .andReturn(propBytes.toByteArray()); -// EasyMock.replay(zk); -// -// InterfaceDataMonitorListenerImpl dml = new InterfaceDataMonitorListenerImpl(zk, String.class.getName(), dst); -// -// assertEquals("Precondition failed", 0, dsnCallbacks.size()); -// dml.change(); -// assertEquals(1, dsnCallbacks.size()); -// DiscoveredServiceNotification dsn = dsnCallbacks.iterator().next(); -// assertEquals(Collections.singleton(String.class.getName()), dsn.getInterfaces()); -// assertEquals(DiscoveredServiceNotification.AVAILABLE, dsn.getType()); -// assertEquals(0, dsn.getFilters().size()); -// ServiceEndpointDescription sed = dsn.getServiceEndpointDescription(); -// assertEquals(Collections.singleton(String.class.getName()), sed.getProvidedInterfaces()); -// -// Properties expected = new Properties(); -// expected.load(new ByteArrayInputStream(propBytes.toByteArray())); -// expected.put("service.exported.configs", "org.apache.cxf.ws"); -// expected.put("org.apache.cxf.ws.address", "http://somehost:12345/some/context"); -// -// assertEquals(expected, sed.getProperties()); -// EasyMock.verify(zk); -// -// // Again with the same data -// EasyMock.reset(zk); -// EasyMock.expect(zk.getChildren(Utils.getZooKeeperPath(String.class.getName()), false)) -// .andReturn(Arrays.asList("x#y#z")); -// EasyMock.expect(zk.getData(Utils.getZooKeeperPath(String.class.getName()) + "/x#y#z", false, null)) -// .andReturn(propBytes.toByteArray()); -// EasyMock.replay(zk); -// -// dsnCallbacks.clear(); -// assertEquals("Precondition failed", 0, dsnCallbacks.size()); -// dml.change(); -// assertEquals(0, dsnCallbacks.size()); -// -// EasyMock.verify(zk); -// //---------------------------------------------------------------- -// // Test DiscoveredServiceNotification.MODIFIED -// //---------------------------------------------------------------- -// Properties modified = new Properties(); -// modified.put("c", "d"); -// modified.put(ServicePublication.ENDPOINT_LOCATION, "http://somehost:999/some/context"); -// modified.put("service.exported.configs", "org.apache.cxf.rs"); -// ByteArrayOutputStream modBytes = new ByteArrayOutputStream(); -// modified.store(modBytes, ""); -// -// EasyMock.reset(zk); -// EasyMock.expect(zk.getChildren(Utils.getZooKeeperPath(String.class.getName()), false)) -// .andReturn(Arrays.asList("x#y#z")); -// EasyMock.expect(zk.getData(Utils.getZooKeeperPath(String.class.getName()) + "/x#y#z", false, null)) -// .andReturn(modBytes.toByteArray()); -// EasyMock.replay(zk); -// -// dsnCallbacks.clear(); -// assertEquals("Precondition failed", 0, dsnCallbacks.size()); -// dml.change(); -// assertEquals(1, dsnCallbacks.size()); -// DiscoveredServiceNotification dsn2 = dsnCallbacks.iterator().next(); -// assertEquals(Collections.singleton(String.class.getName()), dsn2.getInterfaces()); -// assertEquals(DiscoveredServiceNotification.MODIFIED, dsn2.getType()); -// assertEquals(0, dsn2.getFilters().size()); -// ServiceEndpointDescription sed2 = dsn2.getServiceEndpointDescription(); -// assertEquals(Collections.singleton(String.class.getName()), sed2.getProvidedInterfaces()); -// assertEquals(modified, sed2.getProperties()); -// -// EasyMock.verify(zk); -// -// //---------------------------------------------------------------- -// // Test DiscoveredServiceNotification.MODIFIED2 -// //---------------------------------------------------------------- -// Properties modified2 = new Properties(); -// modified2.put("c", "d2"); -// modified2.put(ServicePublication.ENDPOINT_LOCATION, "http://somehost:112/some/context"); -// modified2.put("service.exported.configs", "org.apache.cxf.ws"); -// modified2.put("org.apache.cxf.ws.address", "http://somewhereelse/123"); -// ByteArrayOutputStream modBytes2 = new ByteArrayOutputStream(); -// modified2.store(modBytes2, ""); -// -// EasyMock.reset(zk); -// EasyMock.expect(zk.getChildren(Utils.getZooKeeperPath(String.class.getName()), false)) -// .andReturn(Arrays.asList("x#y#z")); -// EasyMock.expect(zk.getData(Utils.getZooKeeperPath(String.class.getName()) + "/x#y#z", false, null)) -// .andReturn(modBytes2.toByteArray()); -// EasyMock.replay(zk); -// -// dsnCallbacks.clear(); -// assertEquals("Precondition failed", 0, dsnCallbacks.size()); -// dml.change(); -// assertEquals(1, dsnCallbacks.size()); -// DiscoveredServiceNotification dsn3 = dsnCallbacks.iterator().next(); -// assertEquals(Collections.singleton(String.class.getName()), dsn3.getInterfaces()); -// assertEquals(DiscoveredServiceNotification.MODIFIED, dsn3.getType()); -// assertEquals(0, dsn3.getFilters().size()); -// ServiceEndpointDescription sed3 = dsn3.getServiceEndpointDescription(); -// assertEquals(Collections.singleton(String.class.getName()), sed3.getProvidedInterfaces()); -// assertEquals(modified2, sed3.getProperties()); -// -// EasyMock.verify(zk); -// //---------------------------------------------------------------- -// // Test DiscoveredServiceNotification.UNAVAILABLE -// //---------------------------------------------------------------- -// EasyMock.reset(zk); -// EasyMock.expect(zk.getChildren(Utils.getZooKeeperPath(String.class.getName()), false)) -// .andReturn(Collections.<String>emptyList()); -// EasyMock.replay(zk); -// -// dsnCallbacks.clear(); -// assertEquals("Precondition failed", 0, dsnCallbacks.size()); -// dml.change(); -// assertEquals(1, dsnCallbacks.size()); -// DiscoveredServiceNotification dsn4 = dsnCallbacks.iterator().next(); -// assertEquals(Collections.singleton(String.class.getName()), dsn4.getInterfaces()); -// assertEquals(DiscoveredServiceNotification.UNAVAILABLE, dsn4.getType()); -// assertEquals(0, dsn4.getFilters().size()); -// ServiceEndpointDescription sed4 = dsn4.getServiceEndpointDescription(); -// assertEquals(Collections.singleton(String.class.getName()), sed4.getProvidedInterfaces()); -// assertEquals(modified2, sed4.getProperties()); -// -// EasyMock.verify(zk); -// -// // Try the same again... -// EasyMock.reset(zk); -// EasyMock.expect(zk.getChildren(Utils.getZooKeeperPath(String.class.getName()), false)) -// .andReturn(Collections.<String>emptyList()); -// EasyMock.replay(zk); -// -// dsnCallbacks.clear(); -// assertEquals("Precondition failed", 0, dsnCallbacks.size()); -// dml.change(); -// assertEquals("Should not receive a callback again...", 0, dsnCallbacks.size()); -// EasyMock.verify(zk); -// } -}
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/ZookeeperDiscoveryTest.java ---------------------------------------------------------------------- diff --git a/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/ZookeeperDiscoveryTest.java b/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/ZookeeperDiscoveryTest.java deleted file mode 100644 index ed38d5d..0000000 --- a/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/ZookeeperDiscoveryTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.apache.cxf.dosgi.discovery.zookeeper; - -import java.util.Dictionary; -import java.util.Hashtable; - -import org.apache.zookeeper.ZooKeeper; -import org.easymock.EasyMock; -import org.easymock.IMocksControl; -import org.junit.Assert; -import org.junit.Test; -import org.osgi.framework.BundleContext; -import org.osgi.service.cm.ConfigurationException; - - -public class ZookeeperDiscoveryTest { - - @Test - public void testDefaults() throws ConfigurationException { - IMocksControl c = EasyMock.createControl(); - BundleContext bctx = c.createMock(BundleContext.class); - ZooKeeperDiscovery zkd = new ZooKeeperDiscovery(bctx) { - @Override - protected ZooKeeper createZooKeeper(String host, String port, int timeout) { - Assert.assertEquals("localhost", host); - Assert.assertEquals("2181", port); - Assert.assertEquals(3000, timeout); - return null; - } - }; - - Dictionary<String, Object> configuration = new Hashtable<String, Object>(); - zkd.updated(configuration); - } - - @Test - public void testConfig() throws ConfigurationException { - IMocksControl c = EasyMock.createControl(); - BundleContext bctx = c.createMock(BundleContext.class); - ZooKeeperDiscovery zkd = new ZooKeeperDiscovery(bctx) { - @Override - protected ZooKeeper createZooKeeper(String host, String port, int timeout) { - Assert.assertEquals("myhost", host); - Assert.assertEquals("1", port); - Assert.assertEquals(1000, timeout); - return null; - } - }; - - Dictionary<String, Object> configuration = new Hashtable<String, Object>(); - configuration.put("zookeeper.host", "myhost"); - configuration.put("zookeeper.port", "1"); - configuration.put("zookeeper.timeout", "1000"); - zkd.updated(configuration); - } -} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/publish/PublishingEndpointListenerFactoryTest.java ---------------------------------------------------------------------- diff --git a/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/publish/PublishingEndpointListenerFactoryTest.java b/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/publish/PublishingEndpointListenerFactoryTest.java deleted file mode 100644 index a8498fd..0000000 --- a/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/publish/PublishingEndpointListenerFactoryTest.java +++ /dev/null @@ -1,100 +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.cxf.dosgi.discovery.zookeeper.publish; - -import java.util.Dictionary; -import java.util.List; - -import junit.framework.TestCase; - -import org.apache.zookeeper.ZooKeeper; -import org.easymock.EasyMock; -import org.easymock.IMocksControl; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.osgi.service.remoteserviceadmin.EndpointListener; - -public class PublishingEndpointListenerFactoryTest extends TestCase { - - @SuppressWarnings("unchecked") - public void testScope() { - IMocksControl c = EasyMock.createNiceControl(); - - BundleContext ctx = c.createMock(BundleContext.class); - ZooKeeper zk = c.createMock(ZooKeeper.class); - @SuppressWarnings("rawtypes") - ServiceRegistration sreg = c.createMock(ServiceRegistration.class); - - PublishingEndpointListenerFactory eplf = new PublishingEndpointListenerFactory(zk, ctx); - - EasyMock.expect(ctx.registerService(EasyMock.eq(EndpointListener.class.getName()), EasyMock.eq(eplf), - (Dictionary<String, String>)EasyMock.anyObject())).andReturn(sreg).once(); - - EasyMock.expect(ctx.getProperty(EasyMock.eq("org.osgi.framework.uuid"))).andReturn("myUUID").anyTimes(); - - c.replay(); - eplf.start(); - c.verify(); - - } - - @SuppressWarnings("unchecked") - public void testServiceFactory() { - IMocksControl c = EasyMock.createNiceControl(); - - BundleContext ctx = c.createMock(BundleContext.class); - ZooKeeper zk = c.createMock(ZooKeeper.class); - @SuppressWarnings("rawtypes") - ServiceRegistration sreg = c.createMock(ServiceRegistration.class); - - PublishingEndpointListenerFactory eplf = new PublishingEndpointListenerFactory(zk, ctx); - - EasyMock.expect(ctx.registerService(EasyMock.eq(EndpointListener.class.getName()), EasyMock.eq(eplf), - (Dictionary<String, String>)EasyMock.anyObject())).andReturn(sreg).once(); - - EasyMock.expect(ctx.getProperty(EasyMock.eq("org.osgi.framework.uuid"))).andReturn("myUUID").anyTimes(); - - PublishingEndpointListener eli = c.createMock(PublishingEndpointListener.class); - eli.close(); - EasyMock.expectLastCall().once(); - - c.replay(); - eplf.start(); - - PublishingEndpointListener service = eplf.getService(null, null); - assertNotNull(service); - assertTrue(service instanceof EndpointListener); - - List<PublishingEndpointListener> listeners = eplf.getListeners(); - assertEquals(1, listeners.size()); - assertEquals(service, listeners.get(0)); - - eplf.ungetService(null, null, service); - listeners = eplf.getListeners(); - assertEquals(0, listeners.size()); - - eplf.ungetService(null, null, eli); // no call to close - listeners.add(eli); - eplf.ungetService(null, null, eli); // call to close - listeners = eplf.getListeners(); - assertEquals(0, listeners.size()); - - c.verify(); - } -} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/publish/PublishingEndpointListenerTest.java ---------------------------------------------------------------------- diff --git a/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/publish/PublishingEndpointListenerTest.java b/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/publish/PublishingEndpointListenerTest.java deleted file mode 100644 index 0c78d4a..0000000 --- a/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/publish/PublishingEndpointListenerTest.java +++ /dev/null @@ -1,207 +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.cxf.dosgi.discovery.zookeeper.publish; - -import static org.easymock.EasyMock.expect; - -import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.aries.rsa.discovery.endpoint.EndpointDescriptionParser; -import org.apache.aries.rsa.discovery.endpoint.PropertiesMapper; -import org.apache.zookeeper.CreateMode; -import org.apache.zookeeper.KeeperException; -import org.apache.zookeeper.ZooDefs.Ids; -import org.apache.zookeeper.ZooKeeper; -import org.easymock.EasyMock; -import org.easymock.IAnswer; -import org.easymock.IMocksControl; -import org.osgi.framework.BundleContext; -import org.osgi.framework.Constants; -import org.osgi.framework.Filter; -import org.osgi.framework.FrameworkUtil; -import org.osgi.framework.InvalidSyntaxException; -import org.osgi.framework.ServiceListener; -import org.osgi.framework.ServiceReference; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.RemoteConstants; -import org.osgi.xmlns.rsa.v1_0.EndpointDescriptionType; -import org.osgi.xmlns.rsa.v1_0.PropertyType; - -import junit.framework.TestCase; - -public class PublishingEndpointListenerTest extends TestCase { - - private static final String ENDPOINT_PATH = "/osgi/service_registry/myClass/google.de#80##test#sub"; - - public void testEndpointRemovalAdding() throws KeeperException, InterruptedException { - IMocksControl c = EasyMock.createNiceControl(); - - BundleContext ctx = c.createMock(BundleContext.class); - ZooKeeper zk = c.createMock(ZooKeeper.class); - - String path = ENDPOINT_PATH; - expectCreated(zk, path); - expectDeleted(zk, path); - - c.replay(); - - PublishingEndpointListener eli = new PublishingEndpointListener(zk, ctx); - EndpointDescription endpoint = createEndpoint(); - eli.endpointAdded(endpoint, null); - eli.endpointAdded(endpoint, null); // should do nothing - eli.endpointRemoved(endpoint, null); - eli.endpointRemoved(endpoint, null); // should do nothing - - c.verify(); - } - - public void testDiscoveryPlugin() throws Exception { - BundleContext ctx = EasyMock.createMock(BundleContext.class); - stubCreateFilter(ctx); - ctx.addServiceListener(EasyMock.isA(ServiceListener.class), - EasyMock.eq("(objectClass=" + DiscoveryPlugin.class.getName() + ")")); - - ServiceReference<DiscoveryPlugin> sr1 = createAppendPlugin(ctx); - ServiceReference<DiscoveryPlugin> sr2 = createPropertyPlugin(ctx); - - EasyMock.expect(ctx.getServiceReferences(DiscoveryPlugin.class.getName(), null)) - .andReturn(new ServiceReference[]{sr1, sr2}).anyTimes(); - EasyMock.replay(ctx); - - EndpointDescription endpoint = createEndpoint(); - - Map<String, Object> expectedProps = new HashMap<String, Object>(endpoint.getProperties()); - expectedProps.put("endpoint.id", "http://google.de:80/test/sub/appended"); - expectedProps.put("foo", "bar"); - expectedProps.put("service.imported", "true"); - - final ZooKeeper zk = EasyMock.createNiceMock(ZooKeeper.class); - String expectedFullPath = "/osgi/service_registry/org/foo/myClass/some.machine#9876##test"; - - List<PropertyType> props2 = new PropertiesMapper().fromProps(expectedProps); - EndpointDescriptionType epd = new EndpointDescriptionType(); - epd.getProperty().addAll(props2); - byte[] data = new EndpointDescriptionParser().getData(epd); - expectCreated(zk, expectedFullPath, EasyMock.aryEq(data)); - EasyMock.replay(zk); - - PublishingEndpointListener eli = new PublishingEndpointListener(zk, ctx); - - List<EndpointDescription> endpoints = getEndpoints(eli); - assertEquals("Precondition", 0, endpoints.size()); - eli.endpointAdded(endpoint, null); - assertEquals(1, endpoints.size()); - - //TODO enable - //EasyMock.verify(zk); - } - - - - public void testClose() throws KeeperException, InterruptedException { - IMocksControl c = EasyMock.createNiceControl(); - BundleContext ctx = c.createMock(BundleContext.class); - ZooKeeper zk = c.createMock(ZooKeeper.class); - expectCreated(zk, ENDPOINT_PATH); - expectDeleted(zk, ENDPOINT_PATH); - - c.replay(); - - PublishingEndpointListener eli = new PublishingEndpointListener(zk, ctx); - EndpointDescription endpoint = createEndpoint(); - eli.endpointAdded(endpoint, null); - eli.close(); // should result in zk.delete(...) - - c.verify(); - } - - @SuppressWarnings("unchecked") - private ServiceReference<DiscoveryPlugin> createAppendPlugin(BundleContext ctx) { - DiscoveryPlugin plugin1 = new DiscoveryPlugin() { - public String process(Map<String, Object> mutableProperties, String endpointKey) { - String eid = (String) mutableProperties.get("endpoint.id"); - mutableProperties.put("endpoint.id", eid + "/appended"); - return endpointKey; - } - }; - ServiceReference<DiscoveryPlugin> sr1 = EasyMock.createMock(ServiceReference.class); - EasyMock.expect(ctx.getService(sr1)).andReturn(plugin1).anyTimes(); - return sr1; - } - - @SuppressWarnings("unchecked") - private ServiceReference<DiscoveryPlugin> createPropertyPlugin(BundleContext ctx) { - DiscoveryPlugin plugin2 = new DiscoveryPlugin() { - public String process(Map<String, Object> mutableProperties, String endpointKey) { - mutableProperties.put("foo", "bar"); - return endpointKey.replaceAll("localhost", "some.machine"); - } - }; - ServiceReference<DiscoveryPlugin> sr2 = EasyMock.createMock(ServiceReference.class); - EasyMock.expect(ctx.getService(sr2)).andReturn(plugin2).anyTimes(); - return sr2; - } - - @SuppressWarnings("unchecked") - private List<EndpointDescription> getEndpoints(PublishingEndpointListener eli) throws Exception { - Field field = eli.getClass().getDeclaredField("endpoints"); - field.setAccessible(true); - return (List<EndpointDescription>) field.get(eli); - } - - private void stubCreateFilter(BundleContext ctx) throws InvalidSyntaxException { - EasyMock.expect(ctx.createFilter(EasyMock.isA(String.class))).andAnswer(new IAnswer<Filter>() { - public Filter answer() throws Throwable { - return FrameworkUtil.createFilter((String) EasyMock.getCurrentArguments()[0]); - } - }).anyTimes(); - } - - private void expectCreated(ZooKeeper zk, String path, byte[] dataMatcher) throws KeeperException, InterruptedException { - expect(zk.create(EasyMock.eq(path), - dataMatcher, - EasyMock.eq(Ids.OPEN_ACL_UNSAFE), - EasyMock.eq(CreateMode.EPHEMERAL))) - .andReturn(""); - } - - private void expectCreated(ZooKeeper zk, String path) throws KeeperException, InterruptedException { - expect(zk.create(EasyMock.eq(path), - (byte[])EasyMock.anyObject(), - EasyMock.eq(Ids.OPEN_ACL_UNSAFE), - EasyMock.eq(CreateMode.EPHEMERAL))) - .andReturn(""); - } - - private void expectDeleted(ZooKeeper zk, String path) throws InterruptedException, KeeperException { - zk.delete(EasyMock.eq(path), EasyMock.eq(-1)); - EasyMock.expectLastCall().once(); - } - - private EndpointDescription createEndpoint() { - Map<String, Object> props = new HashMap<String, Object>(); - props.put(Constants.OBJECTCLASS, new String[] {"myClass"}); - props.put(RemoteConstants.ENDPOINT_ID, "http://google.de:80/test/sub"); - props.put(RemoteConstants.SERVICE_IMPORTED_CONFIGS, "myConfig"); - return new EndpointDescription(props); - } -} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/subscribe/InterfaceMonitorManagerTest.java ---------------------------------------------------------------------- diff --git a/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/subscribe/InterfaceMonitorManagerTest.java b/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/subscribe/InterfaceMonitorManagerTest.java deleted file mode 100644 index 01aea63..0000000 --- a/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/subscribe/InterfaceMonitorManagerTest.java +++ /dev/null @@ -1,112 +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.cxf.dosgi.discovery.zookeeper.subscribe; - -import static org.junit.Assert.assertEquals; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.zookeeper.ZooKeeper; -import org.easymock.EasyMock; -import org.easymock.IAnswer; -import org.easymock.IMocksControl; -import org.junit.Test; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.osgi.service.remoteserviceadmin.EndpointListener; - -public class InterfaceMonitorManagerTest { - - @Test - public void testEndpointListenerTrackerCustomizer() { - IMocksControl c = EasyMock.createNiceControl(); - BundleContext ctx = c.createMock(BundleContext.class); - ServiceReference<EndpointListener> sref = createService(c); - ServiceReference<EndpointListener> sref2 = createService(c); - ZooKeeper zk = c.createMock(ZooKeeper.class); - InterfaceMonitorManager eltc = new InterfaceMonitorManager(ctx, zk); - - c.replay(); - - // sref has no scope -> nothing should happen - assertEquals(0, eltc.getEndpointListenerScopes().size()); - assertEquals(0, eltc.getInterests().size()); - - eltc.addInterest(sref, "(objectClass=mine)", "mine"); - assertScopeIncludes(sref, eltc); - assertEquals(1, eltc.getEndpointListenerScopes().size()); - assertEquals(1, eltc.getInterests().size()); - - eltc.addInterest(sref, "(objectClass=mine)", "mine"); - assertScopeIncludes(sref, eltc); - assertEquals(1, eltc.getEndpointListenerScopes().size()); - assertEquals(1, eltc.getInterests().size()); - - eltc.addInterest(sref2, "(objectClass=mine)", "mine"); - assertScopeIncludes(sref, eltc); - assertScopeIncludes(sref2, eltc); - assertEquals(2, eltc.getEndpointListenerScopes().size()); - assertEquals(1, eltc.getInterests().size()); - - eltc.removeInterest(sref); - assertScopeIncludes(sref2, eltc); - assertEquals(1, eltc.getEndpointListenerScopes().size()); - assertEquals(1, eltc.getInterests().size()); - - eltc.removeInterest(sref); - assertScopeIncludes(sref2, eltc); - assertEquals(1, eltc.getEndpointListenerScopes().size()); - assertEquals(1, eltc.getInterests().size()); - - eltc.removeInterest(sref2); - assertEquals(0, eltc.getEndpointListenerScopes().size()); - assertEquals(0, eltc.getInterests().size()); - - c.verify(); - } - - @SuppressWarnings("unchecked") - private ServiceReference<EndpointListener> createService(IMocksControl c) { - final Map<String, ?> p = new HashMap<String, Object>(); - ServiceReference<EndpointListener> sref = c.createMock(ServiceReference.class); - EasyMock.expect(sref.getPropertyKeys()).andAnswer(new IAnswer<String[]>() { - public String[] answer() throws Throwable { - return p.keySet().toArray(new String[p.size()]); - } - }).anyTimes(); - - EasyMock.expect(sref.getProperty((String)EasyMock.anyObject())).andAnswer(new IAnswer<Object>() { - public Object answer() throws Throwable { - String key = (String)(EasyMock.getCurrentArguments()[0]); - return p.get(key); - } - }).anyTimes(); - return sref; - } - - private void assertScopeIncludes(ServiceReference<EndpointListener> sref, InterfaceMonitorManager eltc) { - List<String> srefScope = eltc.getEndpointListenerScopes().get(sref); - assertEquals(1, srefScope.size()); - assertEquals("(objectClass=mine)", srefScope.get(0)); - - } - -} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/subscribe/InterfaceMonitorTest.java ---------------------------------------------------------------------- diff --git a/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/subscribe/InterfaceMonitorTest.java b/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/subscribe/InterfaceMonitorTest.java deleted file mode 100644 index 044b360..0000000 --- a/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/subscribe/InterfaceMonitorTest.java +++ /dev/null @@ -1,67 +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.cxf.dosgi.discovery.zookeeper.subscribe; - -import java.util.Collections; - -import junit.framework.TestCase; - -import org.apache.cxf.dosgi.discovery.zookeeper.util.Utils; -import org.apache.zookeeper.KeeperException; -import org.apache.zookeeper.WatchedEvent; -import org.apache.zookeeper.Watcher.Event.EventType; -import org.apache.zookeeper.Watcher.Event.KeeperState; -import org.apache.zookeeper.ZooKeeper; -import org.apache.zookeeper.data.Stat; -import org.easymock.EasyMock; -import org.easymock.IMocksControl; -import org.osgi.service.remoteserviceadmin.EndpointListener; - -import static org.easymock.EasyMock.eq; -import static org.easymock.EasyMock.expect; - -public class InterfaceMonitorTest extends TestCase { - - public void testInterfaceMonitor() throws KeeperException, InterruptedException { - IMocksControl c = EasyMock.createControl(); - - ZooKeeper zk = c.createMock(ZooKeeper.class); - expect(zk.getState()).andReturn(ZooKeeper.States.CONNECTED).anyTimes(); - - String scope = "(myProp=test)"; - String interf = "es.schaaf.test"; - String node = Utils.getZooKeeperPath(interf); - - EndpointListener endpointListener = c.createMock(EndpointListener.class); - InterfaceMonitor im = new InterfaceMonitor(zk, interf, endpointListener, scope); - zk.exists(eq(node), eq(im), eq(im), EasyMock.anyObject()); - EasyMock.expectLastCall().once(); - - expect(zk.exists(eq(node), eq(false))).andReturn(new Stat()).anyTimes(); - expect(zk.getChildren(eq(node), eq(false))).andReturn(Collections.<String> emptyList()).once(); - expect(zk.getChildren(eq(node), eq(im))).andReturn(Collections.<String> emptyList()).once(); - - c.replay(); - im.start(); - // simulate a zk callback - WatchedEvent we = new WatchedEvent(EventType.NodeCreated, KeeperState.SyncConnected, node); - im.process(we); - c.verify(); - } -} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/util/UtilsTest.java ---------------------------------------------------------------------- diff --git a/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/util/UtilsTest.java b/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/util/UtilsTest.java deleted file mode 100644 index 1f72b88..0000000 --- a/discovery/zookeeper/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/util/UtilsTest.java +++ /dev/null @@ -1,35 +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.cxf.dosgi.discovery.zookeeper.util; - -import junit.framework.TestCase; - -public class UtilsTest extends TestCase { - - public void testGetZooKeeperPath() { - assertEquals(Utils.PATH_PREFIX + '/' + "org/example/Test", - Utils.getZooKeeperPath("org.example.Test")); - - // used for the recursive discovery - assertEquals(Utils.PATH_PREFIX, Utils.getZooKeeperPath(null)); - assertEquals(Utils.PATH_PREFIX, Utils.getZooKeeperPath("")); - } - - -} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/examples/echotcp/Readme.md ---------------------------------------------------------------------- diff --git a/examples/echotcp/Readme.md b/examples/echotcp/Readme.md new file mode 100644 index 0000000..c7b0525 --- /dev/null +++ b/examples/echotcp/Readme.md @@ -0,0 +1,44 @@ +# Example echo TCP + +Implements a simple echo service and exposes it using the Aries RSA TCP provider. + +# Install + +Download Apache Karaf 4.0.5 + +## Service +Extract to container_a and start. In the shell execute the commands below: + +config:property-set -p org.apache.aries.rsa.discovery.zookeeper zookeeper.port 2181 +config:property-set -p org.apache.aries.rsa.discovery.zookeeper.server clientPort 2181 +feature:repo-add aries-rsa 1.8-SNAPSHOT +feature:install scr aries-rsa-provider-tcp aries-rsa-discovery-zookeeper +install -s mvn:org.apache.aries.rsa.examples.echotcp/org.apache.aries.rsa.examples.echotcp.api +install -s mvn:org.apache.aries.rsa.examples.echotcp/org.apache.aries.rsa.examples.echotcp.service + +The log should show that the service is exported using the tcp provider and published to zookeeper. +It should look similar to this: + +2016-03-14 11:59:53,548 | INFO | pool-50-thread-5 | TopologyManagerExport | 57 - org.apache.aries.rsa.topology-manager - 1.8.0.SNAPSHOT | TopologyManager: export successful for [org.apache.aries.rsa.examples.echotcp.api.EchoService], endpoints: [{component.id=1, component.name=org.apache.aries.rsa.examples.echotcp.service.EchoServiceImpl, endpoint.framework.uuid=2b242970-0d54-49c4-a321-b0c323809c24, endpoint.id=tcp://192.168.0.129:36384, endpoint.package.version.org.apache.aries.rsa.examples.echotcp.api=1.0.0, endpoint.service.id=138, objectClass=[org.apache.aries.rsa.examples.echotcp.api.EchoService], service.bundleid=64, service.imported=true, service.imported.configs=[aries.tcp], service.scope=bundle}] +2016-03-14 11:59:53,549 | INFO | pool-50-thread-5 | PublishingEndpointListener | 54 - org.apache.aries.rsa.discovery.zookeeper - 1.8.0.SNAPSHOT | Local EndpointDescription added: {component.id=1, component.name=org.apache.aries.rsa.examples.echotcp.service.EchoServiceImpl, endpoint.framework.uuid=2b242970-0d54-49c4-a321-b0c323809c24, endpoint.id=tcp://192.168.0.129:36384, endpoint.package.version.org.apache.aries.rsa.examples.echotcp.api=1.0.0, endpoint.service.id=138, objectClass=[org.apache.aries.rsa.examples.echotcp.api.EchoService], service.bundleid=64, service.imported=true, service.imported.configs=[aries.tcp], service.scope=bundle} + + +## Consumer +Extract to container_b and start. In the shell execute the commands below: + +config:property-set -p org.apache.aries.rsa.discovery.zookeeper zookeeper.port 2181 +feature:repo-add aries-rsa 1.8-SNAPSHOT +feature:install scr aries-rsa-provider-tcp aries-rsa-discovery-zookeeper +install -s mvn:org.apache.aries.rsa.examples.echotcp/org.apache.aries.rsa.examples.echotcp.api +install -s mvn:org.apache.aries.rsa.examples.echotcp/org.apache.aries.rsa.examples.echotcp.consumer + +The consumer should start and show: +Sending to echo service +Good morning + +The log should show that the discovery picks up the endpoint from zookeeper and that the RemoteServiceAdmin imports the service. + +2016-03-14 12:03:30,518 | INFO | er])-EventThread | InterfaceMonitor | 54 - org.apache.aries.rsa.discovery.zookeeper - 1.8.0.SNAPSHOT | found new node /osgi/service_registry/org/apache/aries/rsa/examples/echotcp/api/EchoService/[192.168.0.129#36384#] ( []->child ) props: [1, org.apache.aries.rsa.examples.echotcp.service.EchoServiceImpl, 2b242970-0d54-49c4-a321-b0c323809c24, tcp://192.168.0.129:36384, 1.0.0, 138, [Ljava.lang.String;@69a6817f, 64, true, [Ljava.lang.String;@8514b3a, bundle] +2016-03-14 12:03:30,520 | INFO | er])-EventThread | InterfaceMonitorManager | 54 - org.apache.aries.rsa.discovery.zookeeper - 1.8.0.SNAPSHOT | calling EndpointListener.endpointAdded: org.apache.aries.rsa.topologymanager.importer.TopologyManagerImport@2366e9c8 from bundle org.apache.aries.rsa.topology-manager for endpoint: {component.id=1, component.name=org.apache.aries.rsa.examples.echotcp.service.EchoServiceImpl, endpoint.framework.uuid=2b242970-0d54-49c4-a321-b0c323809c24, endpoint.id=tcp://192.168.0.129:36384, endpoint.package.version.org.apache.aries.rsa.examples.echotcp.api=1.0.0, endpoint.service.id=138, objectClass=[org.apache.aries.rsa.examples.echotcp.api.EchoService], service.bundleid=64, service.imported=true, service.imported.configs=[aries.tcp], service.scope=bundle} +2016-03-14 12:03:30,522 | INFO | pool-41-thread-1 | RemoteServiceAdminCore | 52 - org.apache.aries.rsa.core - 1.8.0.SNAPSHOT | Importing service tcp://192.168.0.129:36384 with interfaces [org.apache.aries.rsa.examples.echotcp.api.EchoService] using handler class org.apache.aries.rsa.provider.tcp.TCPProvider. + http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/examples/echotcp/api/bnd.bnd ---------------------------------------------------------------------- diff --git a/examples/echotcp/api/bnd.bnd b/examples/echotcp/api/bnd.bnd new file mode 100644 index 0000000..73d19a4 --- /dev/null +++ b/examples/echotcp/api/bnd.bnd @@ -0,0 +1 @@ +Export-Package: org.apache.aries.rsa.examples.echotcp.api \ No newline at end of file http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/examples/echotcp/api/pom.xml ---------------------------------------------------------------------- diff --git a/examples/echotcp/api/pom.xml b/examples/echotcp/api/pom.xml new file mode 100644 index 0000000..e24452f --- /dev/null +++ b/examples/echotcp/api/pom.xml @@ -0,0 +1,11 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.aries.rsa.examples</groupId> + <artifactId>org.apache.aries.rsa.examples.echotcp</artifactId> + <version>1.8-SNAPSHOT</version> + </parent> + <groupId>org.apache.aries.rsa.examples.echotcp</groupId> + <artifactId>org.apache.aries.rsa.examples.echotcp.api</artifactId> + <packaging>bundle</packaging> +</project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/examples/echotcp/api/src/main/java/org/apache/aries/rsa/examples/echotcp/api/EchoService.java ---------------------------------------------------------------------- diff --git a/examples/echotcp/api/src/main/java/org/apache/aries/rsa/examples/echotcp/api/EchoService.java b/examples/echotcp/api/src/main/java/org/apache/aries/rsa/examples/echotcp/api/EchoService.java new file mode 100644 index 0000000..998c0d7 --- /dev/null +++ b/examples/echotcp/api/src/main/java/org/apache/aries/rsa/examples/echotcp/api/EchoService.java @@ -0,0 +1,5 @@ +package org.apache.aries.rsa.examples.echotcp.api; + +public interface EchoService { + public String echo(String msg); +} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/examples/echotcp/api/src/main/java/org/apache/aries/rsa/examples/echotcp/api/packageinfo ---------------------------------------------------------------------- diff --git a/examples/echotcp/api/src/main/java/org/apache/aries/rsa/examples/echotcp/api/packageinfo b/examples/echotcp/api/src/main/java/org/apache/aries/rsa/examples/echotcp/api/packageinfo new file mode 100644 index 0000000..c72722a --- /dev/null +++ b/examples/echotcp/api/src/main/java/org/apache/aries/rsa/examples/echotcp/api/packageinfo @@ -0,0 +1,19 @@ +# +# 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. +# +version 1.0.0 http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/examples/echotcp/consumer/bnd.bnd ---------------------------------------------------------------------- diff --git a/examples/echotcp/consumer/bnd.bnd b/examples/echotcp/consumer/bnd.bnd new file mode 100644 index 0000000..f29f0a2 --- /dev/null +++ b/examples/echotcp/consumer/bnd.bnd @@ -0,0 +1 @@ +-dsannotations: * \ No newline at end of file http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/examples/echotcp/consumer/pom.xml ---------------------------------------------------------------------- diff --git a/examples/echotcp/consumer/pom.xml b/examples/echotcp/consumer/pom.xml new file mode 100644 index 0000000..a479018 --- /dev/null +++ b/examples/echotcp/consumer/pom.xml @@ -0,0 +1,39 @@ +<?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. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.aries.rsa.examples</groupId> + <artifactId>org.apache.aries.rsa.examples.echotcp</artifactId> + <version>1.8-SNAPSHOT</version> + </parent> + <groupId>org.apache.aries.rsa.examples.echotcp</groupId> + <artifactId>org.apache.aries.rsa.examples.echotcp.consumer</artifactId> + <packaging>bundle</packaging> + + <dependencies> + <dependency> + <groupId>org.apache.aries.rsa.examples.echotcp</groupId> + <artifactId>org.apache.aries.rsa.examples.echotcp.api</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> +</project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/examples/echotcp/consumer/src/main/java/org/apache/aries/rsa/examples/echotcp/consumer/EchoConsumer.java ---------------------------------------------------------------------- diff --git a/examples/echotcp/consumer/src/main/java/org/apache/aries/rsa/examples/echotcp/consumer/EchoConsumer.java b/examples/echotcp/consumer/src/main/java/org/apache/aries/rsa/examples/echotcp/consumer/EchoConsumer.java new file mode 100644 index 0000000..988901f --- /dev/null +++ b/examples/echotcp/consumer/src/main/java/org/apache/aries/rsa/examples/echotcp/consumer/EchoConsumer.java @@ -0,0 +1,41 @@ +/** + * 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.aries.rsa.examples.echotcp.consumer; + +import org.apache.aries.rsa.examples.echotcp.api.EchoService; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +@Component(immediate=true) +public class EchoConsumer { + + EchoService echoService; + + @Activate + public void activate() { + System.out.println("Sending to echo service"); + System.out.println(echoService.echo("Good morning")); + } + + @Reference + public void setEchoService(EchoService echoService) { + this.echoService = echoService; + } +} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/examples/echotcp/pom.xml ---------------------------------------------------------------------- diff --git a/examples/echotcp/pom.xml b/examples/echotcp/pom.xml new file mode 100644 index 0000000..f12604b --- /dev/null +++ b/examples/echotcp/pom.xml @@ -0,0 +1,76 @@ +<?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. --> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.aries.rsa</groupId> + <artifactId>examples</artifactId> + <version>1.8-SNAPSHOT</version> + </parent> + <groupId>org.apache.aries.rsa.examples</groupId> + <artifactId>org.apache.aries.rsa.examples.echotcp</artifactId> + <packaging>pom</packaging> + + <modules> + <module>api</module> + <module>service</module> + <module>consumer</module> + </modules> + + <dependencies> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.core</artifactId> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.compendium</artifactId> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <scope>provided</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <version>3.0.1</version> + <extensions>true</extensions> + <configuration> + <obrRepository>NONE</obrRepository> + <instructions> + <Export-Package>!*</Export-Package> + <_include>-bnd.bnd</_include> + </instructions> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.5.1</version> + <configuration> + <source>1.7</source> + <target>1.7</target> + <maxmem>256M</maxmem> + <fork>false</fork> + </configuration> + </plugin> + </plugins> + </build> +</project> http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/examples/echotcp/service/bnd.bnd ---------------------------------------------------------------------- diff --git a/examples/echotcp/service/bnd.bnd b/examples/echotcp/service/bnd.bnd new file mode 100644 index 0000000..73d19a4 --- /dev/null +++ b/examples/echotcp/service/bnd.bnd @@ -0,0 +1 @@ +Export-Package: org.apache.aries.rsa.examples.echotcp.api \ No newline at end of file http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/examples/echotcp/service/pom.xml ---------------------------------------------------------------------- diff --git a/examples/echotcp/service/pom.xml b/examples/echotcp/service/pom.xml new file mode 100644 index 0000000..50506ac --- /dev/null +++ b/examples/echotcp/service/pom.xml @@ -0,0 +1,39 @@ +<?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. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.aries.rsa.examples</groupId> + <artifactId>org.apache.aries.rsa.examples.echotcp</artifactId> + <version>1.8-SNAPSHOT</version> + </parent> + <groupId>org.apache.aries.rsa.examples.echotcp</groupId> + <artifactId>org.apache.aries.rsa.examples.echotcp.service</artifactId> + <packaging>bundle</packaging> + + <dependencies> + <dependency> + <groupId>org.apache.aries.rsa.examples.echotcp</groupId> + <artifactId>org.apache.aries.rsa.examples.echotcp.api</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> +</project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/examples/echotcp/service/src/main/java/org/apache/aries/rsa/examples/echotcp/service/EchoServiceImpl.java ---------------------------------------------------------------------- diff --git a/examples/echotcp/service/src/main/java/org/apache/aries/rsa/examples/echotcp/service/EchoServiceImpl.java b/examples/echotcp/service/src/main/java/org/apache/aries/rsa/examples/echotcp/service/EchoServiceImpl.java new file mode 100644 index 0000000..8b31e03 --- /dev/null +++ b/examples/echotcp/service/src/main/java/org/apache/aries/rsa/examples/echotcp/service/EchoServiceImpl.java @@ -0,0 +1,14 @@ +package org.apache.aries.rsa.examples.echotcp.service; + +import org.apache.aries.rsa.examples.echotcp.api.EchoService; +import org.osgi.service.component.annotations.Component; + +@Component(property={"service.exported.interfaces=*"}) +public class EchoServiceImpl implements EchoService { + + @Override + public String echo(String msg) { + return msg; + } + +} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/examples/pom.xml ---------------------------------------------------------------------- diff --git a/examples/pom.xml b/examples/pom.xml new file mode 100644 index 0000000..ba60a97 --- /dev/null +++ b/examples/pom.xml @@ -0,0 +1,43 @@ +<?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. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.aries.rsa</groupId> + <artifactId>parent</artifactId> + <version>1.8-SNAPSHOT</version> + <relativePath>../parent/pom.xml</relativePath> + </parent> + + <artifactId>examples</artifactId> + <packaging>pom</packaging> + + <name>Aries Remote Service Admin Examples</name> + + <properties> + <topDirectoryLocation>..</topDirectoryLocation> + </properties> + + <modules> + <module>echotcp</module> + </modules> +</project> http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/features/src/main/resources/features.xml ---------------------------------------------------------------------- diff --git a/features/src/main/resources/features.xml b/features/src/main/resources/features.xml index d4325fa..efa8ff2 100644 --- a/features/src/main/resources/features.xml +++ b/features/src/main/resources/features.xml @@ -24,8 +24,4 @@ <bundle>mvn:org.apache.aries.rsa.discovery/zookeeper/${project.version}</bundle> </feature> - <feature name="aries-rsa-zookeeper-server" version="${project.version}"> - <bundle>mvn:org.apache.zookeeper/zookeeper/${zookeeper.version}</bundle> - <bundle>mvn:org.apache.aries.rsa.discovery/zookeeper-server/${project.version}</bundle> - </feature> </features> http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/itests/felix/pom.xml ---------------------------------------------------------------------- diff --git a/itests/felix/pom.xml b/itests/felix/pom.xml index c76dbe4..bf82d9c 100644 --- a/itests/felix/pom.xml +++ b/itests/felix/pom.xml @@ -34,6 +34,12 @@ <version>1.8.8</version> </dependency> <dependency> + <groupId>org.apache.felix</groupId> + <artifactId>org.apache.felix.scr</artifactId> + <version>2.0.0</version> + </dependency> + + <dependency> <groupId>org.apache.aries.rsa</groupId> <artifactId>core</artifactId> <version>${project.version}</version> @@ -58,21 +64,33 @@ <version>${project.version}</version> </dependency> <dependency> - <groupId>org.apache.aries.rsa.discovery</groupId> - <artifactId>zookeeper-server</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> <groupId>org.apache.aries.rsa.provider</groupId> <artifactId>tcp</artifactId> <version>${project.version}</version> </dependency> <dependency> - <groupId>org.apache.aries.rsa.itests</groupId> - <artifactId>testbundle-tcp-service</artifactId> + <groupId>org.apache.felix</groupId> + <artifactId>org.apache.felix.scr</artifactId> + <version>2.0.2</version> + </dependency> + <dependency> + <groupId>org.apache.aries.rsa.examples.echotcp</groupId> + <artifactId>org.apache.aries.rsa.examples.echotcp.api</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.apache.aries.rsa.examples.echotcp</groupId> + <artifactId>org.apache.aries.rsa.examples.echotcp.service</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.aries.rsa.examples.echotcp</groupId> + <artifactId>org.apache.aries.rsa.examples.echotcp.consumer</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> <groupId>org.apache.geronimo.specs</groupId> @@ -99,19 +117,18 @@ <artifactId>pax-exam-link-mvn</artifactId> <scope>test</scope> </dependency> - <dependency> <groupId>org.ops4j.pax.url</groupId> <artifactId>pax-url-aether</artifactId> <scope>test</scope> </dependency> - <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.framework</artifactId> <version>5.0.1</version> <scope>test</scope> </dependency> + <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/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 new file mode 100644 index 0000000..90856ff --- /dev/null +++ b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/RsaTestBase.java @@ -0,0 +1,120 @@ +package org.apache.aries.rsa.itests.felix; + +import static org.ops4j.pax.exam.CoreOptions.composite; +import static org.ops4j.pax.exam.CoreOptions.junitBundles; +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 java.io.IOException; +import java.io.InputStream; +import java.net.InetSocketAddress; +import java.net.ServerSocket; +import java.util.Dictionary; +import java.util.Hashtable; + +import javax.inject.Inject; + +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 { + + @Inject + BundleContext bundleContext; + + @Inject + ConfigurationAdmin configAdmin; + + static OptionalCompositeOption localRepo() { + String localRepo = System.getProperty("maven.repo.local"); + if (localRepo == null) { + localRepo = System.getProperty("org.ops4j.pax.url.mvn.localRepository"); + } + return when(localRepo != null) + .useOptions(vmOption("-Dorg.ops4j.pax.url.mvn.localRepository=" + localRepo)); + } + + static MavenArtifactProvisionOption mvn(String groupId, String artifactId) { + return mavenBundle().groupId(groupId).artifactId(artifactId).versionAsInProject(); + } + + public void testInstalled() throws Exception { + for (Bundle bundle : bundleContext.getBundles()) { + System.out.println(bundle.getBundleId() + " " + bundle.getSymbolicName() + " " + bundle.getState() + + " " + bundle.getVersion()); + } + } + + protected int configureZookeeper() throws IOException, InterruptedException { + final int zkPort = 12051; + // getFreePort(); does not seem to work + System.out.println("*** Port for ZooKeeper Server: " + zkPort); + updateZkServerConfig(zkPort, configAdmin); + Thread.sleep(1000); // To avoid exceptions in zookeeper client + updateZkClientConfig(zkPort, configAdmin); + return zkPort; + } + + protected void updateZkClientConfig(final int zkPort, ConfigurationAdmin cadmin) throws IOException { + Dictionary<String, Object> cliProps = new Hashtable<String, Object>(); + cliProps.put("zookeeper.host", "127.0.0.1"); + cliProps.put("zookeeper.port", "" + zkPort); + cadmin.getConfiguration("org.apache.aries.rsa.discovery.zookeeper", null).update(cliProps); + } + + protected void updateZkServerConfig(final int zkPort, ConfigurationAdmin cadmin) throws IOException { + Dictionary<String, Object> svrProps = new Hashtable<String, Object>(); + svrProps.put("clientPort", zkPort); + cadmin.getConfiguration("org.apache.aries.rsa.discovery.zookeeper.server", null).update(svrProps); + } + + protected int getFreePort() throws IOException { + ServerSocket socket = new ServerSocket(); + try { + socket.setReuseAddress(true); // enables quickly reopening socket on same port + socket.bind(new InetSocketAddress(0)); // zero finds a free port + return socket.getLocalPort(); + } finally { + socket.close(); + } + } + + 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() { + return composite(junitBundles(), + localRepo(), + systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("INFO"), + systemProperty("zkPort").value("15201"), + mvn("org.apache.felix", "org.apache.felix.configadmin"), + mvn("org.apache.aries.rsa", "core"), mvn("org.apache.aries.rsa", "spi"), + mvn("org.apache.aries.rsa", "topology-manager"), + mvn("org.apache.aries.rsa.provider", "tcp"), + mvn("org.apache.aries.rsa.discovery", "local"), + mvn("org.apache.zookeeper", "zookeeper"), + mvn("org.apache.aries.rsa.discovery", "zookeeper") + //CoreOptions.vmOption("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005") + ); + } + +} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/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 index 389c88a..dea4929 100644 --- 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 @@ -19,17 +19,10 @@ package org.apache.aries.rsa.itests.felix; */ -import static org.ops4j.pax.exam.CoreOptions.mavenBundle; +import static org.ops4j.pax.exam.CoreOptions.streamBundle; 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 java.io.ByteArrayInputStream; -import java.io.IOException; -import java.net.InetSocketAddress; -import java.net.ServerSocket; -import java.util.Dictionary; -import java.util.Hashtable; import java.util.List; import java.util.Map; @@ -37,7 +30,7 @@ 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.itests.tcp.api.EchoService; +import org.apache.aries.rsa.examples.echotcp.api.EchoService; import org.apache.aries.rsa.spi.DistributionProvider; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; @@ -50,71 +43,35 @@ import org.ops4j.pax.exam.Configuration; import org.ops4j.pax.exam.CoreOptions; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.junit.PaxExam; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.service.cm.ConfigurationAdmin; import org.osgi.service.remoteserviceadmin.EndpointDescription; import org.osgi.xmlns.rsa.v1_0.EndpointDescriptionType; @RunWith(PaxExam.class) -public class TestDiscoveryExport { - - private final class DummyWatcher implements Watcher { - @Override - public void process(WatchedEvent event) { - } - } - - private static final String GREETER_ZOOKEEPER_NODE = "/osgi/service_registry/org/apache/aries/rsa/itests/tcp/api/EchoService"; - - @Inject - BundleContext bundleContext; +public class TestDiscoveryExport extends RsaTestBase { + private static final String GREETER_ZOOKEEPER_NODE = "/osgi/service_registry/org/apache/aries/rsa/examples/echotcp/api/EchoService"; @Inject - ConfigurationAdmin configAdmin; - - @Inject DistributionProvider tcpProvider; @Configuration public static Option[] configure() throws Exception { - String localRepo = System.getProperty("maven.repo.local"); - if (localRepo == null) { - localRepo = System.getProperty("org.ops4j.pax.url.mvn.localRepository"); - } return new Option[] { CoreOptions.junitBundles(), systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("INFO"), - mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.configadmin").versionAsInProject(), - mavenBundle().groupId("org.apache.aries.rsa").artifactId("core").versionAsInProject(), - mavenBundle().groupId("org.apache.aries.rsa").artifactId("spi").versionAsInProject(), - mavenBundle().groupId("org.apache.aries.rsa").artifactId("topology-manager").versionAsInProject(), - mavenBundle().groupId("org.apache.aries.rsa.provider").artifactId("tcp").versionAsInProject(), - mavenBundle().groupId("org.apache.aries.rsa.discovery").artifactId("local").versionAsInProject(), - mavenBundle().groupId("org.apache.zookeeper").artifactId("zookeeper").versionAsInProject(), - mavenBundle().groupId("org.apache.aries.rsa.discovery").artifactId("zookeeper").versionAsInProject(), - mavenBundle().groupId("org.apache.aries.rsa.discovery").artifactId("zookeeper-server").versionAsInProject(), - mavenBundle().groupId("org.apache.aries.rsa.itests").artifactId("testbundle-tcp-service").versionAsInProject(), - when(localRepo != null).useOptions(vmOption("-Dorg.ops4j.pax.url.mvn.localRepository=" + localRepo)) + RsaTestBase.rsaTcpZookeeper(), + 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"), + localRepo(), + streamBundle(configBundleServer()) //CoreOptions.vmOption("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005") }; } - - public void testInstalled() throws Exception { - for (Bundle bundle : bundleContext.getBundles()) { - System.out.println(bundle.getBundleId() + " " + bundle.getSymbolicName() + " " + bundle.getState() + " " + bundle.getVersion()); - } - } @Test public void testDiscoveryExport() throws Exception { - final int zkPort = 12051; - //getFreePort(); does not seem to work - System.out.println("*** Port for ZooKeeper Server: " + zkPort); - updateZkServerConfig(zkPort, configAdmin); - Thread.sleep(1000); // To avoid exceptions in clients - updateZkClientConfig(zkPort, configAdmin); + String zkPort = bundleContext.getProperty("zkPort"); ZooKeeper zk = new ZooKeeper("localhost:" + zkPort, 1000, new DummyWatcher()); assertNodeExists(zk, GREETER_ZOOKEEPER_NODE, 10000); List<String> children = zk.getChildren(GREETER_ZOOKEEPER_NODE, false); @@ -143,28 +100,11 @@ public class TestDiscoveryExport { } Assert.assertNotNull("ZooKeeper node " + zNode + " was not found", stat); } - - protected void updateZkClientConfig(final int zkPort, ConfigurationAdmin cadmin) throws IOException { - Dictionary<String, Object> cliProps = new Hashtable<String, Object>(); - cliProps.put("zookeeper.host", "127.0.0.1"); - cliProps.put("zookeeper.port", "" + zkPort); - cadmin.getConfiguration("org.apache.aries.rsa.discovery.zookeeper", null).update(cliProps); - } - - protected void updateZkServerConfig(final int zkPort, ConfigurationAdmin cadmin) throws IOException { - Dictionary<String, Object> svrProps = new Hashtable<String, Object>(); - svrProps.put("clientPort", zkPort); - cadmin.getConfiguration("org.apache.aries.rsa.discovery.zookeeper.server", null).update(svrProps); - } - protected int getFreePort() throws IOException { - ServerSocket socket = new ServerSocket(); - try { - socket.setReuseAddress(true); // enables quickly reopening socket on same port - socket.bind(new InetSocketAddress(0)); // zero finds a free port - return socket.getLocalPort(); - } finally { - socket.close(); + private final class DummyWatcher implements Watcher { + @Override + public void process(WatchedEvent event) { } } + } http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/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 new file mode 100644 index 0000000..d20c808 --- /dev/null +++ b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/TestRoundTrip.java @@ -0,0 +1,88 @@ +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 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.Assert; +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(), + 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"), + streamBundle(RsaTestBase.configBundleServer()), + systemProperty("zkPort").value("15201") + }; + } + + @Configuration + public static Option[] configure() throws Exception { + startRemote(); + return new Option[] { + rsaTcpZookeeper(), + 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 + mvn("org.apache.aries.rsa.examples.echotcp", "org.apache.aries.rsa.examples.echotcp.consumer"), + streamBundle(RsaTestBase.configBundleConsumer()), + + }; + } + + @Test + public void testCall() throws Exception { + String answer = echoService.echo("test"); + Assert.assertEquals("test", answer); + } + + public static void shutdownRemote() { + remoteContainer.stop(); + } +} http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/ZookeeperDiscoveryConfigurer.java ---------------------------------------------------------------------- diff --git a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/ZookeeperDiscoveryConfigurer.java b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/ZookeeperDiscoveryConfigurer.java new file mode 100644 index 0000000..e12a988 --- /dev/null +++ b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/ZookeeperDiscoveryConfigurer.java @@ -0,0 +1,28 @@ +package org.apache.aries.rsa.itests.felix; + +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/69bb901e/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/ZookeeperServerConfigurer.java ---------------------------------------------------------------------- diff --git a/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/ZookeeperServerConfigurer.java b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/ZookeeperServerConfigurer.java new file mode 100644 index 0000000..e859207 --- /dev/null +++ b/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/ZookeeperServerConfigurer.java @@ -0,0 +1,32 @@ +package org.apache.aries.rsa.itests.felix; + +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/69bb901e/itests/pom.xml ---------------------------------------------------------------------- diff --git a/itests/pom.xml b/itests/pom.xml index cb59984..7a6b227 100644 --- a/itests/pom.xml +++ b/itests/pom.xml @@ -33,7 +33,6 @@ <modules> <module>felix</module> - <module>testbundle-service-tcp</module> </modules> <dependencyManagement> http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/itests/testbundle-service-tcp/bnd.bnd ---------------------------------------------------------------------- diff --git a/itests/testbundle-service-tcp/bnd.bnd b/itests/testbundle-service-tcp/bnd.bnd deleted file mode 100644 index b0cfcc1..0000000 --- a/itests/testbundle-service-tcp/bnd.bnd +++ /dev/null @@ -1,3 +0,0 @@ -Bundle-Activator: org.apache.aries.rsa.itests.tcp.service.Activator -Export-Package: org.apache.aries.rsa.itests.tcp.api -Private-Package: org.apache.aries.rsa.itests.tcp.service \ No newline at end of file http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/itests/testbundle-service-tcp/pom.xml ---------------------------------------------------------------------- diff --git a/itests/testbundle-service-tcp/pom.xml b/itests/testbundle-service-tcp/pom.xml deleted file mode 100644 index 0fd4d3c..0000000 --- a/itests/testbundle-service-tcp/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ -<?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. ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>org.apache.aries.rsa</groupId> - <artifactId>itests</artifactId> - <version>1.8-SNAPSHOT</version> - <relativePath>../pom.xml</relativePath> - </parent> - - <groupId>org.apache.aries.rsa.itests</groupId> - <artifactId>testbundle-tcp-service</artifactId> - <packaging>bundle</packaging> - - <name>Aries Remote Service Admin itests testbundle service tcp</name> - - <dependencies> - </dependencies> - -</project> http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/69bb901e/itests/testbundle-service-tcp/src/main/java/org/apache/aries/rsa/itests/tcp/api/EchoService.java ---------------------------------------------------------------------- diff --git a/itests/testbundle-service-tcp/src/main/java/org/apache/aries/rsa/itests/tcp/api/EchoService.java b/itests/testbundle-service-tcp/src/main/java/org/apache/aries/rsa/itests/tcp/api/EchoService.java deleted file mode 100644 index 877917b..0000000 --- a/itests/testbundle-service-tcp/src/main/java/org/apache/aries/rsa/itests/tcp/api/EchoService.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.apache.aries.rsa.itests.tcp.api; - -public interface EchoService { - public String echo(String msg); -}
