View Javadoc

1   /*
2    * $Id: JmsConnectorTestCase.java 22763 2011-08-26 22:30:12Z svacas $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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       * Tests that client ID is set on the connection if it is originally null.
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       * Tests that client ID is set on the connection if it has a different client ID.
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       * Tests that client ID is not set on the connection if it has the same client
88       * ID.
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 }