View Javadoc

1   // Copyright (C) 2000 - 2012 Philip Aston
2   // All rights reserved.
3   //
4   // This file is part of The Grinder software distribution. Refer to
5   // the file LICENSE which is part of The Grinder distribution for
6   // licensing details. The Grinder distribution is available on the
7   // Internet at http://grinder.sourceforge.net/
8   //
9   // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
10  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
11  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
12  // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
13  // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
14  // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
15  // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
16  // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
17  // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
18  // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
19  // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
20  // OF THE POSSIBILITY OF SUCH DAMAGE.
21  
22  package net.grinder.communication;
23  
24  import java.util.Random;
25  
26  import org.junit.Before;
27  
28  
29  /**
30   * Unit tests for {link ClientSender} and {@link ServerReceiver}.
31   *
32   * @author Philip Aston
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  }