package fakestarteam.util.test; import static org.junit.Assert.*; import static org.junit.Assume.*; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.ossnoize.fakestarteam.FileUtility; import com.starbase.util.MD5; public class TestMD5 { String md5sum; String md5ipsum; byte[] md5data; InputStream md5IpsumStream; @Before public void setUp() throws Exception { md5sum = "561a7adc350a2f6ce0d9d97d8b4c1366"; md5ipsum = "fe02b7577a12a45727a10e565c21de8f"; md5data = new byte[] { 86, 26, 122, -36, 53, 10, 47, 108, -32, -39, -39, 125, -117, 76, 19, 102 }; md5IpsumStream = getClass().getResourceAsStream("/fakestarteam/test/ressources/md5testfile.ipsum"); } @After public void tearDown() throws Exception { md5sum = null; md5ipsum = null; md5data = null; FileUtility.close(md5IpsumStream); md5IpsumStream = null; } @Test public void testMD5String() { MD5 test = new MD5(md5sum); assertArrayEquals(md5data, test.getData()); } @Test public void testMD5ByteArray() { MD5 test = new MD5(md5data); assertEquals(md5sum, test.toHexString()); } @Test public void testComputeStreamMD5Ex() throws IOException { // eol chars have an effect on stream size and computed MD5 hash assumeTrue(isNix()); MD5 test = new MD5(); long size = test.computeStreamMD5Ex(md5IpsumStream); assertEquals(7075, size); assertEquals(md5ipsum, test.toHexString()); } @Test public void testComputeFileMD5Ex() throws IOException { // eol chars have an effect on file size and computed MD5 hash assumeTrue(isNix()); File ftest = File.createTempFile("md5testcase", "ipsum"); ftest.deleteOnExit(); FileOutputStream fout = new FileOutputStream(ftest); FileUtility.copyStream(fout, md5IpsumStream); FileUtility.close(fout); MD5 test = new MD5(); long size = test.computeFileMD5Ex(ftest); assertEquals(7075, size); assertEquals(md5ipsum, test.toHexString()); } @Test public void testSetData() { MD5 test = new MD5(); test.setData(md5data); assertArrayEquals(md5data, test.getData()); } @Test public void testEquals() { MD5 test = new MD5(md5data); assertEquals(test, new MD5(md5data)); assertFalse(test.equals(new Object())); assertFalse(test.equals(new MD5(md5ipsum))); } @Test public void testNotSet() { MD5 empty = new MD5(); assertEquals("00000000000000000000000000000000", empty.toHexString()); } @Test public void testSetAnything() { MD5 almostEmpty = new MD5("0000000000000000000000123456789a"); assertEquals("0000000000000000000000123456789a", almostEmpty.toHexString()); assertEquals("0000000000000000000000123456789a", almostEmpty.toString()); } /** * * @return true if OS is a *nix based system (Unix, Linux, AIX) */ private static boolean isNix() { String osName = System.getProperty("os.name").toLowerCase(); return (osName.indexOf("nix") >= 0 || osName.indexOf("nux") >= 0 || osName.indexOf("aix") > 0 ); } }