[Udt-java-commits] SF.net SVN: udt-java:[32] udt-java/trunk/src
Status: Alpha
Brought to you by:
bschuller
From: <bsc...@us...> - 2010-04-30 14:02:52
|
Revision: 32 http://udt-java.svn.sourceforge.net/udt-java/?rev=32&view=rev Author: bschuller Date: 2010-04-30 14:02:45 +0000 (Fri, 30 Apr 2010) Log Message: ----------- Modified Paths: -------------- udt-java/trunk/src/main/java/udt/ClientSession.java udt-java/trunk/src/main/java/udt/CongestionControl.java udt-java/trunk/src/main/java/udt/ServerSession.java udt-java/trunk/src/main/java/udt/UDTCongestionControl.java udt-java/trunk/src/main/java/udt/UDTInputStream.java udt-java/trunk/src/main/java/udt/UDTReceiver.java udt-java/trunk/src/main/java/udt/UDTSender.java udt-java/trunk/src/main/java/udt/UDTSession.java udt-java/trunk/src/main/java/udt/sender/SenderLossList.java udt-java/trunk/src/main/java/udt/util/MeanValue.java udt-java/trunk/src/main/java/udt/util/UDTStatistics.java udt-java/trunk/src/main/java/udt/util/Util.java udt-java/trunk/src/test/java/udt/TestUDTInputStream.java udt-java/trunk/src/test/java/udt/TestUDTServerSocket.java udt-java/trunk/src/test/java/udt/UDTTestBase.java udt-java/trunk/src/test/java/udt/performance/TestUDTLargeData.java Added Paths: ----------- udt-java/trunk/src/main/java/udt/cc/ udt-java/trunk/src/main/java/udt/cc/SimpleTCP.java udt-java/trunk/src/test/java/udt/performance/TestUDTLargeDataCC1.java Modified: udt-java/trunk/src/main/java/udt/ClientSession.java =================================================================== --- udt-java/trunk/src/main/java/udt/ClientSession.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/main/java/udt/ClientSession.java 2010-04-30 14:02:45 UTC (rev 32) @@ -69,17 +69,15 @@ public void connect() throws InterruptedException,IOException{ int n=0; - sendHandShake(); - while(getState()!=ready){ if(getState()==invalid)throw new IOException("Can't connect!"); n++; if(getState()!=ready)Thread.sleep(500); } + cc.init(); logger.info("Connected, "+n+" handshake packets sent"); } - @Override public void received(UDTPacket packet, Destination peer) { Modified: udt-java/trunk/src/main/java/udt/CongestionControl.java =================================================================== --- udt-java/trunk/src/main/java/udt/CongestionControl.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/main/java/udt/CongestionControl.java 2010-04-30 14:02:45 UTC (rev 32) @@ -15,45 +15,63 @@ /** * set roundtrip time and associated variance + * @param rtt - round trip time in microseconds + * @param rttVar - round trip time variance in microseconds */ public abstract void setRTT(long rtt, long rttVar); /** * update packet arrival rate and link capacity with the * values received in an ACK packet - * @param rate - * @param linkCapacity + * @param rate - packet rate in packets per second + * @param linkCapacity - estimated link capacity in packets per second */ public abstract void updatePacketArrivalRate(long rate, long linkCapacity); + /** + * get the current value of the packet arrival + */ public long getPacketArrivalRate(); + /** + * get the current value of the estimated link capacity + */ public long getEstimatedLinkCapacity(); - /** - * Inter-packet interval in seconds - * @return + * get the current value of the inter-packet interval in microseconds */ public abstract double getSendInterval(); /** * get the congestion window size */ - public abstract long getCongestionWindowSize(); + public abstract double getCongestionWindowSize(); /** + * get the ACK interval. If larger than 0, the receiver should acknowledge + * every n'th packet + */ + public abstract long getAckInterval(); + + /** + * set the ACK interval. If larger than 0, the receiver should acknowledge + * every n'th packet + */ + public abstract void setAckInterval(long ackInterval); + + /** * Callback function to be called when an ACK packet is received. - * @param ackSeqno: the data sequence number acknowledged by this ACK. + * @param ackSeqno - the data sequence number acknowledged by this ACK. * see spec. page(16-17) */ public abstract void onACK(long ackSeqno); /** - * Callback function to be called when a loss report is received. - * @param lossInfo:list of sequence number of packets, in the format describled in packet.cpp. + * Callback function to be called when a loss report is received. + * @param lossInfo - list of sequence number of packets */ - public abstract void onNAK(List<Integer> lossInfo); + public abstract void onLoss(List<Integer> lossInfo); /** * Callback function to be called when a timeout event occurs @@ -62,13 +80,13 @@ /** * Callback function to be called when a data packet is sent. - * @param packetSeqNo: the data sequence number. + * @param packetSeqNo - the data packet sequence number */ public abstract void onPacketSend(long packetSeqNo); /** * Callback function to be called when a data packet is received. - * @param packetSeqNo: the data sequence number. + * @param packetSeqNo - the data packet sequence number. */ public abstract void onPacketReceive(long packetSeqNo); Modified: udt-java/trunk/src/main/java/udt/ServerSession.java =================================================================== --- udt-java/trunk/src/main/java/udt/ServerSession.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/main/java/udt/ServerSession.java 2010-04-30 14:02:45 UTC (rev 32) @@ -80,6 +80,7 @@ try{ setState(ready); socket=new UDTSocket(endPoint, this); + cc.init(); }catch(Exception uhe){ //session is invalid logger.log(Level.SEVERE,"",uhe); Modified: udt-java/trunk/src/main/java/udt/UDTCongestionControl.java =================================================================== --- udt-java/trunk/src/main/java/udt/UDTCongestionControl.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/main/java/udt/UDTCongestionControl.java 2010-04-30 14:02:45 UTC (rev 32) @@ -16,33 +16,30 @@ private static final Logger logger=Logger.getLogger(UDTCongestionControl.class.getName()); - private final UDTSession session; + protected final UDTSession session; - private final UDTStatistics statistics; + protected final UDTStatistics statistics; //round trip time in microseconds - private long roundTripTime=0; + protected long roundTripTime=0; //rate in packets per second - private long packetArrivalRate=0; + protected long packetArrivalRate=0; //link capacity in packets per second - private long estimatedLinkCapacity=0; + protected long estimatedLinkCapacity=0; // Packet sending period = packet send interval, in microseconds - private double packetSendingPeriod=1; + protected double packetSendingPeriod=1; // Congestion window size, in packets - private long congestionWindowSize=16; + protected double congestionWindowSize=16; - //last rate increase time (microsecond value) - long lastRateIncreaseTime=Util.getCurrentTime(); - /*if in slow start phase*/ - boolean slowStartPhase=true; + private boolean slowStartPhase=true; /*last ACKed seq no*/ - long lastAckSeqNumber=-1; + private long lastAckSeqNumber=-1; /*max packet seq. no. sent out when last decrease happened*/ private long lastDecreaseSeqNo; @@ -62,11 +59,13 @@ //this flag avoids immediate rate increase after a NAK private boolean loss=false; + //if larger than 0, the receiver should acknowledge every n'th packet + protected long ackInterval=-1; + public UDTCongestionControl(UDTSession session){ this.session=session; this.statistics=session.getStatistics(); lastDecreaseSeqNo=session.getInitialSequenceNumber()-1; - init(); } /* (non-Javadoc) @@ -108,11 +107,21 @@ return packetSendingPeriod; } + public long getAckInterval(){ + return ackInterval; + } + public void setAckInterval(long ackInterval){ + this.ackInterval=ackInterval; + if(session.getSocket().getReceiver()!=null){ + session.getSocket().getReceiver().setAckInterval(ackInterval); + } + } + /** * congestionWindowSize * @return */ - public long getCongestionWindowSize(){ + public double getCongestionWindowSize(){ return congestionWindowSize; } @@ -186,7 +195,7 @@ /* (non-Javadoc) * @see udt.CongestionControl#onNAK(java.util.List) */ - public void onNAK(List<Integer>lossInfo){ + public void onLoss(List<Integer>lossInfo){ loss=true; long firstBiggestlossSeqNo=lossInfo.get(0); nACKCount++; Modified: udt-java/trunk/src/main/java/udt/UDTInputStream.java =================================================================== --- udt-java/trunk/src/main/java/udt/UDTInputStream.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/main/java/udt/UDTInputStream.java 2010-04-30 14:02:45 UTC (rev 32) @@ -78,7 +78,8 @@ public UDTInputStream(UDTSocket socket, UDTStatistics statistics)throws IOException{ this.socket=socket; this.statistics=statistics; - appData=new PriorityBlockingQueue<AppData>(socket.getSession().getFlowWindowSize()); + int capacity=socket!=null? 4*socket.getSession().getFlowWindowSize() : 64 ; + appData=new PriorityBlockingQueue<AppData>(capacity); } /** @@ -178,7 +179,6 @@ //check if the data is in-order if(currentChunk.sequenceNumber==highestSequenceNumber+1){ highestSequenceNumber++; - //statistics.updateReadDataMD5(currentChunk.data); return; } else if(currentChunk.sequenceNumber<=highestSequenceNumber){ Modified: udt-java/trunk/src/main/java/udt/UDTReceiver.java =================================================================== --- udt-java/trunk/src/main/java/udt/UDTReceiver.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/main/java/udt/UDTReceiver.java 2010-04-30 14:02:45 UTC (rev 32) @@ -33,8 +33,8 @@ package udt; import java.io.IOException; import java.util.List; +import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; -import java.util.concurrent.PriorityBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -118,15 +118,15 @@ //to check the ACK, NAK, or EXP timer private long nextACK; //microseconds to next ACK event - private long ACK_INTERVAL=Util.getSYNTime(); + private long ackTimerInterval=Util.getSYNTime(); private long nextNAK; //microseconds to next NAK event - private long NAK_INTERVAL=Util.getSYNTime(); + private long nakTimerInterval=Util.getSYNTime(); private long nextEXP; //microseconds to next EXP event - private long EXP_INTERVAL=100*Util.getSYNTime(); + private long expTimerInterval=100*Util.getSYNTime(); //instant when the session was created (for expiry checking) private final long sessionUpSince; @@ -143,6 +143,9 @@ private volatile boolean stopped=false; + //(optional) ack interval (see CongestionControl interface) + private volatile long ackInterval=-1; + /** * if set to true connections will not expire, but will only be * closed by a Shutdown message @@ -165,10 +168,7 @@ packetPairWindow = new PacketPairWindow(16); largestReceivedSeqNumber=session.getInitialSequenceNumber()-1; bufferSize=session.getReceiveBufferSize(); - - //incoming packets are ordered by sequence number, with control packets having - //preference over data packets - handoffQueue=new PriorityBlockingQueue<UDTPacket>(session.getFlowWindowSize()); + handoffQueue=new ArrayBlockingQueue<UDTPacket>(4*session.getFlowWindowSize()); initMetrics(); start(); } @@ -194,9 +194,10 @@ Runnable r=new Runnable(){ public void run(){ try{ - nextACK=Util.getCurrentTime()+ACK_INTERVAL; - nextNAK=(long)(Util.getCurrentTime()+1.5*NAK_INTERVAL); - nextEXP=Util.getCurrentTime()+2*EXP_INTERVAL; + nextACK=Util.getCurrentTime()+ackTimerInterval; + nextNAK=(long)(Util.getCurrentTime()+1.5*nakTimerInterval); + nextEXP=Util.getCurrentTime()+2*expTimerInterval; + ackInterval=session.getCongestionControl().getAckInterval(); while(!stopped){ receiverAlgorithm(); } @@ -228,18 +229,18 @@ //check ACK timer long currentTime=Util.getCurrentTime(); if(nextACK<currentTime){ - nextACK=currentTime+ACK_INTERVAL; + nextACK=currentTime+ackTimerInterval; processACKEvent(true); } //check NAK timer if(nextNAK<currentTime){ - nextNAK=currentTime+NAK_INTERVAL; + nextNAK=currentTime+nakTimerInterval; processNAKEvent(); } //check EXP timer if(nextEXP<currentTime){ - nextEXP=currentTime+EXP_INTERVAL; + nextEXP=currentTime+expTimerInterval; processEXPEvent(); } //perform time-bounded UDP receive @@ -258,7 +259,7 @@ } } if(needEXPReset){ - nextEXP=Util.getCurrentTime()+EXP_INTERVAL; + nextEXP=Util.getCurrentTime()+expTimerInterval; } processTime.begin(); processUDTPacket(packet); @@ -367,11 +368,13 @@ //every nth packet will be discarded... for testing only of course public static int dropRate=0; + //number of received data packets private int n=0; protected void onDataPacketReceived(DataPacket dp)throws IOException{ long currentSequenceNumber = dp.getPacketSequenceNumber(); + //check whether to drop this packet n++; if(dropRate>0 && n % dropRate == 0){ @@ -379,6 +382,7 @@ return; } + long currentDataPacketArrivalTime = Util.getCurrentTime(); /*(4).if the seqNo of the current data packet is 16n+1,record the @@ -418,6 +422,11 @@ if(currentSequenceNumber>largestReceivedSeqNumber){ largestReceivedSeqNumber=currentSequenceNumber; } + + //(8) need to send an ACK? Some cc algorithms use this + if(ackInterval>0){ + if(n % ackInterval == 0)processACKEvent(false); + } } /** @@ -438,6 +447,7 @@ receiverLossList.insert(detectedLossSeqNumber); } endpoint.doSend(nAckPacket); + //logger.info("NAK for "+currentSequenceNumber); statistics.incNumberOfNAKSent(); } @@ -513,8 +523,8 @@ if(roundTripTime>0)roundTripTime = (roundTripTime*7 + rtt)/8; else roundTripTime = rtt; roundTripTimeVar = (roundTripTimeVar* 3 + Math.abs(roundTripTimeVar- rtt)) / 4; - ACK_INTERVAL=4*roundTripTime+roundTripTimeVar+Util.getSYNTime(); - NAK_INTERVAL=ACK_INTERVAL; + ackTimerInterval=4*roundTripTime+roundTripTimeVar+Util.getSYNTime(); + nakTimerInterval=ackTimerInterval; statistics.setRTT(roundTripTime, roundTripTimeVar); } } @@ -536,7 +546,7 @@ private volatile long ackSequenceNumber=0; protected void resetEXPTimer(){ - nextEXP=Util.getCurrentTime()+EXP_INTERVAL; + nextEXP=Util.getCurrentTime()+expTimerInterval; expCount=0; } @@ -544,6 +554,10 @@ expCount=0; } + public void setAckInterval(long ackInterval){ + this.ackInterval=ackInterval; + } + protected void onShutdown()throws IOException{ stop(); } Modified: udt-java/trunk/src/main/java/udt/UDTSender.java =================================================================== --- udt-java/trunk/src/main/java/udt/UDTSender.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/main/java/udt/UDTSender.java 2010-04-30 14:02:45 UTC (rev 32) @@ -246,7 +246,7 @@ long ackNumber=acknowledgement.getAckNumber(); cc.onACK(ackNumber); - statistics.setCongestionWindowSize(cc.getCongestionWindowSize()); + statistics.setCongestionWindowSize((long)cc.getCongestionWindowSize()); //need to remove all sequence numbers up the ack number from the sendBuffer boolean removed=false; for(long s=lastAckSequenceNumber;s<ackNumber;s++){ @@ -274,7 +274,7 @@ for(Integer i: nak.getDecodedLossInfo()){ senderLossList.insert(Long.valueOf(i)); } - session.getCongestionControl().onNAK(nak.getDecodedLossInfo()); + session.getCongestionControl().onLoss(nak.getDecodedLossInfo()); session.getSocket().getReceiver().resetEXPTimer(); statistics.incNumberOfNAKReceived(); statistics.storeParameters(); @@ -306,17 +306,16 @@ /** * sender algorithm */ - MeanValue v=new MeanValue("",true,128); + MeanValue v=new MeanValue("Wait for Ack time: "); public void senderAlgorithm()throws InterruptedException, IOException{ + statistics.addMetric(v); while(!paused){ long iterationStart=Util.getCurrentTime(); //last packet send time? //if the sender's loss list is not empty if (!senderLossList.isEmpty()) { - v.begin(); Long entry=senderLossList.getFirstEntry(); - v.end(); handleResubmit(entry); } @@ -327,7 +326,7 @@ int unAcknowledged=unacknowledged.get(); if(unAcknowledged<session.getCongestionControl().getCongestionWindowSize() - && unAcknowledged<session.getFlowWindowSize()){ + && unAcknowledged<session.getFlowWindowSize()){ //check for application data DataPacket dp=sendQueue.poll(); if(dp!=null){ @@ -342,7 +341,9 @@ if(unAcknowledged>=session.getCongestionControl().getCongestionWindowSize()){ statistics.incNumberOfCCWindowExceededEvents(); } + v.begin(); waitForAck(); + v.end(); } } @@ -455,7 +456,7 @@ */ public void waitForAck()throws InterruptedException{ waitForAckLatch.set(new CountDownLatch(1)); - waitForAckLatch.get().await(1000, TimeUnit.MILLISECONDS); + waitForAckLatch.get().await(2, TimeUnit.MILLISECONDS); } Modified: udt-java/trunk/src/main/java/udt/UDTSession.java =================================================================== --- udt-java/trunk/src/main/java/udt/UDTSession.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/main/java/udt/UDTSession.java 2010-04-30 14:02:45 UTC (rev 32) @@ -34,6 +34,7 @@ import java.net.DatagramPacket; import java.util.concurrent.atomic.AtomicLong; +import java.util.logging.Level; import java.util.logging.Logger; import udt.packets.Destination; @@ -72,7 +73,7 @@ * flow window size, i.e. how many data packets are * in-flight at a single time */ - protected int flowWindowSize=128; + protected int flowWindowSize=4*128; /** * remote UDT entity (address and socket ID) @@ -110,21 +111,23 @@ mySocketID=nextSocketID.incrementAndGet(); this.destination=destination; this.dgPacket=new DatagramPacket(new byte[0],0,destination.getAddress(),destination.getPort()); - //init configurable CC String clazzP=System.getProperty(CC_CLASS,UDTCongestionControl.class.getName()); Object ccObject=null; try{ Class<?>clazz=Class.forName(clazzP); ccObject=clazz.getDeclaredConstructor(UDTSession.class).newInstance(this); }catch(Exception e){ + logger.log(Level.WARNING,"Can't setup congestion control class <"+clazzP+">, using default.",e); ccObject=new UDTCongestionControl(this); } cc=(CongestionControl)ccObject; - System.out.println("using "+cc.getClass().getName()); + logger.info("Using "+cc.getClass().getName()); } + public abstract void received(UDTPacket packet, Destination peer); + public UDTSocket getSocket() { return socket; } Added: udt-java/trunk/src/main/java/udt/cc/SimpleTCP.java =================================================================== --- udt-java/trunk/src/main/java/udt/cc/SimpleTCP.java (rev 0) +++ udt-java/trunk/src/main/java/udt/cc/SimpleTCP.java 2010-04-30 14:02:45 UTC (rev 32) @@ -0,0 +1,36 @@ +package udt.cc; + +import java.util.List; + +import udt.UDTCongestionControl; +import udt.UDTSession; + +/** + * simple TCP CC algorithm from the paper + * "Optimizing UDP-based Protocol Implementations" by Y. Gu and R. Grossmann + */ +public class SimpleTCP extends UDTCongestionControl { + + public SimpleTCP(UDTSession session){ + super(session); + } + + @Override + public void init() { + packetSendingPeriod=0; + congestionWindowSize=2; + setAckInterval(2); + } + + @Override + public void onACK(long ackSeqno) { + congestionWindowSize += 1/congestionWindowSize; + } + + @Override + public void onLoss(List<Integer> lossInfo) { + congestionWindowSize *= 0.5; + } + + +} Property changes on: udt-java/trunk/src/main/java/udt/cc/SimpleTCP.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: udt-java/trunk/src/main/java/udt/sender/SenderLossList.java =================================================================== --- udt-java/trunk/src/main/java/udt/sender/SenderLossList.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/main/java/udt/sender/SenderLossList.java 2010-04-30 14:02:45 UTC (rev 32) @@ -48,6 +48,7 @@ } public void insert(Long obj){ + if(obj==null)System.out.println("!!!"); synchronized (backingList) { if(!backingList.contains(obj)){ if(backingList.isEmpty())backingList.add(obj); @@ -62,17 +63,13 @@ } } - public void remove(long seqNo){ - synchronized (backingList) { - backingList.remove(seqNo); - } - } - /** * retrieves the loss list entry with the lowest sequence number */ public Long getFirstEntry(){ - return backingList.poll(); + synchronized(backingList){ + return backingList.poll(); + } } public boolean isEmpty(){ Modified: udt-java/trunk/src/main/java/udt/util/MeanValue.java =================================================================== --- udt-java/trunk/src/main/java/udt/util/MeanValue.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/main/java/udt/util/MeanValue.java 2010-04-30 14:02:45 UTC (rev 32) @@ -42,7 +42,7 @@ public void addValue(double value){ mean=(mean*n+value)/(n+1); n++; - if(verbose && n % nValue == 1){ + if(verbose && n % nValue == 0){ if(msg!=null)System.out.print(msg+" "); System.out.println(getFormattedMean()); } Modified: udt-java/trunk/src/main/java/udt/util/UDTStatistics.java =================================================================== --- udt-java/trunk/src/main/java/udt/util/UDTStatistics.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/main/java/udt/util/UDTStatistics.java 2010-04-30 14:02:45 UTC (rev 32) @@ -35,8 +35,6 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -69,17 +67,10 @@ private volatile double sendPeriod; private volatile long congestionWindowSize; - private MessageDigest digest; - private final List<MeanValue>metrics=new ArrayList<MeanValue>(); public UDTStatistics(String componentDescription){ this.componentDescription=componentDescription; - try{ - digest=MessageDigest.getInstance("MD5"); - }catch(NoSuchAlgorithmException na){ - digest=null; - } } public int getNumberOfSentDataPackets() { @@ -170,14 +161,6 @@ this.congestionWindowSize = congestionWindowSize; } - public void updateReadDataMD5(byte[]data){ - digest.update(data); - } - - public String getDigest(){ - return hexString(digest); - } - public long getPacketArrivalRate(){ return packetArrivalRate; } @@ -268,15 +251,4 @@ } } - public static String hexString(MessageDigest digest){ - byte[] messageDigest = digest.digest(); - StringBuilder hexString = new StringBuilder(); - for (int i=0;i<messageDigest.length;i++) { - String hex = Integer.toHexString(0xFF & messageDigest[i]); - if(hex.length()==1)hexString.append('0'); - hexString.append(hex); - } - return hexString.toString(); - } - } Modified: udt-java/trunk/src/main/java/udt/util/Util.java =================================================================== --- udt-java/trunk/src/main/java/udt/util/Util.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/main/java/udt/util/Util.java 2010-04-30 14:02:45 UTC (rev 32) @@ -38,6 +38,7 @@ import java.io.OutputStream; import java.net.DatagramPacket; import java.net.InetAddress; +import java.security.MessageDigest; import udt.UDPEndPoint; @@ -149,5 +150,16 @@ p.setPort(clientPort); endpoint.sendRaw(p); } + + public static String hexString(MessageDigest digest){ + byte[] messageDigest = digest.digest(); + StringBuilder hexString = new StringBuilder(); + for (int i=0;i<messageDigest.length;i++) { + String hex = Integer.toHexString(0xFF & messageDigest[i]); + if(hex.length()==1)hexString.append('0'); + hexString.append(hex); + } + return hexString.toString(); + } } Modified: udt-java/trunk/src/test/java/udt/TestUDTInputStream.java =================================================================== --- udt-java/trunk/src/test/java/udt/TestUDTInputStream.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/test/java/udt/TestUDTInputStream.java 2010-04-30 14:02:45 UTC (rev 32) @@ -3,6 +3,7 @@ import java.security.MessageDigest; import udt.util.UDTStatistics; +import udt.util.Util; public class TestUDTInputStream extends UDTTestBase{ @@ -18,8 +19,8 @@ is.haveNewData(3, data3); is.noMoreData(); is.setBlocking(false); - readAll(is,8); - assertEquals(digest,stat.getDigest()); + String readMD5=readAll(is,8); + assertEquals(digest,readMD5); } public void test2()throws Exception{ @@ -34,8 +35,8 @@ is.haveNewData(2, data2); is.haveNewData(3, data3); is.noMoreData(); - readAll(is,5*1024*1024); - assertEquals(digest,stat.getDigest()); + String readMD5=readAll(is,5*1024*1024); + assertEquals(digest,readMD5); } public void testInOrder()throws Exception{ @@ -52,8 +53,8 @@ } is.noMoreData(); - readAll(is,1024*999); - assertEquals(digest,stat.getDigest()); + String readMD5 = readAll(is,1024*999); + assertEquals(digest,readMD5); } public void testRandomOrder()throws Exception{ @@ -70,9 +71,9 @@ for(int i : order){ is.haveNewData(i+1, blocks[i]); } - readAll(is,512,true); + String readMD5=readAll(is,512,true); - assertEquals(digest,stat.getDigest()); + assertEquals(digest,readMD5); } //read and discard data from the given input stream @@ -89,7 +90,7 @@ if(c>0)d.update(buf,0,c); } } - return UDTStatistics.hexString(d); + return Util.hexString(d); } } Modified: udt-java/trunk/src/test/java/udt/TestUDTServerSocket.java =================================================================== --- udt-java/trunk/src/test/java/udt/TestUDTServerSocket.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/test/java/udt/TestUDTServerSocket.java 2010-04-30 14:02:45 UTC (rev 32) @@ -6,7 +6,7 @@ import java.util.logging.Level; import java.util.logging.Logger; -import udt.util.UDTStatistics; +import udt.util.Util; public class TestUDTServerSocket extends UDTTestBase{ @@ -115,7 +115,7 @@ } System.out.println("Server thread exiting."); serverRunning=false; - md5_received=UDTStatistics.hexString(md5); + md5_received=Util.hexString(md5); serverSocket.shutDown(); System.out.println(s.getSession().getStatistics()); } Modified: udt-java/trunk/src/test/java/udt/UDTTestBase.java =================================================================== --- udt-java/trunk/src/test/java/udt/UDTTestBase.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/test/java/udt/UDTTestBase.java 2010-04-30 14:02:45 UTC (rev 32) @@ -5,7 +5,7 @@ import java.security.MessageDigest; import java.util.Random; -import udt.util.UDTStatistics; +import udt.util.Util; import junit.framework.TestCase; @@ -60,7 +60,7 @@ } public static String hexString(MessageDigest digest){ - return UDTStatistics.hexString(digest); + return Util.hexString(digest); } Modified: udt-java/trunk/src/test/java/udt/performance/TestUDTLargeData.java =================================================================== --- udt-java/trunk/src/test/java/udt/performance/TestUDTLargeData.java 2010-04-29 21:33:20 UTC (rev 31) +++ udt-java/trunk/src/test/java/udt/performance/TestUDTLargeData.java 2010-04-30 14:02:45 UTC (rev 32) @@ -14,6 +14,7 @@ import udt.UDTServerSocket; import udt.UDTSocket; import udt.UDTTestBase; +import udt.util.Util; public class TestUDTLargeData extends UDTTestBase{ @@ -87,7 +88,7 @@ System.out.println("MD5 hash of data received: "+md5_received); System.out.println(client.getStatistics()); - //assertEquals(md5_sent,md5_received); + assertEquals(md5_sent,md5_received); //store stat history to csv file client.getStatistics().writeParameterHistory(File.createTempFile("/udtstats-",".csv")); @@ -106,6 +107,7 @@ Runnable serverProcess=new Runnable(){ public void run(){ try{ + MessageDigest md5=MessageDigest.getInstance("MD5"); long start=System.currentTimeMillis(); UDTSocket s=serverSocket.accept(); assertNotNull(s); @@ -117,12 +119,13 @@ c=is.read(buf); if(c<0)break; else{ + md5.update(buf,0,c); total+=c; } } System.out.println("Server thread exiting, last received bytes: "+c); serverRunning=false; - md5_received=s.getSession().getStatistics().getDigest(); + md5_received=Util.hexString(md5); serverSocket.shutDown(); System.out.println(s.getSession().getStatistics()); } Added: udt-java/trunk/src/test/java/udt/performance/TestUDTLargeDataCC1.java =================================================================== --- udt-java/trunk/src/test/java/udt/performance/TestUDTLargeDataCC1.java (rev 0) +++ udt-java/trunk/src/test/java/udt/performance/TestUDTLargeDataCC1.java 2010-04-30 14:02:45 UTC (rev 32) @@ -0,0 +1,33 @@ +package udt.performance; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import udt.UDTReceiver; +import udt.UDTSession; +import udt.cc.SimpleTCP; + +//uses different CC algorithm +public class TestUDTLargeDataCC1 extends TestUDTLargeData{ + + boolean running=false; + + //how many + int num_packets=50; + + //how large is a single packet + int size=1*1024*1024; + + int TIMEOUT=Integer.MAX_VALUE; + + int READ_BUFFERSIZE=1*1024*1024; + + public void test1()throws Exception{ + Logger.getLogger("udt").setLevel(Level.INFO); + UDTReceiver.dropRate=0; + System.setProperty(UDTSession.CC_CLASS, SimpleTCP.class.getName()); + TIMEOUT=Integer.MAX_VALUE; + doTest(); + } + +} Property changes on: udt-java/trunk/src/test/java/udt/performance/TestUDTLargeDataCC1.java ___________________________________________________________________ Added: svn:mime-type + text/plain This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |