/**
*
*/
package hk.hku.cecid.edi.sfrm.pkg;
import java.io.File;
import java.io.IOException;
import hk.hku.cecid.edi.sfrm.activation.FileRegionDataSource;
import hk.hku.cecid.piazza.commons.os.OSCommander;
import hk.hku.cecid.piazza.commons.test.utils.FixtureStore;
import junit.framework.Assert;
import junit.framework.TestCase;
/**
* @author Patrick Yip
*
*/
public class SFRMMessageTest extends TestCase {
private ClassLoader FIXTURE_LOADER = FixtureStore.createFixtureLoader(false, this.getClass());
public void setUp() throws Exception{
System.out.println("------------------- Start up " + getName() + " -------------------");
}
public void tearDown() throws Exception{
System.out.println("------------------- Shutdown " + getName() + " -------------------");
}
public void testLargeFileMD5(){
//10GB
// long fileSize = 10737418240L;
//100MB
long fileSize = 104857600L;
//1GB
// long fileSize = 17179869184L;
long segmentSize = 1048576L;
OSCommander commander = new OSCommander();
File targetFile = new File(FIXTURE_LOADER.getResource(getName()).getFile(), "payload");
boolean thrown = false;
try {
if(targetFile.exists())
targetFile.delete();
commander.createDummyFile(targetFile.getCanonicalPath(), fileSize);
long numSegment = fileSize / segmentSize;
if(fileSize % segmentSize != 0){
numSegment+=1;
}
long inc = 0;
for(long i=0; numSegment > i ; i++){
long startPos = i*segmentSize;
long endPos = 0;
if(i != numSegment - 1){
endPos = segmentSize;
}else{
endPos = fileSize%segmentSize;
}
String md5 = "";
System.out.print(Long.toString(i+1) + ". Start: " + Long.toString(startPos) + ", End: " + Long.toString(endPos));
md5 = SFRMMessage.digest((new FileRegionDataSource(targetFile.getCanonicalPath(), startPos, endPos)));
System.out.println(", MD5: " + md5);
// Thread.sleep(200);
// System.gc();
// System.runFinalization();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
thrown = true;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
thrown = true;
}finally{
if(targetFile.exists())
targetFile.delete();
}
Assert.assertFalse("Should not throw error when evaluating the MD5 value", thrown);
}
}