/*
* Copyright (c) 2001-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.jxta.impl.id.UUID;
import java.io.ByteArrayOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.URI;
import java.security.MessageDigest;
import java.io.IOException;
import java.security.ProviderException;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import net.jxta.codat.CodatID;
import net.jxta.id.ID;
import net.jxta.id.IDFactory;
import net.jxta.peer.PeerID;
import net.jxta.peergroup.PeerGroupID;
import net.jxta.pipe.PipeID;
/**
* @author mike
*/
public final class IDTest extends TestCase {
/** Creates new DocTest */
public IDTest(String name) {
super(name);
}
public void testCodatID() {
try {
PeerGroupID seedGroup = IDFactory.newPeerGroupID("uuid");
CodatID first = IDFactory.newCodatID(seedGroup);
CodatID second = IDFactory.newCodatID(seedGroup);
CodatID third;
ID interloper = IDFactory.newPeerID(IDFactory.newPeerGroupID("uuid"));
String asString;
ID myPeerGroup;
boolean isStatic;
assertTrue("comparison of a CodatID against itself failed", first.equals(first));
assertTrue("comparison of two different CodatIDs should have failed", !first.equals(second));
assertTrue("comparison of different types should have failed", !first.equals(interloper));
assertTrue("comparison of different types should have failed", !interloper.equals(first));
assertTrue("zero hashcodereturned", 0 != first.hashCode());
URI asURI = first.toURI();
asString = first.toString();
assertTrue("comparison of ID string and string of URI was not the same", asString.equals(asURI.toString()));
third = (CodatID) IDFactory.fromURI(asURI);
assertTrue("result of conversion to URI and back to ID was not equal to original", first.equals(third));
myPeerGroup = first.getPeerGroupID();
assertTrue("clone of ID is not of same peergroup.", first.getPeerGroupID().equals(third.getPeerGroupID()));
assertTrue("dynamic CodatID did not test as such.", !first.isStatic());
asURI = first.toURI();
third = (CodatID) IDFactory.fromURI(asURI);
assertTrue("result of conversion to URI and back to ID was not equal to original", first.equals(third));
} catch (Exception everything) {
everything.printStackTrace();
fail("caught an unexpected exception - " + everything.toString());
}
}
public void testPeerGroupID() {
try {
byte[] seed = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
PeerGroupID first = IDFactory.newPeerGroupID("uuid");
PeerGroupID second = IDFactory.newPeerGroupID("uuid");
PeerGroupID third = IDFactory.newPeerGroupID(second);
PeerGroupID fourth;
PeerGroupID fifth = IDFactory.newPeerGroupID(seed);
PeerGroupID sixth = IDFactory.newPeerGroupID(fifth, seed);
ID interloper = IDFactory.newPeerID(IDFactory.newPeerGroupID("uuid"));
String asString;
URI asURI;
ID myPeerGroup;
boolean isStatic;
assertTrue("comparison of a PeerGroupID against itself failed", first.equals(first));
assertTrue("comparison against worldPeerGroup should have failed", !first.equals(PeerGroupID.worldPeerGroupID));
assertTrue("comparison of two different PeerGroupIDs should have failed", !first.equals(second));
assertTrue("comparison of different types should have failed", !first.equals(interloper));
assertTrue("comparison of different types should have failed", !interloper.equals(first));
assertTrue("zero hashcodereturned", 0 != first.hashCode());
assertTrue("hashcode for world group should not have matched."
,
PeerGroupID.worldPeerGroupID.hashCode() != first.hashCode());
asURI = first.toURI();
asString = first.toString();
assertTrue("comparison of ID string and string of URI was not the same", asString.equals(asURI.toString()));
fourth = (PeerGroupID) IDFactory.fromURI(asURI);
assertTrue("result of conversion to URI and back to ID was not equal to original", first.equals(fourth));
Object fromFirst = first.getUniqueValue();
Object fromSecond = second.getUniqueValue();
assertTrue("comparison of UUIDs from an ID and a clone failed", fromFirst.equals(fourth.getUniqueValue()));
assertTrue("comparison of UUIDs from an ID and a different ID should have failed."
,
!fromFirst.equals(second.getUniqueValue()));
assertTrue("simple group shouldnt have had a parent", null == first.getParentPeerGroupID());
assertTrue("parent group didnt match expected.", third.getParentPeerGroupID().equals(second));
third = IDFactory.newPeerGroupID(PeerGroupID.worldPeerGroupID);
assertTrue("parent group wasnt world group", third.getParentPeerGroupID().equals(PeerGroupID.worldPeerGroupID));
assertTrue("parent didnt match", fifth.equals(sixth.getParentPeerGroupID()));
asURI = first.toURI();
third = (PeerGroupID) IDFactory.fromURI(asURI);
assertTrue("result of conversion to URI and back to ID was not equal to original", first.equals(third));
} catch (Exception everything) {
everything.printStackTrace();
fail("caught an unexpected exception - " + everything.toString());
}
}
public void testPeerID() {
try {
PeerID first = IDFactory.newPeerID(IDFactory.newPeerGroupID("uuid"));
PeerID second = IDFactory.newPeerID(IDFactory.newPeerGroupID("uuid"));
PeerID third;
ID interloper = IDFactory.newPeerGroupID("uuid");
String asString;
URI asURI;
ID myPeerGroup;
boolean isStatic;
assertTrue("comparison of a PeerID against itself failed", first.equals(first));
assertTrue("comparison of two different PeerIDs should have failed", !first.equals(second));
assertTrue("comparison of different types should have failed", !first.equals(interloper));
assertTrue("comparison of different types should have failed", !interloper.equals(first));
assertTrue("zero hashcodereturned", 0 != first.hashCode());
asURI = first.toURI();
asString = first.toString();
assertTrue("comparison of ID string and string of URI was not the same", asString.equals(asURI.toString()));
third = (PeerID) IDFactory.fromURI(asURI);
assertTrue("result of conversion to URI and back to ID was not equal to original", first.equals(third));
assertTrue("clone of ID is not of same peergroup.", first.getPeerGroupID().equals(third.getPeerGroupID()));
asURI = first.toURI();
third = (PeerID) IDFactory.fromURI(asURI);
assertTrue("result of conversion to URI and back to ID was not equal to original", first.equals(third));
} catch (Exception everything) {
everything.printStackTrace();
fail("caught an unexpected exception - " + everything.toString());
}
}
public void testSeededPipeID() {
MessageDigest dig = null;
try {
dig = MessageDigest.getInstance("SHA-1");
} catch (NoSuchAlgorithmException caught) {
dig = null;
}
if (dig == null) {
throw new ProviderException("SHA-1 digest algorithm not found");
}
dig.reset();
String pipeSeed = "JXTA_PIPE for user #012494345676";
// Must use UTF-8 because platform encoding does vary.
try {
dig.update(pipeSeed.getBytes("UTF-8"));
} catch (UnsupportedEncodingException never) {
// UTF-8 is builtin
;
}
byte[] result = dig.digest();
PipeID first = IDFactory.newPipeID(IDFactory.newPeerGroupID("uuid"), result);
}
public void testPipeID() {
try {
PipeID first = IDFactory.newPipeID(IDFactory.newPeerGroupID("uuid"));
PipeID second = IDFactory.newPipeID(IDFactory.newPeerGroupID("uuid"));
PipeID third;
ID interloper = IDFactory.newPeerGroupID("uuid");
String asString;
URI asURI;
ID myPeerGroup;
boolean isStatic;
assertTrue("comparison of a PipeID against itself failed", first.equals(first));
assertTrue("comparison of two different PipeIDs should have failed", !first.equals(second));
assertTrue("comparison of different types should have failed", !first.equals(interloper));
assertTrue("comparison of different types should have failed", !interloper.equals(first));
assertTrue("zero hashcode returned", 0 != first.hashCode());
asURI = first.toURI();
asString = first.toString();
assertTrue("comparison of ID string and string of URI was not the same", asString.equals(asURI.toString()));
third = (PipeID) IDFactory.fromURI(asURI);
assertTrue("result of conversion to URI and back to ID was not equal to original", first.equals(third));
assertTrue("clone of ID is not of same peergroup.", first.getPeerGroupID().equals(third.getPeerGroupID()));
asURI = first.toURI();
third = (PipeID) IDFactory.fromURI(asURI);
assertTrue("result of conversion to URI and back to ID was not equal to original", first.equals(third));
} catch (Exception everything) {
everything.printStackTrace();
fail("caught an unexpected exception - " + everything.toString());
}
}
public static void main(String args[]) {
junit.textui.TestRunner.run(suite());
System.err.flush();
System.out.flush();
}
public static Test suite() {
TestSuite suite = new TestSuite(IDTest.class);
return suite;
}
}