1
2
3
4
5
6
7 package org.mule.transport.jdbc.functional;
8
9 import org.mule.DefaultMuleMessage;
10 import org.mule.api.MuleMessage;
11 import org.mule.module.client.MuleClient;
12
13 import java.util.HashMap;
14 import java.util.Map;
15
16 import org.apache.commons.dbutils.QueryRunner;
17 import org.apache.commons.dbutils.handlers.ArrayHandler;
18 import org.junit.Test;
19
20 import static org.junit.Assert.assertEquals;
21 import static org.junit.Assert.assertNotNull;
22
23 public class JdbcFunctionalTestCase extends AbstractJdbcFunctionalTestCase
24 {
25 public static final String DEFAULT_MESSAGE = "Test Message";
26
27 public JdbcFunctionalTestCase()
28 {
29 setPopulateTestData(false);
30 }
31
32 @Override
33 protected String getConfigResources()
34 {
35 return super.getConfigResources() + ",jdbc-functional-config.xml";
36 }
37
38 @Test
39 public void testDirectSql() throws Exception
40 {
41 MuleClient client = new MuleClient(muleContext);
42 MuleMessage message = client.request("jdbc://SELECT * FROM TEST", 1000);
43 assertResultSetEmpty(message);
44
45 QueryRunner qr = jdbcConnector.getQueryRunner();
46 int updated = qr.update(jdbcConnector.getConnection(), "INSERT INTO TEST(TYPE, DATA) VALUES (1, '" + DEFAULT_MESSAGE + "')");
47 assertEquals(1, updated);
48 message = client.request("jdbc://SELECT * FROM TEST", 1000);
49 assertResultSetNotEmpty(message);
50 }
51
52 @Test
53 public void testSend() throws Exception
54 {
55 MuleClient client = new MuleClient(muleContext);
56 client.send("jdbc://writeTest?type=2", new DefaultMuleMessage(DEFAULT_MESSAGE, muleContext));
57
58 QueryRunner qr = jdbcConnector.getQueryRunner();
59 Object[] obj2 =
60 (Object[]) qr.query(jdbcConnector.getConnection(), "SELECT DATA FROM TEST WHERE TYPE = 2", new ArrayHandler());
61 assertNotNull(obj2);
62 assertEquals(1, obj2.length);
63 assertEquals(DEFAULT_MESSAGE, obj2[0]);
64 }
65
66 @Test
67 public void testSendMap() throws Exception
68 {
69 MuleClient client = new MuleClient(muleContext);
70 Map map = new HashMap();
71 map.put("data", DEFAULT_MESSAGE);
72 client.send("jdbc://writeMap?type=2", new DefaultMuleMessage(map, muleContext));
73
74 QueryRunner qr = jdbcConnector.getQueryRunner();
75 Object[] obj2 =
76 (Object[]) qr.query(jdbcConnector.getConnection(), "SELECT DATA FROM TEST WHERE TYPE = 2", new ArrayHandler());
77 assertNotNull(obj2);
78 assertEquals(1, obj2.length);
79 assertEquals(DEFAULT_MESSAGE, obj2[0]);
80 }
81
82 @Test
83 public void testReceive() throws Exception
84 {
85 MuleClient client = new MuleClient(muleContext);
86 MuleMessage message = client.request("jdbc://getTest?type=1", 1000);
87 assertResultSetEmpty(message);
88
89 QueryRunner qr = jdbcConnector.getQueryRunner();
90 int updated = qr.update(jdbcConnector.getConnection(), "INSERT INTO TEST(TYPE, DATA, ACK, RESULT) VALUES (1, '" + DEFAULT_MESSAGE
91 + "', NULL, NULL)");
92 assertEquals(1, updated);
93
94 message = client.request("jdbc://getTest?type=1", 1000);
95 assertResultSetNotEmpty(message);
96 }
97
98 @Test
99 public void testReceiveAndSend() throws Exception
100 {
101 QueryRunner qr = jdbcConnector.getQueryRunner();
102 qr.update(jdbcConnector.getConnection(),
103 "INSERT INTO TEST(TYPE, DATA, ACK, RESULT) VALUES (1, '" + DEFAULT_MESSAGE + "', NULL, NULL)");
104
105 long t0 = System.currentTimeMillis();
106 while (System.currentTimeMillis() - t0 < 20000)
107 {
108 Object[] rs =
109 (Object[]) qr.query(jdbcConnector.getConnection(), "SELECT COUNT(*) FROM TEST WHERE TYPE = 2", new ArrayHandler());
110 assertNotNull(rs);
111 assertEquals(1, rs.length);
112 if (((Number)rs[0]).intValue() > 0)
113 {
114 break;
115 }
116 Thread.sleep(100);
117 }
118
119 Object[] obj2 =
120 (Object[]) qr.query(jdbcConnector.getConnection(), "SELECT DATA FROM TEST WHERE TYPE = 2", new ArrayHandler());
121 assertNotNull(obj2);
122 assertEquals(1, obj2.length);
123 assertEquals(DEFAULT_MESSAGE + " Received", obj2[0]);
124 }
125 }