View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
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  }