[freenet-cvs] r13581 - in trunk/freenet/test/freenet: . support

sback at freenetproject.org sback at freenetproject.org
Wed Jun 13 22:09:19 UTC 2007


Author: sback
Date: 2007-06-13 22:09:19 +0000 (Wed, 13 Jun 2007)
New Revision: 13581

Added:
   trunk/freenet/test/freenet/support/
   trunk/freenet/test/freenet/support/Base64Test.java
Log:
freenet.support test package added.
Quite complete Base64 test class.

Added: trunk/freenet/test/freenet/support/Base64Test.java
===================================================================
--- trunk/freenet/test/freenet/support/Base64Test.java	                        (rev 0)
+++ trunk/freenet/test/freenet/support/Base64Test.java	2007-06-13 22:09:19 UTC (rev 13581)
@@ -0,0 +1,123 @@
+package freenet.support;
+
+import junit.framework.TestCase;
+import java.util.Arrays;
+
+public class Base64Test extends TestCase {
+	
+	/**
+	 * Test the encode(byte[]) method
+	 * against a well-known example
+	 * (see http://en.wikipedia.org/wiki/Base_64 as reference)
+	 * to verify if it encode works correctly.
+	 */
+	public void testEncode() {
+		System.out.println("Base64-Encode");
+		String toEncode = "Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.";
+		String expectedResult = "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4";
+		byte[] aByteArrayToEncode = toEncode.getBytes();
+		assertEquals(Base64.encode(aByteArrayToEncode),expectedResult);
+	}
+	
+	/**
+	 * Test the decode(String) method
+	 * against a well-known example
+	 * (see http://en.wikipedia.org/wiki/Base_64 as reference)
+	 * to verify if it decode an already encoded string correctly.
+	 */	
+	public void testDecode() {
+		System.out.println("Base64-Decode");
+		String toDecode = "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=";
+		String expectedResult = "Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.";
+		try {
+			String decodedString = new String(Base64.decode(toDecode));
+			assertEquals(decodedString,expectedResult);
+		} catch (IllegalBase64Exception aException) {
+			fail("Not expected exception thrown : " + aException.getMessage()); }
+	}
+	
+	/**
+	 * Test encode(byte[] in)
+	 * and decode(String inStr) methods,
+	 * to verify if they work correctly together.
+	 * It compares the string before encoding
+	 * and with the one after decoding.
+	 */
+	public void testEncodeDecode() {
+		System.out.println("Base64-EncodeThenDecode");
+		
+		byte[] bytesDecoded;
+		byte[] bytesToEncode = new byte[5];
+		
+		bytesToEncode[0] = 127;		//byte upper bound
+		bytesToEncode[1] = 64;
+		bytesToEncode[2] = 0;
+		bytesToEncode[3] = -64;
+		bytesToEncode[4] = -128;	//byte lower bound
+		
+		String aBase64EncodedString = Base64.encode(bytesToEncode);
+		
+		try {
+			bytesDecoded = Base64.decode(aBase64EncodedString);
+			assertTrue(Arrays.equals(bytesToEncode,bytesDecoded)); } 
+		catch (IllegalBase64Exception aException) {
+			fail("Not expected exception thrown : " + aException.getMessage()); }
+	}
+	
+	/**
+	 * Test the encode(String,boolean)
+	 * method to verify if the padding
+	 * character '=' is correctly placed.
+	 */
+	public void testEncodePadding() {
+		System.out.println("Base64-encodePadding");
+		byte[][] methodBytesArray = {
+				{4,4,4},	//three byte Array -> no padding char expected	
+				{4,4},		//two byte Array -> one padding char expected
+				{4}};		//one byte Array -> two padding-chars expected	
+		String encoded;
+		
+		for (int i = 0; i<methodBytesArray.length; i++) {
+			encoded = Base64.encode(methodBytesArray[i],true);
+			if (i == 0)
+				assertEquals(encoded.indexOf('='),-1);	//no occurrences expected
+			else
+				assertEquals(encoded.indexOf('='),encoded.length()-i);
+		}
+	}
+	
+	/**
+	 * Test if the decode(String) method
+	 * raise correctly an exception when
+	 * providing a string with non-Base64
+	 * characters.
+	 */
+	public void testIllegalBaseCharacter() {
+		System.out.println("Base64-illegalCharacter");
+		String illegalCharString = "abcd=fghilmn";
+		try {
+			Base64.decode(illegalCharString);
+			fail("Expected IllegalBase64Exception not thrown"); }
+		catch (IllegalBase64Exception exception) {
+			assertSame("illegal Base64 character",exception.getMessage()); }
+	}
+	
+	/**
+	 * Test if the decode(String) method
+	 * raise correctly an exception when
+	 * providing a string with a 
+	 * wrong Base64 length.
+	 * (as we can consider not-padded strings too,
+	 *  the only wrong lengths are the ones
+	 *  where -> number MOD 4 = 1).
+	 */
+	public void testIllegalBaseLength() {
+		System.out.println("Base64-illegalLength");
+		String illegalLengthString = "a";		//most interesting case
+		try {
+			Base64.decode(illegalLengthString);
+			fail("Expected IllegalBase64Exception not thrown"); }
+		catch (IllegalBase64Exception exception) {
+			assertSame("illegal Base64 length",exception.getMessage()); }
+	}
+}




More information about the cvs mailing list