View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
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       * Tests that client ID is set on the connection if it is originally null.
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       * Tests that client ID is set on the connection if it has a different client ID.
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       * Tests that client ID is not set on the connection if it has the same client
86       * ID.
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 }