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.api.client.MuleClient;
12 import org.mule.api.transport.PropertyScope;
13 import org.mule.tck.junit4.FunctionalTestCase;
14 import org.mule.util.DateUtils;
15
16 import java.util.Calendar;
17
18 import org.apache.commons.dbutils.QueryRunner;
19 import org.junit.Test;
20
21 import static org.junit.Assert.assertNotNull;
22
23 public class IdempotencyTestCase extends AbstractJdbcFunctionalTestCase
24 {
25
26 @Test
27 public void testIdempotencySequential() throws Exception
28 {
29 MuleClient client = muleContext.getClient();
30
31 int id = Integer.valueOf(DateUtils.formatTimeStamp(Calendar.getInstance().getTime(), "hhmmss"));
32 String valueExpression = DateUtils.formatTimeStamp(Calendar.getInstance().getTime(), "ssmmhh");
33
34 MuleMessage message = new DefaultMuleMessage("hi", muleContext);
35 message.setProperty("originalId", id, PropertyScope.OUTBOUND);
36 message.setProperty("valueId", valueExpression, PropertyScope.OUTBOUND);
37 client.dispatch("vm://in", message);
38
39 MuleMessage requestMessage = client.request("vm://forProcessing", FunctionalTestCase.RECEIVE_TIMEOUT);
40 assertNotNull(requestMessage);
41
42 message = new DefaultMuleMessage("hi", muleContext);
43 message.setProperty("originalId", id, PropertyScope.OUTBOUND);
44 message.setProperty("valueId", valueExpression, PropertyScope.OUTBOUND);
45 client.send("vm://in", message);
46
47 requestMessage = client.request("vm://duplicated", FunctionalTestCase.RECEIVE_TIMEOUT);
48 assertNotNull(requestMessage);
49 }
50
51 @Override
52 protected String getConfigResources()
53 {
54 return super.getConfigResources() + ",jdbc-store.xml";
55 }
56
57 @Override
58 protected void createTable() throws Exception
59 {
60 super.createTable();
61 QueryRunner qr = jdbcConnector.getQueryRunner();
62 qr.update(jdbcConnector.getConnection(), "CREATE TABLE IDS(K VARCHAR(255) NOT NULL PRIMARY KEY, VALUE VARCHAR(255))");
63 }
64
65 @Override
66 protected void deleteTable() throws Exception
67 {
68 super.deleteTable();
69 QueryRunner qr = jdbcConnector.getQueryRunner();
70 qr.update(jdbcConnector.getConnection(), "DELETE FROM IDS");
71 }
72 }