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