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