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 static org.junit.Assert.assertSame;
25 import static org.junit.Assert.fail;
26 import static org.mockito.Matchers.isA;
27 import static org.mockito.Mockito.doThrow;
28 import static org.mockito.Mockito.times;
29 import static org.mockito.Mockito.verify;
30 import static org.mockito.Mockito.verifyNoMoreInteractions;
31
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.mockito.Mock;
35 import org.mockito.MockitoAnnotations;
36
37
38
39
40
41
42
43 public class TestTeeSender {
44
45 @Mock private Sender m_sender1;
46 @Mock private Sender m_sender2;
47
48 @Before public void setUp() {
49 MockitoAnnotations.initMocks(this);
50 }
51
52 @Test public void testWithGoodSenders() throws Exception {
53
54 final TeeSender teeSender = new TeeSender(m_sender1, m_sender2);
55
56 final Message m1 = new SimpleMessage();
57 final Message m2 = new SimpleMessage();
58
59 teeSender.send(m1);
60 teeSender.send(m2);
61 teeSender.handle(m2);
62 teeSender.shutdown();
63
64 verify(m_sender1).send(m1);
65 verify(m_sender1, times(2)).send(m2);
66 verify(m_sender1).shutdown();
67
68 verify(m_sender2).send(m1);
69 verify(m_sender2, times(2)).send(m2);
70 verify(m_sender2).shutdown();
71
72 verifyNoMoreInteractions(m_sender1, m_sender2);
73 }
74
75 @Test public void testWithABadSender() throws Exception {
76
77 final CommunicationException exceptionToThrowFromSend =
78 new CommunicationException("Foo");
79
80 final RuntimeException exceptionToThrowFromShutdown =
81 new RuntimeException();
82
83 doThrow(exceptionToThrowFromSend).when(m_sender2).send(isA(Message.class));
84 doThrow(exceptionToThrowFromShutdown).when(m_sender2).shutdown();
85
86
87 final TeeSender teeSender1 = new TeeSender(m_sender1, m_sender2);
88
89 final Message m = new SimpleMessage();
90
91 try {
92 teeSender1.send(m);
93 fail("Expected CommunicationException");
94 }
95 catch (CommunicationException e) {
96 assertSame(exceptionToThrowFromSend, e);
97 }
98
99 verify(m_sender1).send(m);
100
101 try {
102 teeSender1.shutdown();
103 fail("Expected RuntimeException");
104 }
105 catch (RuntimeException e) {
106 assertSame(exceptionToThrowFromShutdown, e);
107 }
108
109 verify(m_sender1).shutdown();
110
111
112 final TeeSender teeSender2 = new TeeSender(m_sender2, m_sender1);
113
114 try {
115 teeSender2.send(m);
116 fail("Expected CommunicationException");
117 }
118 catch (CommunicationException e) {
119 assertSame(exceptionToThrowFromSend, e);
120 }
121
122 try {
123 teeSender2.shutdown();
124 fail("Expected RuntimeException");
125 }
126 catch (RuntimeException e) {
127 assertSame(exceptionToThrowFromShutdown, e);
128 }
129
130 verifyNoMoreInteractions(m_sender1);
131 }
132 }