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.jdbc.config;
8   
9   import org.mule.api.endpoint.ImmutableEndpoint;
10  import org.mule.tck.junit4.FunctionalTestCase;
11  import org.mule.transaction.MuleTransactionConfig;
12  import org.mule.transaction.XaTransactionFactory;
13  import org.mule.transport.jdbc.ExtendedQueryRunner;
14  import org.mule.transport.jdbc.JdbcConnector;
15  import org.mule.transport.jdbc.JdbcTransactionFactory;
16  import org.mule.transport.jdbc.sqlstrategy.DefaultSqlStatementStrategyFactory;
17  import org.mule.transport.jdbc.test.TestDataSource;
18  
19  import org.apache.commons.dbutils.QueryRunner;
20  import org.junit.Test;
21  
22  import static org.junit.Assert.assertEquals;
23  import static org.junit.Assert.assertNotNull;
24  import static org.junit.Assert.assertNull;
25  import static org.junit.Assert.assertTrue;
26  
27  public class JdbcNamespaceHandlerTestCase extends FunctionalTestCase
28  {
29  
30      @Override
31      protected String getConfigResources()
32      {
33          return "jdbc-namespace-config.xml";
34      }
35  
36      @Test
37      public void testWithDataSource() throws Exception
38      {
39          JdbcConnector c = (JdbcConnector) muleContext.getRegistry().lookupConnector("jdbcConnector1");
40          assertNotNull(c);
41  
42          assertTrue(c.getDataSource() instanceof TestDataSource);
43          assertNull(c.getQueries());
44          assertEquals(-1, c.getQueryTimeout());
45      }
46  
47      @Test
48      public void testWithDataSourceViaJndi() throws Exception
49      {
50          JdbcConnector c = (JdbcConnector) muleContext.getRegistry().lookupConnector("jdbcConnector2");
51          assertNotNull(c);
52  
53          assertTrue(c.getDataSource() instanceof TestDataSource);
54          assertNull(c.getQueries());
55          assertTrue(c.isConnected());
56          assertTrue(c.isStarted());
57          assertEquals(3, c.getQueryTimeout());
58      }
59  
60      @Test
61      public void testFullyConfigured() throws Exception
62      {
63          JdbcConnector c = (JdbcConnector) muleContext.getRegistry().lookupConnector("jdbcConnector3");
64          assertNotNull(c);
65  
66          assertTrue(c.getDataSource() instanceof TestDataSource);
67  
68          assertNotNull(c.getQueries());
69          assertEquals(3, c.getQueries().size());
70  
71          assertTrue(c.isConnected());
72          assertTrue(c.isStarted());
73          // Test a abstract connector property (MULE-5776)
74          assertTrue(c.isValidateConnections());
75      }
76  
77      @Test
78      public void testEndpointQueryOverride() throws Exception
79      {
80          JdbcConnector c = (JdbcConnector) muleContext.getRegistry().lookupConnector("jdbcConnector3");
81          ImmutableEndpoint testJdbcEndpoint = muleContext.getEndpointFactory()
82              .getInboundEndpoint("testJdbcEndpoint");
83  
84          //On connector, not overridden
85          assertNotNull(c.getQuery(testJdbcEndpoint, "getTest"));
86  
87          //On connector, overridden on endpoint
88          assertNotNull(c.getQuery(testJdbcEndpoint, "getTest2"));
89          assertEquals("OVERRIDDEN VALUE", c.getQuery(testJdbcEndpoint, "getTest2"));
90  
91          //Only on endpoint
92          assertNotNull(c.getQuery(testJdbcEndpoint, "getTest3"));
93  
94          //Does not exist on either
95          assertNull(c.getQuery(testJdbcEndpoint, "getTest4"));
96          assertEquals("3", testJdbcEndpoint.getProperty("queryTimeout"));
97  
98          QueryRunner queryRunner = c.getQueryRunnerFor(testJdbcEndpoint);
99          assertEquals(ExtendedQueryRunner.class, queryRunner.getClass());
100         assertEquals(3, ((ExtendedQueryRunner) queryRunner).getQueryTimeout());
101     }
102 
103     @Test
104     public void testEndpointWithTransaction() throws Exception
105     {
106         ImmutableEndpoint endpoint = muleContext.getRegistry().
107             lookupEndpointBuilder("endpointWithTransaction").buildInboundEndpoint();
108         assertNotNull(endpoint);
109         assertEquals(JdbcTransactionFactory.class,
110             endpoint.getTransactionConfig().getFactory().getClass());
111         assertEquals(MuleTransactionConfig.ACTION_NONE,
112             endpoint.getTransactionConfig().getAction());
113         assertEquals("-1", endpoint.getProperty("queryTimeout"));
114     }
115 
116     @Test
117     public void testEndpointWithXaTransaction() throws Exception
118     {
119         ImmutableEndpoint endpoint = muleContext.getRegistry().
120             lookupEndpointBuilder("endpointWithXaTransaction").buildInboundEndpoint();
121         assertNotNull(endpoint);
122         assertEquals(XaTransactionFactory.class,
123             endpoint.getTransactionConfig().getFactory().getClass());
124         assertEquals(MuleTransactionConfig.ACTION_ALWAYS_BEGIN,
125             endpoint.getTransactionConfig().getAction());
126     }
127 
128     @Test
129     public void testSqlStatementStrategyFactoryOverride() throws Exception
130     {
131         // class config
132         JdbcConnector c = (JdbcConnector) muleContext.getRegistry().lookupConnector("jdbcConnector4");
133         assertNotNull(c.getSqlStatementStrategyFactory());
134         assertTrue(c.getSqlStatementStrategyFactory() instanceof TestSqlStatementStrategyFactory);
135 
136         // ref config
137         c = (JdbcConnector) muleContext.getRegistry().lookupConnector("jdbcConnector5");
138         assertNotNull(c.getSqlStatementStrategyFactory());
139         assertTrue(c.getSqlStatementStrategyFactory() instanceof TestSqlStatementStrategyFactory);
140     }
141 
142     public static class TestSqlStatementStrategyFactory extends DefaultSqlStatementStrategyFactory
143     {
144         // no custom methods
145     }
146 }