/* * Copyright (c) 2006-2007 Sun Microsystems, Inc. All rights reserved. * * The Sun Project JXTA(TM) Software License * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. The end-user documentation included with the redistribution, if any, must * include the following acknowledgment: "This product includes software * developed by Sun Microsystems, Inc. for JXTA(TM) technology." * Alternately, this acknowledgment may appear in the software itself, if * and wherever such third-party acknowledgments normally appear. * * 4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must * not be used to endorse or promote products derived from this software * without prior written permission. For written permission, please contact * Project JXTA at http://www.jxta.org. * * 5. Products derived from this software may not be called "JXTA", nor may * "JXTA" appear in their name, without prior written permission of Sun. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SUN * MICROSYSTEMS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * JXTA is a registered trademark of Sun Microsystems, Inc. in the United * States and other countries. * * Please see the license information page at : * <http://www.jxta.org/project/www/license.html> for instructions on use of * the license in source files. * * ==================================================================== * * This software consists of voluntary contributions made by many individuals * on behalf of Project JXTA. For more information on Project JXTA, please see * http://www.jxta.org. * * This license is based on the BSD license adopted by the Apache Foundation. */ package net.jxse.impl.OSGi.Services; import java.io.File; import java.io.IOException; import java.net.URI; import net.jxse.OSGi.Services.JxseOSGiNetworkManagerService; import net.jxse.OSGi.JxseOSGiFramework; import net.jxse.configuration.JxseHttpTransportConfiguration; import net.jxse.configuration.JxseMulticastTransportConfiguration; import net.jxse.configuration.JxsePeerConfiguration; import net.jxse.configuration.JxsePeerConfiguration.ConnectionMode; import net.jxse.configuration.JxseTcpTransportConfiguration; import net.jxta.configuration.JxtaConfigurationException; import net.jxta.exception.PeerGroupException; import net.jxta.id.IDFactory; import net.jxta.peer.PeerID; import net.jxta.peergroup.PeerGroupID; import net.jxta.platform.NetworkConfigurator; import net.jxta.platform.NetworkManager; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; import org.osgi.framework.BundleException; import org.osgi.framework.FrameworkEvent; import org.osgi.util.tracker.ServiceTracker; /** * Test of JxseOSGiNetworkManager using OSGi */ public class JxseOSGiNetworkManagerActivatorTest { public JxseOSGiNetworkManagerActivatorTest() { } private JxseOSGiNetworkManagerService TheNMS; private ServiceTracker ST; @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } @Before public void setUp() { try { JxseOSGiFramework.INSTANCE.start(); } catch (BundleException ex) { fail(ex.toString()); } // Retrieving the NetworkManager service ST = JxseOSGiFramework.getServiceTracker(JxseOSGiNetworkManagerService.class); ST.open(); try { TheNMS = (JxseOSGiNetworkManagerService) ST.waitForService(5000); } catch (InterruptedException ex) { fail(ex.toString()); } if (TheNMS==null) { fail("Cannot retrieve the " + JxseOSGiNetworkManagerService.class.getSimpleName()); } } @After public void tearDown() throws InterruptedException { // Closing everything ST.close(); TheNMS = null; try { JxseOSGiFramework.INSTANCE.stop(); // Waiting for stop for maximum 60 seconds FrameworkEvent FE = JxseOSGiFramework.INSTANCE.waitForStop(60000); if ( FE.getType() != FrameworkEvent.STOPPED ) { fail("OSGi Framework failed to stop after 60 seconds, event type: " + FE.getType() ); } } catch (BundleException ex) { fail(ex.toString()); } catch (InterruptedException ex) { fail(ex.toString()); } } /** * Test of setPeerConfiguration method, of class JxseOSGiNetworkManager. */ @Test public void testSetGetPeerConfiguration() { JxsePeerConfiguration JPC = JxsePeerConfiguration.getDefaultJxsePeerConfiguration(); JPC.setPeerInstanceName("Poupoupidou"); try { TheNMS.setPeerConfiguration(JPC); } catch (JxtaConfigurationException ex) { fail(ex.toString()); } JxsePeerConfiguration Retrieved = TheNMS.getPeerConfigurationCopy(); assertTrue(Retrieved!=null); assertTrue(JPC!=Retrieved); assertTrue(Retrieved.getPeerInstanceName().compareTo("Poupoupidou")==0); } /** * Test of getConfiguredNetworkManager method, of class JxseOSGiNetworkManager. */ @Test public void testGetConfiguredNetworkManager() { JxsePeerConfiguration JPC = new ValidJxsePeerConfiguration(); try { TheNMS.setPeerConfiguration(JPC); } catch (JxtaConfigurationException ex) { fail(ex.toString()); } // Retrieving the NetworkManager NetworkManager TheNM = null; try { TheNM = TheNMS.getConfiguredNetworkManager(); } catch (Exception ex) { fail(ex.toString()); } try { TheNM.startNetwork(); } catch (PeerGroupException ex) { fail(ex.toString()); } catch (IOException ex) { fail(ex.toString()); } // We should not be able to set a peer config while the NetworkManager is started try { TheNMS.setPeerConfiguration(JPC); fail("Cannot set a peer configuration when NetworkManager is started"); } catch (JxtaConfigurationException ex) { // Fine } // Stopping the NetworkManager TheNM.stopNetwork(); // We should be able to set a peer config since the NetworkManager is stopped try { TheNMS.setPeerConfiguration(JPC); } catch (JxtaConfigurationException ex) { fail(ex.toString()); } } private boolean contains(URI[] theArray, URI theItem) { for (URI Item : theArray) { if (Item.compareTo(theItem)==0){ return true; } } return false; } /** * Test of getConfiguredNetworkManager method, of class JxseOSGiNetworkManager. */ @Test public void testGetConfiguredNetworkManager_2() { // Http config JxseHttpTransportConfiguration TempHttp = JxseHttpTransportConfiguration.getDefaultHttpTransportConfiguration(); TempHttp.setHttpPort(3333); TempHttp.setHttpIncoming(false); TempHttp.setHttpInterfaceAddress("123.45.67.89"); TempHttp.setHttpOutgoing(true); TempHttp.setHttpPublicAddress("321.34.22.66", false); // Multicast config JxseMulticastTransportConfiguration TempMulti = JxseMulticastTransportConfiguration.getDefaultMulticastTransportConfiguration(); TempMulti.setMulticastPort(4444); TempMulti.setMulticastAddress("77.77.77.77"); TempMulti.setMulticastInterface("88.88.88.89"); TempMulti.setMulticastPacketSize(9898); // Tcp config JxseTcpTransportConfiguration TempTcp = JxseTcpTransportConfiguration.getDefaultTcpTransportConfiguration(); TempTcp.setTcpPort(3555); TempTcp.setTcpStartPort(2222); TempTcp.setTcpEndPort(4444); TempTcp.setTcpIncoming(true); TempTcp.setTcpOutgoing(true); TempTcp.setTcpPublicAddress("12.34.56.78", false); TempTcp.setTcpInterfaceAddress("33.44.55.66"); // Peer config JxsePeerConfiguration Source = JxsePeerConfiguration.getDefaultJxsePeerConfiguration(); Source.setHttpTransportConfiguration(TempHttp); Source.setMulticastTransportConfiguration(TempMulti); Source.setTcpTransportConfiguration(TempTcp); Source.setConnectionMode(ConnectionMode.ADHOC); Source.setInfrastructureID(PeerGroupID.worldPeerGroupID); URI KSL = new File("aze").toURI(); Source.setKeyStoreLocation(KSL); URI LS = new File("eze").toURI(); Source.setPersistenceLocation(LS); Source.setMulticastEnabled(false); PeerID PID = IDFactory.newPeerID(PeerGroupID.worldPeerGroupID); Source.setPeerID(PID); Source.setPeerInstanceName("Zoubidoo"); Source.setRelayMaxClients(3456); Source.setRendezvousMaxClients(6666); Source.setTcpEnabled(false); Source.setUseOnlyRdvSeeds(true); Source.setUseOnlyRelaySeeds(true); URI SR = URI.create("tcp://192.168.1.1"); Source.addSeedRelay(SR, 10); URI SRDV = URI.create("tcp://192.168.1.2"); Source.addSeedRendezvous(SRDV, 20); URI SiR = URI.create("tcp://192.168.1.3"); Source.addSeedingRelay(SiR, 30); URI SiRDV = URI.create("tcp://192.168.1.4"); Source.addSeedingRendezvous(SiRDV, 40); try { TheNMS.setPeerConfiguration(Source); } catch (JxtaConfigurationException ex) { fail(ex.toString()); } // Retrieving the NetworkManager NetworkManager TheNM = null; try { TheNM = TheNMS.getConfiguredNetworkManager(); } catch (Exception ex) { fail(ex.toString()); } // Retrieving the NetworkConfigurator NetworkConfigurator TheNC = null; try { TheNC = TheNM.getConfigurator(); } catch (IOException ex) { fail(ex.toString()); } // Http config assertTrue(TheNC.getHttpPort()==3333); assertTrue(TheNC.getHttpIncomingStatus()==false); assertTrue(TheNC.getHttpOutgoingStatus()==true); assertTrue(TheNC.getHttpInterfaceAddress().compareTo("123.45.67.89")==0); assertTrue(TheNC.getHttpPublicAddress().compareTo("321.34.22.66")==0); assertTrue(TheNC.getHttpPublicAddressExclusivity()==false); // Multicast config assertTrue(TheNC.getMulticastPort()==4444); assertTrue(TheNC.getMulticastAddress().compareTo("77.77.77.77")==0); assertTrue(TheNC.getMulticastInterface().compareTo("88.88.88.89")==0); assertTrue(TheNC.getMulticastSize()==9898); // Tcp config assertTrue(TheNC.getTcpPort()==3555); assertTrue(TheNC.getTcpStartPort()==2222); assertTrue(TheNC.getTcpEndport()==4444); assertTrue(TheNC.getTcpIncomingStatus()==true); assertTrue(TheNC.getTcpOutgoingStatus()==true); assertTrue(TheNC.getTcpPublicAddress().compareTo("12.34.56.78")==0); assertTrue(TheNC.getTcpPublicAddressExclusivity()==false); assertTrue(TheNC.getTcpInterfaceAddress().compareTo("33.44.55.66")==0); // The rest assertTrue(TheNC.getMode()==NetworkConfigurator.ADHOC_NODE); assertTrue(TheNC.getInfrastructureID().toString().compareTo(PeerGroupID.worldPeerGroupID.toString())==0); assertTrue(TheNC.getKeyStoreLocation().compareTo(KSL)==0); // Following test fails because TheNC.getStoreHome() adds a '/', but otherwise is fine // assertTrue(TheNC.getStoreHome().compareTo(LS)==0); assertFalse(TheNC.getMulticastStatus()); assertTrue(TheNC.getPeerID().toString().compareTo(PID.toString())==0); assertTrue(TheNC.getName().compareTo("Zoubidoo")==0); assertTrue(TheNC.getRelayMaxClients()==3456); assertTrue(TheNC.getRendezvousMaxClients()==6666); assertFalse(TheNC.isTcpEnabled()); assertTrue(TheNC.getUseOnlyRendezvousSeedsStatus()); assertTrue(TheNC.getUseOnlyRelaySeedsStatus()); assertTrue(contains(TheNC.getRdvSeedingURIs(),SiRDV)); assertTrue(contains(TheNC.getRelaySeedingURIs(),SiR)); assertTrue(contains(TheNC.getRdvSeedURIs(),SRDV)); assertTrue(contains(TheNC.getRelaySeedURIs(),SR)); } }