1
2
3
4
5
6
7 package org.mule.transport.jms;
8
9 import static org.junit.Assert.assertEquals;
10 import static org.mockito.Mockito.doReturn;
11 import static org.mockito.Mockito.doThrow;
12 import static org.mockito.Mockito.mock;
13 import static org.mockito.Mockito.never;
14 import static org.mockito.Mockito.spy;
15 import static org.mockito.Mockito.times;
16 import static org.mockito.Mockito.verify;
17 import static org.mockito.Mockito.when;
18
19 import org.mule.api.transaction.Transaction;
20 import org.mule.tck.junit4.AbstractMuleContextTestCase;
21 import org.mule.transaction.TransactionCoordination;
22
23 import java.lang.reflect.UndeclaredThrowableException;
24
25 import javax.jms.Connection;
26 import javax.jms.ConnectionFactory;
27 import javax.jms.JMSException;
28 import javax.jms.Session;
29
30 import org.junit.Test;
31 import org.mockito.Matchers;
32
33 public class JmsConnectorTestCase extends AbstractMuleContextTestCase
34 {
35 private static final String CLIENT_ID1 = "client1";
36 private static final String CLIENT_ID2 = "client2";
37
38
39
40
41 @Test
42 public void testSetClientIDInConnectorForFirstTime() throws Exception
43 {
44 final Connection connection = mock(Connection.class);
45 when(connection.getClientID()).thenReturn(null);
46
47 JmsSupport jmsSupport = mock(JmsSupport.class);
48 when(jmsSupport.createConnection(Matchers.<ConnectionFactory> any())).thenReturn(connection);
49
50 JmsConnector connector = new JmsConnector(muleContext);
51 connector.setClientId(CLIENT_ID1);
52 connector.setJmsSupport(jmsSupport);
53
54 Connection createdConnection = connector.createConnection();
55
56 assertEquals(connection, createdConnection);
57 verify(connection, times(1)).setClientID(Matchers.anyString());
58 verify(connection, times(1)).setClientID(CLIENT_ID1);
59 }
60
61
62
63
64 @Test
65 public void testSetClientIDInConnectorForSecondTime() throws Exception
66 {
67 final Connection connection = mock(Connection.class);
68 when(connection.getClientID()).thenReturn(CLIENT_ID1);
69
70 JmsSupport jmsSupport = mock(JmsSupport.class);
71 when(jmsSupport.createConnection(Matchers.<ConnectionFactory> any())).thenReturn(connection);
72
73 JmsConnector connector = new JmsConnector(muleContext);
74 connector.setClientId(CLIENT_ID2);
75 connector.setJmsSupport(jmsSupport);
76
77 Connection createdConnection = connector.createConnection();
78
79 assertEquals(connection, createdConnection);
80 verify(connection, times(1)).setClientID(Matchers.anyString());
81 verify(connection, times(1)).setClientID(CLIENT_ID2);
82 }
83
84
85
86
87
88 @Test
89 public void testSetClientIDInConnectionForFirstTime() throws Exception
90 {
91 final Connection connection = mock(Connection.class);
92 when(connection.getClientID()).thenReturn(CLIENT_ID1);
93
94 JmsSupport jmsSupport = mock(JmsSupport.class);
95 when(jmsSupport.createConnection(Matchers.<ConnectionFactory> any())).thenReturn(connection);
96
97 JmsConnector connector = new JmsConnector(muleContext);
98 connector.setClientId(CLIENT_ID1);
99 connector.setJmsSupport(jmsSupport);
100
101 Connection createdConnection = connector.createConnection();
102
103 assertEquals(connection, createdConnection);
104 verify(connection, times(0)).setClientID(Matchers.anyString());
105 }
106
107 @Test
108 public void testClosesSessionIfThereIsNoActiveTransaction() throws Exception
109 {
110 JmsConnector connector = new JmsConnector(muleContext);
111
112 Session session = mock(Session.class);
113 connector.closeSessionIfNoTransactionActive(session);
114 verify(session, times(1)).close();
115 }
116
117 @Test
118 public void testDoNotClosesSessionIfThereIsAnActiveTransaction() throws Exception
119 {
120 Transaction transaction = mock(Transaction.class);
121 TransactionCoordination.getInstance().bindTransaction(transaction);
122
123 try
124 {
125 JmsConnector connector = new JmsConnector(muleContext);
126
127 Session session = mock(Session.class);
128 connector.closeSessionIfNoTransactionActive(session);
129 verify(session, never()).close();
130 }
131 finally
132 {
133 TransactionCoordination.getInstance().unbindTransaction(transaction);
134 }
135 }
136
137 @Test
138 public void ignoreJmsExceptionOnStop() throws Exception
139 {
140 Connection connection = mock(Connection.class);
141 doThrow(new JMSException("connection unavailable")).when(connection).stop();
142 JmsConnector connector = new JmsConnector(muleContext);
143 JmsConnector spy = spy(connector);
144 doReturn(connection).when(spy).createConnection();
145 spy.doConnect();
146 spy.doStop();
147 verify(connection, times(1)).stop();
148 }
149
150 @Test
151 public void ignoreAmqExceptionOnStop() throws Exception
152 {
153 Connection connection = mock(Connection.class);
154 doThrow(new UndeclaredThrowableException(new Exception("connection unavailable"))).when(connection).stop();
155 JmsConnector connector = new JmsConnector(muleContext);
156 JmsConnector spy = spy(connector);
157 doReturn(connection).when(spy).createConnection();
158 spy.doConnect();
159 spy.doStop();
160 verify(connection, times(1)).stop();
161 }
162
163 }