View Javadoc

1   // Copyright (C) 2003 - 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  
25  import static org.junit.Assert.assertEquals;
26  
27  import java.io.InputStream;
28  import java.io.PipedOutputStream;
29  
30  import org.junit.After;
31  import org.junit.Before;
32  import org.junit.Test;
33  
34  
35  /**
36   *  Unit tests for {@code MessagePump}.
37   *
38   * @author Philip Aston
39   */
40  public class TestMessagePump extends AbstractSenderAndReceiverTests {
41  
42    private MessagePump m_messagePump;
43    private Sender m_intermediateSender;
44    private Receiver m_intermediateReceiver;
45  
46    @Before public void setUp() throws Exception {
47  
48      // m_sender -> m_intermediateReceiver -> messagePump
49      // -> m_intermediateSender -> m_receiver
50  
51      final PipedOutputStream intermediateSenderOutputStream =
52        new PipedOutputStream();
53      m_intermediateSender = new StreamSender(intermediateSenderOutputStream);
54  
55      final InputStream receiverInputStream =
56        new BigBufferPipedInputStream(intermediateSenderOutputStream);
57  
58      final PipedOutputStream senderOutputStream = new PipedOutputStream();
59  
60      initialise(new StreamReceiver(receiverInputStream),
61                 new StreamSender(senderOutputStream));
62  
63      final InputStream intermediateReceiverInputStream =
64        new BigBufferPipedInputStream(senderOutputStream);
65      m_intermediateReceiver =
66        new StreamReceiver(intermediateReceiverInputStream);
67  
68      m_messagePump =
69        new MessagePump(m_intermediateReceiver, m_intermediateSender, 1);
70  
71      m_messagePump.start();
72    }
73  
74    @After public void tearDown() throws Exception {
75      m_messagePump.shutdown();
76    }
77  
78    @Test public void testShutdownOnNullMessage() throws Exception {
79      m_sender.send(null);
80      assertEquals(null, m_receiver.waitForMessage());
81    }
82  
83    @Test public void testShutdownIfReceiverShutdown() throws Exception {
84      m_sender.shutdown();
85      assertEquals(null, m_intermediateReceiver.waitForMessage());
86      assertEquals(null, m_receiver.waitForMessage());
87  
88    }
89  }
90