View Javadoc

1   // Copyright (C) 2003 - 2011 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 static org.junit.Assert.assertEquals;
25  import static org.junit.Assert.assertSame;
26  import static org.junit.Assert.assertTrue;
27  import static org.junit.Assert.fail;
28  
29  import java.util.ArrayList;
30  import java.util.List;
31  
32  import org.junit.Test;
33  
34  
35  /**
36   * Unit tests for {@link QueuedSenderDecorator}.
37   *
38   * @author Philip Aston
39   */
40  public class TestQueuedSenderDecorator {
41  
42    private final static class StubSender implements Sender {
43  
44      private List<Message> m_messagesReceived = new ArrayList<Message>();
45      private boolean m_shutdown;
46  
47      public void send(Message message) throws CommunicationException {
48        m_messagesReceived.add(message);
49      }
50  
51      public void shutdown() {
52        m_shutdown = true;
53      }
54  
55      public Message[] getMessagesReceived() {
56        try {
57          return m_messagesReceived.toArray(new Message[0]);
58        }
59        finally {
60          m_messagesReceived.clear();
61        }
62      }
63  
64      public boolean getIsShutdown() {
65        return m_shutdown;
66      }
67    }
68  
69    @Test public void testConstructor() throws Exception {
70      final StubSender sender = new StubSender();
71  
72      new QueuedSenderDecorator(sender);
73    }
74  
75    @Test public void testSend() throws Exception {
76      final StubSender sender = new StubSender();
77  
78      final QueuedSender queuedSender = new QueuedSenderDecorator(sender);
79  
80      final Message message1 = new SimpleMessage();
81      final Message message2 = new SimpleMessage();
82  
83      queuedSender.send(message1);
84      queuedSender.send(message2);
85      queuedSender.flush();
86  
87      final Message[] messagesReceived = sender.getMessagesReceived();
88  
89      assertEquals(2, messagesReceived.length);
90      assertSame(message1, messagesReceived[0]);
91      assertSame(message2, messagesReceived[1]);
92    }
93  
94    @Test public void testQueueAndFlush() throws Exception {
95      final StubSender sender = new StubSender();
96  
97      final QueuedSender queuedSender = new QueuedSenderDecorator(sender);
98  
99      final Message message1 = new SimpleMessage();
100     final Message message2 = new SimpleMessage();
101     final Message message3 = new SimpleMessage();
102     final Message message4 = new SimpleMessage();
103 
104     queuedSender.send(message1);
105 
106     assertEquals(0, sender.getMessagesReceived().length);
107 
108     queuedSender.flush();
109 
110     final Message[] messagesReceived = sender.getMessagesReceived();
111 
112     assertEquals(1, messagesReceived.length);
113     assertSame(message1, messagesReceived[0]);
114 
115     queuedSender.send(message1);
116     queuedSender.send(message2);
117     queuedSender.send(message3);
118     queuedSender.flush();
119     queuedSender.send(message4);
120 
121     final Message[] messagesReceived2 = sender.getMessagesReceived();
122 
123     assertEquals(3, messagesReceived2.length);
124     assertSame(message1, messagesReceived2[0]);
125     assertSame(message2, messagesReceived2[1]);
126     assertSame(message3, messagesReceived2[2]);
127 
128     queuedSender.flush();
129 
130     final Message[] messagesReceived3 = sender.getMessagesReceived();
131 
132     assertEquals(1, messagesReceived3.length);
133     assertSame(message4, messagesReceived3[0]);
134   }
135 
136   @Test public void testShutdown() throws Exception {
137     final StubSender sender = new StubSender();
138 
139     final QueuedSender queuedSender = new QueuedSenderDecorator(sender);
140 
141     assertTrue(!sender.getIsShutdown());
142 
143     queuedSender.shutdown();
144 
145     assertTrue(sender.getIsShutdown());
146 
147     try {
148       queuedSender.send(new SimpleMessage());
149       fail("Expected CommunicationException");
150     }
151     catch (CommunicationException e) {
152     }
153 
154     try {
155       queuedSender.flush();
156       fail("Expected CommunicationException");
157     }
158     catch (CommunicationException e) {
159     }
160   }
161 }