1
2
3
4
5
6
7
8
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 }