⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xportconftest.java

📁 jxta_src_2.41b jxta 2.41b 最新版源码 from www.jxta.org
💻 JAVA
字号:
/* * Copyright (c) 2001 Sun Microsystems, Inc.  All rights reserved. * * 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 the *       Sun Microsystems, Inc. for Project JXTA." *    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. * ==================================================================== * * 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. * * $Id: XportConfTest.java,v 1.4 2006/03/09 23:17:49 bondolo Exp $ */package net.jxta.impl.endpoint;import junit.framework.*;import net.jxta.peergroup.PeerGroup;import net.jxta.peergroup.PeerGroupFactory;import net.jxta.endpoint.EndpointAddress;import net.jxta.document.*;import net.jxta.protocol.PeerAdvertisement;import net.jxta.protocol.RouteAdvertisement;import net.jxta.protocol.ConfigParams;import net.jxta.protocol.TransportAdvertisement;import net.jxta.impl.protocol.HTTPAdv;import net.jxta.impl.protocol.PlatformConfig;import net.jxta.impl.protocol.TCPAdv;import java.util.Enumeration;import java.util.Vector;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;public class XportConfTest extends TestCase {    static PeerGroup pg;    static int count;    public XportConfTest(java.lang.String testName)        throws net.jxta.exception.PeerGroupException {        super(testName);    }    /**     * Loads the Platform Config from the named file.     *     * @param  file the file containing the Platform Config to be loaded.     **/    private PlatformConfig loadConfig(File file) throws Exception {        PlatformConfig advertisement = null;        FileInputStream advStream = null;        try {            advStream = new FileInputStream(file);                        advertisement = (PlatformConfig)                AdvertisementFactory.newAdvertisement(                                   MimeMediaType.XMLUTF8, advStream);        } finally {            try {                if (advStream != null) {                    advStream.close();                }                advStream = null;            } catch (Exception ignored ) {;}        }        return advertisement;    }    private void saveConfig(ConfigParams advertisement, File file)        throws Exception {                FileOutputStream out = null;        try {            out = new FileOutputStream(file);            Document aDoc = advertisement.getDocument(MimeMediaType.XMLUTF8);            aDoc.sendToStream(out);        } finally {            if( null != out ) {                out.close();            }            out = null;        }    }    private void fixTcp(TCPAdv xpAdv) throws Exception {        xpAdv.setPublicAddressOnly(true);        xpAdv.setServer("1.1.1.1:1");        xpAdv.setServerEnabled(true);    }    private void fixHttp(HTTPAdv xpAdv) throws Exception {        xpAdv.setPublicAddressOnly(true);        xpAdv.setServer("1.1.1.1:1");        xpAdv.setServerEnabled(true);    }    private void removeRelay(ConfigParams config) throws Exception {        StructuredTextDocument param = (StructuredTextDocument)            config.getServiceParam(PeerGroup.relayProtoClassID);        param.appendChild(param.createElement("isOff"));        config.putServiceParam(PeerGroup.relayProtoClassID, param);    }    private TCPAdv extractTcp(ConfigParams config) throws Exception {        Element param =            config.getServiceParam(PeerGroup.tcpProtoClassID);        Enumeration tcpChilds = param.getChildren( TransportAdvertisement.getAdvertisementType() );        // get the TransportAdv        if( tcpChilds.hasMoreElements() ) {            param = (Element) tcpChilds.nextElement();            Attribute typeAttr = ((Attributable)param).getAttribute( "type" );            if( ! TCPAdv.getAdvertisementType().equals( typeAttr.getValue() ) )                throw new IllegalArgumentException( "transport adv is not a " + TCPAdv.getAdvertisementType() );            if( tcpChilds.hasMoreElements() )                throw new IllegalArgumentException( "Multiple transport advs detected for tcp" );        } else            throw new IllegalArgumentException( TransportAdvertisement.getAdvertisementType() +" could not be located" );                Advertisement paramsAdv = AdvertisementFactory.newAdvertisement((TextElement) param);        if( !(paramsAdv instanceof TCPAdv) )            throw new IllegalArgumentException( "Provided Advertisement was not a " + TCPAdv.getAdvertisementType() );        return (TCPAdv) paramsAdv;    }    private HTTPAdv extractHttp(ConfigParams config) throws Exception {        Element param =            config.getServiceParam(PeerGroup.httpProtoClassID);                    Enumeration httpChilds = param.getChildren( TransportAdvertisement.getAdvertisementType());                    // get the TransportAdv        if (httpChilds.hasMoreElements()) {            param = (Element) httpChilds.nextElement();            Attribute typeAttr = ((Attributable)param).getAttribute("type");                            if (! HTTPAdv.getAdvertisementType().equals(typeAttr.getValue()))                throw new IllegalArgumentException("transport adv is not a " + HTTPAdv.getAdvertisementType() + "(= " + typeAttr.getValue());                            if (httpChilds.hasMoreElements())                throw new IllegalArgumentException( "Multiple transport advs detected for http" );        } else {            throw new IllegalArgumentException("configuration did not contain http advertisement");        }                    Advertisement paramsAdv = AdvertisementFactory.newAdvertisement((TextElement) param);                    if( !(paramsAdv instanceof HTTPAdv) )            throw new IllegalArgumentException( "Provided Advertisement was not a " + HTTPAdv.getAdvertisementType() );                    return (HTTPAdv) paramsAdv;    }    private void insertTcp(TCPAdv tcpAdv, ConfigParams config)        throws Exception {        StructuredDocument parm =            StructuredDocumentFactory.newStructuredDocument(                                   MimeMediaType.XMLUTF8, "Parm");        StructuredDocumentUtils.copyElements(                                   parm,                                   parm,                                   (StructuredDocument) tcpAdv.getDocument(MimeMediaType.XMLUTF8));        config.putServiceParam(PeerGroup.tcpProtoClassID, parm);    }    private void insertHttp(HTTPAdv httpAdv, ConfigParams config)        throws Exception {        StructuredDocument parm =            StructuredDocumentFactory.newStructuredDocument(                                   MimeMediaType.XMLUTF8, "Parm");        StructuredDocumentUtils.copyElements(                                   parm,                                   parm,                                   (StructuredDocument) httpAdv.getDocument(MimeMediaType.XMLUTF8));        config.putServiceParam(PeerGroup.httpProtoClassID, parm);    }    private void fixConfig() throws Exception {        File jxtaHomeDir = new File( pg.getStoreHome() );        File configFile = new File( jxtaHomeDir, "PlatformConfig" );        ConfigParams config = loadConfig(configFile);        removeRelay(config);        TCPAdv tcpAdv = extractTcp(config);        HTTPAdv httpAdv = extractHttp(config);                fixTcp(tcpAdv);        fixHttp(httpAdv);        insertTcp(tcpAdv, config);        insertHttp(httpAdv, config);        saveConfig(config, configFile);    }    private void restoreConfig() throws Exception {        File jxtaHomeDir = new File( pg.getStoreHome() );        File configFileSaved = new File( jxtaHomeDir, "PlatformConfig.saved" );        File configFile = new File( jxtaHomeDir, "PlatformConfig" );        ConfigParams config = loadConfig(configFileSaved);        saveConfig(config, configFile);    }    private void backupConfig() throws Exception {        File jxtaHomeDir = new File( pg.getStoreHome() );        File configFileSaved = new File( jxtaHomeDir, "PlatformConfig.saved" );        File configFile = new File( jxtaHomeDir, "PlatformConfig" );        ConfigParams config;        try {            config = loadConfig(configFileSaved);            return; // already good. Do not risk replacing the backup.        } catch (Exception e) {            config = loadConfig(configFile);        }        saveConfig(config, configFileSaved);    }    public void setUp() throws Exception {        synchronized( XportConfTest.class ) {            try {                if (count++ > 0) return;                // Create one for nothing. Just to make sure the config                // is created.                System.setProperty("net.jxta.tls.password", "password");                System.setProperty("net.jxta.tls.principal", "password");                pg = PeerGroupFactory.newNetPeerGroup();                // Throw that one away.                pg.unref();                // Fix the config and start for good.                backupConfig();                fixConfig();                System.setProperty("net.jxta.tls.password", "password");                System.setProperty("net.jxta.tls.principal", "password");                pg = PeerGroupFactory.newNetPeerGroup();            } catch (Exception e) {                if (pg != null) {                    pg.unref();                }                restoreConfig();                throw e;            }        }    }    protected void tearDown() throws Exception {        synchronized( XportConfTest.class ) {            if (--count > 0) return;            pg.unref();            pg = null;            restoreConfig();            System.out.flush();            System.err.flush();        }    }    private Enumeration getEndpointAddresses (PeerAdvertisement peerAdv) {		// Get its EndpointService advertisement	TextElement endpParam = (TextElement)	    peerAdv.getServiceParam(PeerGroup.endpointClassID);		if (endpParam == null) {	    return null;	}	RouteAdvertisement route = null;	try {	    Enumeration paramChilds = endpParam.getChildren(			RouteAdvertisement.getAdvertisementType());            Element param = null;    	    if( paramChilds.hasMoreElements() ) {		param = (Element) paramChilds.nextElement();	    }	    route = (RouteAdvertisement)                     AdvertisementFactory.newAdvertisement((TextElement)param);	} catch (Exception ex) {	    return null;	}	if (route == null) {	    return null;	}	Vector addrs = new Vector();	try {	    for (Enumeration e = route.getDest().getEndpointAddresses(); 		 e.hasMoreElements(); ) {		addrs.addElement(new EndpointAddress((String) 				 e.nextElement()));	    }	} catch (Exception e) {	    return null;	}	if (addrs.size() == 0) {	    return null;	}	return addrs.elements();    }    public void testPubAddressOnly() throws Exception {        PeerAdvertisement newPadv = pg.getPeerAdvertisement();        Enumeration endps = getEndpointAddresses (newPadv);        assertFalse("There should be exactly 4 endpoint addresses : " + newPadv, endps == null);        assertTrue("There should be exactly 4 addresses : " + newPadv, endps.hasMoreElements());        Object oneEndp = endps.nextElement();        assertTrue("There should be exactly 4 addresses : " + newPadv, endps.hasMoreElements());        oneEndp = endps.nextElement();        assertTrue("There should be exactly 4 addresses : " + newPadv, endps.hasMoreElements());        oneEndp = endps.nextElement();        assertTrue("There should be exactly 4 addresses : " + newPadv, endps.hasMoreElements());        oneEndp = endps.nextElement();        assertFalse("There should be exactly 4 address : " + newPadv, endps.hasMoreElements());    }    public static Test suite() {        TestSuite suite = new TestSuite(XportConfTest.class);        return suite;    }        public static void main(java.lang.String[] args) {        junit.textui.TestRunner.run(suite());    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -