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.functional;
8   
9   import java.sql.Connection;
10  import java.util.List;
11  
12  import org.apache.commons.dbutils.QueryRunner;
13  import org.apache.commons.dbutils.handlers.ArrayListHandler;
14  import org.junit.Test;
15  
16  import static org.junit.Assert.assertEquals;
17  import static org.junit.Assert.assertTrue;
18  
19  public class JdbcBridgeFunctionalTestCase extends AbstractJdbcFunctionalTestCase
20  {
21  
22      private static final int TEST_ROWS = 10;
23      
24      public JdbcBridgeFunctionalTestCase()
25      {
26          setPopulateTestData(false);
27      }
28  
29      @Override
30      protected String getConfigResources()
31      {
32          return "jdbc-bridge.xml";
33      }
34      
35      @Override
36      protected void createTable() throws Exception
37      {
38          execSqlUpdate("CREATE TABLE TEST(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,TYPE INTEGER,DATA VARCHAR(255))");
39          execSqlUpdate("CREATE TABLE TEST_OUT(ID INTEGER NOT NULL PRIMARY KEY,TYPE INTEGER,DATA VARCHAR(255))");
40      }
41  
42      @Override
43      protected void deleteTable() throws Exception
44      {
45          execSqlUpdate("DELETE FROM TEST");
46          execSqlUpdate("DELETE FROM TEST_OUT");
47      }
48  
49      @Test
50      public void testBridgeSuccess() throws Exception
51      {
52          List<?> results = execSqlQuery("SELECT * FROM TEST");
53          assertEquals(0, results.size());
54          doTestBridge();
55      }
56          
57      protected void doTestBridge() throws Exception
58      {
59          QueryRunner queryRunner = jdbcConnector.getQueryRunner();
60          Connection connection = jdbcConnector.getConnection();
61  
62          for (int i = 0; i < TEST_ROWS; i++)
63          {
64              queryRunner.update(connection, "INSERT INTO TEST(TYPE, DATA) VALUES (1, 'Test " + i + "')");
65          }
66          List<?> results = (List<?>) queryRunner.query(connection, "SELECT * FROM TEST WHERE TYPE = 1", new ArrayListHandler());
67          assertEquals(TEST_ROWS, results.size());
68  
69          long t0 = System.currentTimeMillis();
70          while (true)
71          {
72              results = (List<?>) queryRunner.query(connection, "SELECT * FROM TEST_OUT", new ArrayListHandler());
73              logger.info("Results found: " + results.size());
74              if (results.size() >= TEST_ROWS)
75              {
76                  break;
77              }
78              results = (List<?>) queryRunner.query(connection, "SELECT * FROM TEST WHERE TYPE = 2", new ArrayListHandler());
79              logger.info("Locked records found: " + results.size());
80              assertTrue(TEST_ROWS >= results.size());            
81              
82              results = (List<?>) queryRunner.query(connection, "SELECT * FROM TEST WHERE TYPE = 1", new ArrayListHandler());
83              logger.info("Original records found: " + results.size());
84              assertTrue(TEST_ROWS >= results.size());
85              
86              assertTrue(System.currentTimeMillis() - t0 < 20000);
87              Thread.sleep(500);
88          }
89      }
90  }