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