summaryrefslogtreecommitdiffstats
path: root/simple/simple-transport/src/test/java/org/simpleframework/transport/SocketBufferTest.java
blob: a893f04c92a9d3e89ed1059e640a20dbca5110d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package org.simpleframework.transport;

import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;

import junit.framework.TestCase;

import org.simpleframework.transport.trace.MockTrace;
import org.simpleframework.transport.trace.Trace;

public class SocketBufferTest extends TestCase {
   
   
   public void testBulkWrite() throws Exception {
      ServerBuffer reader = new ServerBuffer();
      SocketAddress address = new InetSocketAddress("localhost", reader.getPort());
      SocketChannel channel = SocketChannel.open();
      channel.configureBlocking(false); // underlying socket must be non-blocking
      channel.connect(address);

      while(!channel.finishConnect()) { // wait to finish connection
         Thread.sleep(10);
      };
      Trace trace = new MockTrace();
      SocketWrapper wrapper = new SocketWrapper(channel,  trace);
      SocketBuffer builder = new SocketBuffer(wrapper, 100, 4096);
      
      for(int i = 0; i < 10000; i++){
         ByteBuffer buf = ByteBuffer.wrap(("message-"+i+"\n").getBytes());
         
         if(i > 18) {
            System.err.println("FAIL......."+i);
         }
         if(!builder.write(buf)){
            while(!builder.flush()) {
               System.err.println("FLUSHING!!!");
               Thread.sleep(1);
            }
         }
      }
      while(!builder.flush()) {
         System.err.println("FLUSHING!!!");
      }
      builder.close();
      reader.awaitClose();
      
      String data = reader.getBuffer().toString();
      String[] list = data.split("\\n");
      
      for(int i = 0; i < 10000; i++){
         String msg = list[i];
         if(!msg.equals("message-"+i)) {
            System.err.println(list[i]);
         }         
         assertEquals("At index " + i + " value="+list[i] +" expect message-"+i, list[i], "message-"+i);
      }
   }
   
   public void testSimpleWrite() throws Exception {
      ServerBuffer reader = new ServerBuffer();
      SocketAddress address = new InetSocketAddress("localhost", reader.getPort());
      SocketChannel channel = SocketChannel.open();
      channel.configureBlocking(false); // underlying socket must be non-blocking
      channel.connect(address);

      while(!channel.finishConnect()) { // wait to finish connection
         Thread.sleep(10);
      };
      Trace trace = new MockTrace();
      SocketWrapper wrapper = new SocketWrapper(channel,  trace);
      SocketBuffer builder = new SocketBuffer(wrapper, 100, 4096);
      
      builder.write(ByteBuffer.wrap("hello there ".getBytes()));
      builder.write(ByteBuffer.wrap("this ".getBytes()));
      builder.write(ByteBuffer.wrap("is ".getBytes()));
      builder.write(ByteBuffer.wrap("a ".getBytes()));
      builder.write(ByteBuffer.wrap("test".getBytes()));
      builder.flush();
      builder.close();
      reader.awaitClose();
      
      assertEquals(reader.getBuffer().toString(), "hello there this is a test");
   }
}