You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ni...@apache.org on 2006/01/15 15:38:14 UTC

svn commit: r369203 - /directory/trunks/mina/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java

Author: niklas
Date: Sun Jan 15 06:38:09 2006
New Revision: 369203

URL: http://svn.apache.org/viewcvs?rev=369203&view=rev
Log:
Fix for DIRMINA-159. SocketTrafficControlTest and DatagramTrafficControlTest will work better now.

Modified:
    directory/trunks/mina/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java

Modified: directory/trunks/mina/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java
URL: http://svn.apache.org/viewcvs/directory/trunks/mina/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java?rev=369203&r1=369202&r2=369203&view=diff
==============================================================================
--- directory/trunks/mina/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java (original)
+++ directory/trunks/mina/core/src/test/java/org/apache/mina/transport/AbstractTrafficControlTest.java Sun Jan 15 06:38:09 2006
@@ -79,60 +79,69 @@
         future.join();
         IoSession session = future.getSession();
         
-        write( session, "1" );
-        Thread.sleep( 250 );
-        assertEquals( "1", getReceived( session ) );
-        assertEquals( "1", getSent( session ) );
-        
-        session.suspendRead();
-        
-        write( session, "2" );
-        Thread.sleep( 250 );
-        assertEquals( "1", getReceived( session ) );
-        assertEquals( "12", getSent( session ) );
-        
-        session.suspendWrite();
-        
-        write( session, "3" );
-        Thread.sleep( 250 );
-        assertEquals( "1", getReceived( session ) );
-        assertEquals( "12", getSent( session ) );
-        
-        session.resumeRead();
-        
-        write( session, "4" );
-        Thread.sleep( 250 );
-        assertEquals( "12", getReceived( session ) );
-        assertEquals( "12", getSent( session ) );
-        
-        session.resumeWrite();
-        
-        write( session, "5" );
-        Thread.sleep( 250 );
-        assertEquals( "12345", getReceived( session ) );
-        assertEquals( "12345", getSent( session ) );
-        
-        session.suspendWrite();
-        
-        write( session, "6" );
-        Thread.sleep( 250 );
-        assertEquals( "12345", getReceived( session ) );
-        assertEquals( "12345", getSent( session ) );
-        
-        session.suspendRead();
-        session.resumeWrite();
-        
-        write( session, "7" );
-        Thread.sleep( 250 );
-        assertEquals( "12345", getReceived( session ) );
-        assertEquals( "1234567", getSent( session ) );
-        
-        session.resumeRead();
+        Object lock = session.getAttribute( "lock" );
+        synchronized( lock )
+        {
         
-        Thread.sleep( 250 );
-        assertEquals( "1234567", getReceived( session ) );
-        assertEquals( "1234567", getSent( session ) );
+            write( session, "1" );
+            assertEquals( '1', read( session ) );
+            assertEquals( "1", getReceived( session ) );
+            assertEquals( "1", getSent( session ) );
+            
+            session.suspendRead();
+            
+            write( session, "2" );
+            assertFalse( canRead( session ) );
+            assertEquals( "1", getReceived( session ) );
+            assertEquals( "12", getSent( session ) );
+            
+            session.suspendWrite();
+            
+            write( session, "3" );
+            assertFalse( canRead( session ) );
+            assertEquals( "1", getReceived( session ) );
+            assertEquals( "12", getSent( session ) );
+            
+            session.resumeRead();
+            
+            write( session, "4" );
+            assertEquals( '2', read( session ) );
+            assertEquals( "12", getReceived( session ) );
+            assertEquals( "12", getSent( session ) );
+            
+            session.resumeWrite();
+            assertEquals( '3', read( session ) );
+            assertEquals( '4', read( session ) );
+            
+            write( session, "5" );
+            assertEquals( '5', read( session ) );
+            assertEquals( "12345", getReceived( session ) );
+            assertEquals( "12345", getSent( session ) );
+            
+            session.suspendWrite();
+            
+            write( session, "6" );
+            assertFalse( canRead( session ) );
+            assertEquals( "12345", getReceived( session ) );
+            assertEquals( "12345", getSent( session ) );
+            
+            session.suspendRead();
+            session.resumeWrite();
+            
+            write( session, "7" );
+            assertFalse( canRead( session ) );
+            assertEquals( "12345", getReceived( session ) );
+            assertEquals( "1234567", getSent( session ) );
+            
+            session.resumeRead();
+            assertEquals( '6', read( session ) );
+            assertEquals( '7', read( session ) );
+            
+            assertEquals( "1234567", getReceived( session ) );
+            assertEquals( "1234567", getSent( session ) );
         
+        }
+            
         session.close().join();
     }
 
@@ -140,13 +149,34 @@
     {
         session.write( ByteBuffer.wrap( s.getBytes( "ASCII" ) ) );
     }
+
+    private int read( IoSession session ) throws Exception
+    {
+        int pos = ( ( Integer) session.getAttribute( "pos" ) ).intValue();
+        for( int i = 0; i < 10 && pos == getReceived( session ).length(); i++ )
+        {
+            Object lock = session.getAttribute( "lock" );
+            lock.wait( 200 );
+        }
+        session.setAttribute( "pos", new Integer( pos + 1 ) );
+        return getReceived( session ).charAt( pos );
+    }
+    
+    private boolean canRead( IoSession session ) throws Exception
+    {
+        int pos = ( ( Integer) session.getAttribute( "pos" ) ).intValue();
+        Object lock = session.getAttribute( "lock" );
+        lock.wait( 250 );
+        String received = getReceived( session );
+        return pos < received.length();
+    }
     
-    private static String getReceived( IoSession session ) 
+    private String getReceived( IoSession session ) throws Exception
     {
         return session.getAttribute( "received" ).toString();
     }
     
-    private static String getSent( IoSession session ) 
+    private String getSent( IoSession session ) throws Exception
     {
         return session.getAttribute( "sent" ).toString();
     }
@@ -156,8 +186,10 @@
         public void sessionCreated( IoSession session ) throws Exception
         {
             super.sessionCreated( session );
+            session.setAttribute( "pos", new Integer( 0 ) );
             session.setAttribute( "received", new StringBuffer() );
             session.setAttribute( "sent", new StringBuffer() );
+            session.setAttribute( "lock", new Object() );
         }
 
         public void messageReceived( IoSession session, Object message ) throws Exception
@@ -165,8 +197,13 @@
             ByteBuffer buffer = ( ByteBuffer ) message;
             byte[] data = new byte[ buffer.remaining() ];
             buffer.get( data );
-            StringBuffer sb = ( StringBuffer ) session.getAttribute( "received" );
-            sb.append( new String( data, "ASCII" ) );
+            Object lock = session.getAttribute( "lock" );
+            synchronized ( lock )
+            {
+                StringBuffer sb = ( StringBuffer ) session.getAttribute( "received" );
+                sb.append( new String( data, "ASCII" ) );
+                lock.notifyAll();
+            }
         }
 
         public void messageSent( IoSession session, Object message ) throws Exception