1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package net.grinder.communication;
23
24 import java.util.Random;
25
26 import org.junit.Before;
27
28
29
30
31
32
33
34 public class TestClientSenderAndServerReceiver
35 extends AbstractSenderAndReceiverSocketTests {
36
37 private final static Random s_random = new Random();
38
39 @Before public void setUp() throws Exception {
40 final ServerReceiver receiver = new ServerReceiver();
41
42 receiver.receiveFrom(
43 getAcceptor(),
44 new ConnectionType[] { getConnectionType() },
45 3, 10, 10000);
46
47 initialise(receiver, ClientSender.connect(getConnector(), null));
48 }
49
50 static int s_numberOfMessages = 0;
51
52 private class SenderThread extends Thread {
53 public void run() {
54 try {
55 final Sender sender = ClientSender.connect(getConnector(), null);
56
57 final int n = s_random.nextInt(10);
58
59 for (int i=0; i<n; ++i) {
60 sender.send(new SimpleMessage(1));
61 sleep(s_random.nextInt(30));
62 }
63
64 synchronized(Sender.class) {
65 s_numberOfMessages += n;
66 }
67
68 sender.shutdown();
69 }
70 catch (Exception e) {
71 e.printStackTrace();
72 }
73 }
74 }
75
76 public void testManySenders() throws Exception {
77 s_numberOfMessages = 0;
78
79 final Thread[] senderThreads = new Thread[5];
80
81 for (int i=0; i<senderThreads.length; ++i) {
82 senderThreads[i] = new SenderThread();
83 senderThreads[i].start();
84 }
85
86 for (int i=0; i<senderThreads.length; ++i) {
87 senderThreads[i].join();
88 }
89
90 for (int i=0; i<s_numberOfMessages; ++i) {
91 m_receiver.waitForMessage();
92 }
93 }
94 }