View Javadoc

1   /*
2    * $Id: JdbcBridgeFunctionalTestCase.java 19191 2010-08-25 21:05:23Z tcarlson $
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.jdbc.functional;
12  
13  import java.sql.Connection;
14  import java.util.List;
15  
16  import org.apache.commons.dbutils.QueryRunner;
17  import org.apache.commons.dbutils.handlers.ArrayListHandler;
18  
19  public class JdbcBridgeFunctionalTestCase extends AbstractJdbcFunctionalTestCase
20  {
21      private static final int TEST_ROWS = 10;
22      
23      public JdbcBridgeFunctionalTestCase()
24      {
25          super();
26          this.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      public void testBridgeSuccess() throws Exception
50      {
51          List<?> results = execSqlQuery("SELECT * FROM TEST");
52          assertEquals(0, results.size());
53          doTestBridge();
54      }
55          
56      protected void doTestBridge() throws Exception
57      {
58          QueryRunner queryRunner = jdbcConnector.getQueryRunner();
59          Connection connection = jdbcConnector.getConnection();
60  
61          for (int i = 0; i < TEST_ROWS; i++)
62          {
63              queryRunner.update(connection, "INSERT INTO TEST(TYPE, DATA) VALUES (1, 'Test " + i + "')");
64          }
65          List<?> results = (List<?>) queryRunner.query(connection, "SELECT * FROM TEST WHERE TYPE = 1", new ArrayListHandler());
66          assertEquals(TEST_ROWS, results.size());
67  
68          long t0 = System.currentTimeMillis();
69          while (true)
70          {
71              results = (List<?>) queryRunner.query(connection, "SELECT * FROM TEST_OUT", new ArrayListHandler());
72              logger.info("Results found: " + results.size());
73              if (results.size() >= TEST_ROWS)
74              {
75                  break;
76              }
77              results = (List<?>) queryRunner.query(connection, "SELECT * FROM TEST WHERE TYPE = 2", new ArrayListHandler());
78              logger.info("Locked records found: " + results.size());
79              assertTrue(TEST_ROWS >= results.size());            
80              
81              results = (List<?>) queryRunner.query(connection, "SELECT * FROM TEST WHERE TYPE = 1", new ArrayListHandler());
82              logger.info("Original records found: " + results.size());
83              assertTrue(TEST_ROWS >= results.size());
84              
85              assertTrue(System.currentTimeMillis() - t0 < 20000);
86              Thread.sleep(500);
87          }
88      }
89  }