diff --git a/restcomm/restcomm.application/src/main/webapp/WEB-INF/scripts/mariadb/sql/sms-messages.xml b/restcomm/restcomm.application/src/main/webapp/WEB-INF/scripts/mariadb/sql/sms-messages.xml
index 1f3e89dcd6..478217ef57 100644
--- a/restcomm/restcomm.application/src/main/webapp/WEB-INF/scripts/mariadb/sql/sms-messages.xml
+++ b/restcomm/restcomm.application/src/main/webapp/WEB-INF/scripts/mariadb/sql/sms-messages.xml
@@ -126,10 +126,8 @@
LIMIT #{limit} OFFSET #{offset}
-
-
+
+
SELECT * FROM "restcomm_sms_messages" AS "restcomm_sms_messages"
WHERE "smpp_message_id" = #{smppMessageId}
- AND "date_created" >= #{startDate}
- ORDER BY "date_created" DESC
diff --git a/restcomm/restcomm.dao/src/main/java/org/restcomm/connect/dao/SmsMessagesDao.java b/restcomm/restcomm.dao/src/main/java/org/restcomm/connect/dao/SmsMessagesDao.java
index 0d0021d2b1..0fe75ca8c2 100644
--- a/restcomm/restcomm.dao/src/main/java/org/restcomm/connect/dao/SmsMessagesDao.java
+++ b/restcomm/restcomm.dao/src/main/java/org/restcomm/connect/dao/SmsMessagesDao.java
@@ -55,5 +55,5 @@ public interface SmsMessagesDao {
Integer getTotalSmsMessage(SmsMessageFilter filter);
List getSmsMessages(SmsMessageFilter filter);
- List findBySmppMessageIdAndDateCreatedGreaterOrEqualThanOrderedByDateCreatedDesc(String smppMessageId, DateTime startDate);
+ List findBySmppMessageId(String smppMessageId);
}
diff --git a/restcomm/restcomm.dao/src/main/java/org/restcomm/connect/dao/mybatis/MybatisSmsMessagesDao.java b/restcomm/restcomm.dao/src/main/java/org/restcomm/connect/dao/mybatis/MybatisSmsMessagesDao.java
index 03c669ba8c..2ffe43f25b 100644
--- a/restcomm/restcomm.dao/src/main/java/org/restcomm/connect/dao/mybatis/MybatisSmsMessagesDao.java
+++ b/restcomm/restcomm.dao/src/main/java/org/restcomm/connect/dao/mybatis/MybatisSmsMessagesDao.java
@@ -22,8 +22,6 @@
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.joda.time.DateTime;
-import org.joda.time.format.DateTimeFormat;
-import org.joda.time.format.DateTimeFormatter;
import org.restcomm.connect.commons.annotations.concurrency.ThreadSafe;
import org.restcomm.connect.commons.dao.Sid;
import org.restcomm.connect.dao.SmsMessagesDao;
@@ -198,19 +196,16 @@ public int getSmsMessagesPerAccountLastPerMinute(String accountSid) throws Parse
}
@Override
- public List findBySmppMessageIdAndDateCreatedGreaterOrEqualThanOrderedByDateCreatedDesc(String smppMessageId, DateTime startDate) {
- final DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
+ public List findBySmppMessageId(String smppMessageId) {
final Map parameters = new HashMap<>(2);
parameters.put("smppMessageId", smppMessageId);
- parameters.put("startDate", formatter.print(startDate.withTime(0, 0, 0, 0)));
-
final SqlSession session = this.sessions.openSession();
try {
- final List
-
+
SELECT * FROM "restcomm_sms_messages" AS "restcomm_sms_messages"
WHERE "smpp_message_id" = #{smppMessageId}
- AND "date_created" >= #{startDate}
- ORDER BY "date_created" DESC
diff --git a/restcomm/restcomm.dao/src/test/java/org/restcomm/connect/dao/mybatis/SmsMessagesDaoTest.java b/restcomm/restcomm.dao/src/test/java/org/restcomm/connect/dao/mybatis/SmsMessagesDaoTest.java
index 780eb15a84..97f4ab74e9 100644
--- a/restcomm/restcomm.dao/src/test/java/org/restcomm/connect/dao/mybatis/SmsMessagesDaoTest.java
+++ b/restcomm/restcomm.dao/src/test/java/org/restcomm/connect/dao/mybatis/SmsMessagesDaoTest.java
@@ -116,9 +116,9 @@ public void createReadUpdateDelete() {
// Validate that the CDR was removed.
assertTrue(messages.getSmsMessage(sid) == null);
}
-
+
private SmsMessage createSms() {
- return createSms(Sid.generate(Sid.Type.ACCOUNT), SmsMessage.Direction.OUTBOUND_API, 0, DateTime.now());
+ return createSms(Sid.generate(Sid.Type.ACCOUNT), SmsMessage.Direction.OUTBOUND_API, 0, DateTime.now());
}
private SmsMessage createSms(Sid account, SmsMessage.Direction direction, int index, DateTime date) {
@@ -134,7 +134,7 @@ private SmsMessage createSms(Sid account, SmsMessage.Direction direction, int in
.setApiVersion("2012-04-24")
.setRecipient("+12223334444")
.setSender("+17778889999")
- .setBody("Hello World - "+index)
+ .setBody("Hello World - " + index)
.setStatus(SmsMessage.Status.SENDING)
.setDirection(direction)
.setPrice(new BigDecimal("0.00"))
@@ -154,22 +154,22 @@ public void testGetSmsMessagesLastMinute() throws InterruptedException, ParseExc
SmsMessage message = createSms(account, SmsMessage.Direction.OUTBOUND_API, i, oneMinuteAgo);
// Create a new sms message in the data store.
messages.addSmsMessage(message);
- logger.info("Created message: "+message);
+ logger.info("Created message: " + message);
}
for (int i = 0; i < 2; i++) {
SmsMessage message = createSms(account, SmsMessage.Direction.OUTBOUND_CALL, i, oneMinuteAgo);
// Create a new sms message in the data store.
messages.addSmsMessage(message);
- logger.info("Created message: "+message);
+ logger.info("Created message: " + message);
}
for (int i = 0; i < 2; i++) {
SmsMessage message = createSms(account, SmsMessage.Direction.OUTBOUND_REPLY, i, oneMinuteAgo);
// Create a new sms message in the data store.
messages.addSmsMessage(message);
- logger.info("Created message: "+message);
+ logger.info("Created message: " + message);
}
int lastMessages = messages.getSmsMessagesPerAccountLastPerMinute(account.toString());
- logger.info("SMS Messages last minutes: "+lastMessages);
+ logger.info("SMS Messages last minutes: " + lastMessages);
assertEquals(6, lastMessages);
Thread.sleep(5000);
DateTime oneMinuteLater = DateTime.now();
@@ -177,10 +177,10 @@ public void testGetSmsMessagesLastMinute() throws InterruptedException, ParseExc
SmsMessage message = createSms(account, SmsMessage.Direction.OUTBOUND_CALL, i, oneMinuteLater);
// Create a new sms message in the data store.
messages.addSmsMessage(message);
- logger.info("Created message: "+message);
+ logger.info("Created message: " + message);
}
lastMessages = messages.getSmsMessagesPerAccountLastPerMinute(account.toString());
- logger.info("SMS Messages last minutes: "+lastMessages);
+ logger.info("SMS Messages last minutes: " + lastMessages);
assertEquals(3, lastMessages);
messages.removeSmsMessages(account);
}
@@ -217,20 +217,20 @@ public void testReadDeleteByAccount() {
}
@Test
- public void testUpdateSmsMessageDateSentAndStatusAndGetBySmppMsgId(){
- final DateTime dateSent = DateTime.now();
- final SmsMessage.Status status = SmsMessage.Status.SENT;
- final String smppMessageId = "0000058049";
+ public void testUpdateSmsMessageDateSentAndStatusAndGetBySmppMsgId() {
+ final DateTime dateSent = DateTime.now();
+ final SmsMessage.Status status = SmsMessage.Status.SENT;
+ final String smppMessageId = "0000058049";
- // add a new msg
- SmsMessage smsMessage = createSms();
- final SmsMessagesDao messages = manager.getSmsMessagesDao();
+ // add a new msg
+ SmsMessage smsMessage = createSms();
+ final SmsMessagesDao messages = manager.getSmsMessagesDao();
messages.addSmsMessage(smsMessage);
//set status and dateSent
- smsMessage = smsMessage.setStatus(status).setDateSent(dateSent).setSmppMessageId(smppMessageId);
- messages.updateSmsMessage(smsMessage);
-
+ smsMessage = smsMessage.setStatus(status).setDateSent(dateSent).setSmppMessageId(smppMessageId);
+ messages.updateSmsMessage(smsMessage);
+
//get SmsMessage By SmppMessageId
SmsMessage resultantSmsMessage = messages.getSmsMessageBySmppMessageId(smppMessageId);
@@ -271,13 +271,14 @@ public void testFindBySmppMessageIdAndDateCreatedGreaterOrEqualThanOrderedByDate
smsMessagesDao.addSmsMessage(smsMessage6);
smsMessagesDao.addSmsMessage(smsMessage7);
- final List messages = smsMessagesDao.findBySmppMessageIdAndDateCreatedGreaterOrEqualThanOrderedByDateCreatedDesc(smppMessageId, threeDaysAgo);
+ final List messages = smsMessagesDao.findBySmppMessageId(smppMessageId);
+ // then
try {
- assertEquals(3, messages.size());
- assertEquals(smsMessage6.getSid(), messages.get(0).getSid());
- assertEquals(smsMessage5.getSid(), messages.get(1).getSid());
- assertEquals(smsMessage3.getSid(), messages.get(2).getSid());
+ assertEquals(5, messages.size());
+ for (SmsMessage message: messages) {
+ assertEquals(smppMessageId, message.getSmppMessageId());
+ }
} finally {
smsMessagesDao.removeSmsMessages(accountSid);
}
diff --git a/restcomm/restcomm.sms/src/main/java/org/restcomm/connect/sms/smpp/SmppMessageHandler.java b/restcomm/restcomm.sms/src/main/java/org/restcomm/connect/sms/smpp/SmppMessageHandler.java
index b4846be004..8ee9054312 100644
--- a/restcomm/restcomm.sms/src/main/java/org/restcomm/connect/sms/smpp/SmppMessageHandler.java
+++ b/restcomm/restcomm.sms/src/main/java/org/restcomm/connect/sms/smpp/SmppMessageHandler.java
@@ -149,24 +149,15 @@ public void onReceive(Object message) throws Exception {
logger.debug("DLR Received for SMPP Message " + deliveryReceipt.getId() + " with status " + deliveryStatus);
}
- // Find all messages correlated with SMPP Message ID in last three days
- final List smsMessages = this.storage.getSmsMessagesDao().findBySmppMessageIdAndDateCreatedGreaterOrEqualThanOrderedByDateCreatedDesc(smppMessageId, DateTime.now().minusDays(3));
-
- // Update status of messages and remove correlation with SMPP Message ID
- // IMPORTANT: First message in the results list is considered the real target of the DLR
- // BS-232: Other "pending" messages that might share correlation with same SMPP Message ID will have their status forcefully updated to SENT
- final int smsCount = smsMessages.size();
- if (smsCount == 0) {
- logger.warning("responseMessageId=" + deliveryReceipt.getId() + " was never received! ");
- } else {
- for (int index = 0; index < smsCount; index++) {
- final SmsMessage.Status status = (index > 0) ? SmsMessage.Status.SENT : deliveryStatus;
- this.storage.getSmsMessagesDao().updateSmsMessage(smsMessages.get(index).setSmppMessageId(null).setStatus(status));
+ // Find message bound to the SMPP Message ID
+ // NOTE: We ensure there is only one message bound to any SmppMessageId at this point because uniqueness is enforced on submit_response event
+ final SmsMessage sms = this.storage.getSmsMessagesDao().getSmsMessageBySmppMessageId(smppMessageId);
- if (index > 0) {
- logger.warning("Correlation between SmsMessage " + smsMessages.get(index).getSid() + " and SMPP Message " + smppMessageId + " expired. Status forcefully set to " + status);
- }
- }
+ // Update status of message and remove correlation with SMPP Message ID
+ if (sms == null) {
+ logger.warning("responseMessageId=" + smppMessageId + " was never received!");
+ } else {
+ this.storage.getSmsMessagesDao().updateSmsMessage(sms.setSmppMessageId(null).setStatus(deliveryStatus));
}
} else if (message instanceof CreateSmsSession) {
IExtensionCreateSmsSessionRequest ier = (CreateSmsSession) message;
@@ -187,43 +178,41 @@ public void onReceive(Object message) throws Exception {
final ActorRef session = destroySmsSession.session();
context.stop(session);
} else if (message instanceof PduAsyncResponse) {
-
- PduAsyncResponse pduAsyncResponse = (PduAsyncResponse) message;
-
+ final PduAsyncResponse pduAsyncResponse = (PduAsyncResponse) message;
if (pduAsyncResponse instanceof DefaultPduAsyncResponse && pduAsyncResponse.getResponse() instanceof SubmitSmResp) {
- SubmitSmResp submitSmResp = (SubmitSmResp) pduAsyncResponse.getResponse();
+ final SubmitSmResp submitSmResp = (SubmitSmResp) pduAsyncResponse.getResponse();
if (logger.isInfoEnabled()) {
logger.info(" ********** SmppMessageHandler received SubmitSmResp: " + submitSmResp + "SubmitSmResp Status:" + submitSmResp.getCommandStatus());
}
- String smppMessageId = submitSmResp.getMessageId();
-
- Object ref = pduAsyncResponse.getRequest().getReferenceObject();
+ final String smppMessageId = submitSmResp.getMessageId();
+ final Object ref = pduAsyncResponse.getRequest().getReferenceObject();
if (ref != null && ref instanceof Sid) {
// BS-230: Ensure there is no other message sharing same SMPP Message ID
- SmsMessage existingMessage = this.storage.getSmsMessagesDao().getSmsMessageBySmppMessageId(smppMessageId);
- if (existingMessage != null) {
- // Cut correlation between SMS and SMPP Message ID and update message to a final state
- existingMessage = existingMessage.setSmppMessageId(null);
- logger.warning("Correlation between SmsMessage " + existingMessage.getSid() + " and SMPP Message " + smppMessageId + " expired.");
- this.storage.getSmsMessagesDao().updateSmsMessage(existingMessage);
+ final List smsMessages = this.storage.getSmsMessagesDao().findBySmppMessageId(smppMessageId);
+
+ // Delete correlation between messages and SMPP Message ID
+ for (SmsMessage smsMessage : smsMessages) {
+ this.storage.getSmsMessagesDao().updateSmsMessage(smsMessage.setSmppMessageId(null));
+ logger.warning("Correlation between SmsMessage " + smsMessage.getSid() + " and SMPP Message " + smppMessageId + " expired.");
}
- Sid sid = (Sid) ref;
- SmsMessage smsMessage = storage.getSmsMessagesDao().getSmsMessage(sid);
- if (submitSmResp.getCommandStatus() != 0) {
- logger.warning(String.format("SubmitSmResp Failure! Message could not be sent Status Code %s Result Messages: %s", submitSmResp.getCommandStatus(), submitSmResp.getResultMessage()));
- smsMessage = smsMessage.setSmppMessageId(smppMessageId).setStatus(SmsMessage.Status.FAILED);
- } else {
- //update smppMessageId as well as status to SENT and date sent
+ // Update status of target message
+ SmsMessage smsMessage = storage.getSmsMessagesDao().getSmsMessage((Sid) ref);
+ if (submitSmResp.getCommandStatus() == SmppConstants.STATUS_OK) {
+ // Successful reponse: update smppMessageId as well as status to SENT and date sent
smsMessage = smsMessage.setSmppMessageId(smppMessageId).setStatus(SmsMessage.Status.SENT).setDateSent(DateTime.now());
+ } else {
+ // Failure response: set status to FAILED and do not correlate to any smppMessageId
+ logger.warning(String.format("SubmitSmResp Failure! Message could not be sent Status Code %s Result Messages: %s", submitSmResp.getCommandStatus(), submitSmResp.getResultMessage()));
+ smsMessage = smsMessage.setSmppMessageId(null).setStatus(SmsMessage.Status.FAILED);
}
storage.getSmsMessagesDao().updateSmsMessage(smsMessage);
} else {
logger.warning("PduAsyncResponse reference is null or not Sid");
}
- } else {
+ } else if (logger.isInfoEnabled()) {
logger.info("PduAsyncResponse not SubmitSmResp " + pduAsyncResponse.getClass().toString());
}
}
diff --git a/restcomm/restcomm.sms/src/test/java/org/restcomm/connect/sms/smpp/SmppMessageHandlerTest.java b/restcomm/restcomm.sms/src/test/java/org/restcomm/connect/sms/smpp/SmppMessageHandlerTest.java
index e1ec6f76e3..a996425c44 100644
--- a/restcomm/restcomm.sms/src/test/java/org/restcomm/connect/sms/smpp/SmppMessageHandlerTest.java
+++ b/restcomm/restcomm.sms/src/test/java/org/restcomm/connect/sms/smpp/SmppMessageHandlerTest.java
@@ -30,7 +30,6 @@
import com.cloudhopper.smpp.pdu.PduRequest;
import com.cloudhopper.smpp.pdu.SubmitSmResp;
import org.apache.commons.configuration.Configuration;
-import org.joda.time.DateTime;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -50,9 +49,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.Date;
import java.util.List;
-import java.util.concurrent.TimeUnit;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@@ -141,11 +138,7 @@ public void testOnReceiveDlrPayload() throws ParseException {
dlrPayload.setStat(SmsMessage.Status.UNDELIVERED);
final SmsMessagesDao smsMessagesDao = mock(SmsMessagesDao.class);
- final SmsMessage smsMessage1 = SmsMessage.builder().setSid(Sid.generate(Sid.Type.SMS_MESSAGE)).setSmppMessageId(dlrPayload.getId()).setStatus(SmsMessage.Status.SENDING).build();
- final SmsMessage smsMessage2 = SmsMessage.builder().setSid(Sid.generate(Sid.Type.SMS_MESSAGE)).setSmppMessageId(dlrPayload.getId()).setStatus(SmsMessage.Status.SENDING).build();
- final SmsMessage smsMessage3 = SmsMessage.builder().setSid(Sid.generate(Sid.Type.SMS_MESSAGE)).setSmppMessageId(dlrPayload.getId()).setStatus(SmsMessage.Status.SENDING).build();
-
- final List messages = Arrays.asList(smsMessage1, smsMessage2, smsMessage3);
+ final SmsMessage message = SmsMessage.builder().setSid(Sid.generate(Sid.Type.SMS_MESSAGE)).setSmppMessageId(dlrPayload.getId()).setStatus(SmsMessage.Status.SENT).build();
when(servletContext.getAttribute(DaoManager.class.getName())).thenReturn(daoManager);
when(servletContext.getAttribute(Configuration.class.getName())).thenReturn(mock(Configuration.class));
@@ -154,7 +147,7 @@ public void testOnReceiveDlrPayload() throws ParseException {
when(servletContext.getAttribute(NumberSelectorService.class.getName())).thenReturn(mock(NumberSelectorService.class));
when(daoManager.getSmsMessagesDao()).thenReturn(smsMessagesDao);
- when(smsMessagesDao.findBySmppMessageIdAndDateCreatedGreaterOrEqualThanOrderedByDateCreatedDesc(eq(dlrPayload.getId()), any(DateTime.class))).thenReturn(messages);
+ when(smsMessagesDao.getSmsMessageBySmppMessageId(dlrPayload.getId())).thenReturn(message);
final ActorRef messageHandler = system.actorOf(Props.apply(new Creator() {
@Override
@@ -167,19 +160,12 @@ public Actor create() throws Exception {
messageHandler.tell(dlrPayload, getRef());
// then
- final ArgumentCaptor dateCaptor = ArgumentCaptor.forClass(DateTime.class);
- verify(smsMessagesDao, timeout(50)).findBySmppMessageIdAndDateCreatedGreaterOrEqualThanOrderedByDateCreatedDesc(eq(dlrPayload.getId()), dateCaptor.capture());
- assertEquals(3, TimeUnit.DAYS.convert(new Date().getTime() - dateCaptor.getValue().toDate().getTime(), TimeUnit.MILLISECONDS));
+ verify(smsMessagesDao, timeout(50)).getSmsMessageBySmppMessageId(dlrPayload.getId());
final ArgumentCaptor smsCaptor = ArgumentCaptor.forClass(SmsMessage.class);
- verify(smsMessagesDao, timeout(50).times(3)).updateSmsMessage(smsCaptor.capture());
- final List capturedSms = smsCaptor.getAllValues();
- assertNull(capturedSms.get(0).getSmppMessageId());
- assertEquals(dlrPayload.getStat(), capturedSms.get(0).getStatus());
- assertNull(capturedSms.get(1).getSmppMessageId());
- assertEquals(SmsMessage.Status.SENT, capturedSms.get(1).getStatus());
- assertNull(capturedSms.get(2).getSmppMessageId());
- assertEquals(SmsMessage.Status.SENT, capturedSms.get(2).getStatus());
+ verify(smsMessagesDao, timeout(50)).updateSmsMessage(smsCaptor.capture());
+ assertNull(smsCaptor.getValue().getSmppMessageId());
+ assertEquals(dlrPayload.getStat(), smsCaptor.getValue().getStatus());
}
};
}
@@ -202,10 +188,8 @@ public void testOnReceiveDlrPayloadForUnknownSms() throws ParseException {
when(servletContext.getAttribute(MonitoringService.class.getName())).thenReturn(mock(ActorRef.class));
when(servletContext.getAttribute(NumberSelectorService.class.getName())).thenReturn(mock(NumberSelectorService.class));
- final List messages = Collections.emptyList();
-
when(daoManager.getSmsMessagesDao()).thenReturn(smsMessagesDao);
- when(smsMessagesDao.findBySmppMessageIdAndDateCreatedGreaterOrEqualThanOrderedByDateCreatedDesc(eq(dlrPayload.getId()), any(DateTime.class))).thenReturn(messages);
+ when(smsMessagesDao.getSmsMessageBySmppMessageId(dlrPayload.getId())).thenReturn(null);
final ActorRef messageHandler = system.actorOf(Props.apply(new Creator() {
@Override
@@ -218,10 +202,7 @@ public Actor create() throws Exception {
messageHandler.tell(dlrPayload, getRef());
// then
- final ArgumentCaptor dateCaptor = ArgumentCaptor.forClass(DateTime.class);
- verify(smsMessagesDao, timeout(50)).findBySmppMessageIdAndDateCreatedGreaterOrEqualThanOrderedByDateCreatedDesc(eq(dlrPayload.getId()), dateCaptor.capture());
- assertEquals(3, TimeUnit.DAYS.convert(new Date().getTime() - dateCaptor.getValue().toDate().getTime(), TimeUnit.MILLISECONDS));
-
+ verify(smsMessagesDao, timeout(50)).getSmsMessageBySmppMessageId(dlrPayload.getId());
verify(smsMessagesDao, never()).updateSmsMessage(any(SmsMessage.class));
}
};
@@ -259,6 +240,13 @@ public void testOnReceivePduAsyncResponseWithExistingSmppMessageCorrelation() {
when(smsMessagesDao.getSmsMessageBySmppMessageId(smppMessageId)).thenReturn(existingSmsMessage);
when(smsMessagesDao.getSmsMessage(smsMessage.getSid())).thenReturn(smsMessage);
+ final SmsMessage smsMessageWithSmppMessageId1 = SmsMessage.builder().setSid(Sid.generate(Sid.Type.SMS_MESSAGE)).setSmppMessageId(smppMessageId).setStatus(SmsMessage.Status.SENT).build();
+ final SmsMessage smsMessageWithSmppMessageId2 = SmsMessage.builder().setSid(Sid.generate(Sid.Type.SMS_MESSAGE)).setSmppMessageId(smppMessageId).setStatus(SmsMessage.Status.SENT).build();
+ final SmsMessage smsMessageWithSmppMessageId3 = SmsMessage.builder().setSid(Sid.generate(Sid.Type.SMS_MESSAGE)).setSmppMessageId(smppMessageId).setStatus(SmsMessage.Status.SENT).build();
+ final List messages = Arrays.asList(smsMessageWithSmppMessageId1, smsMessageWithSmppMessageId2, smsMessageWithSmppMessageId3);
+
+ when(smsMessagesDao.findBySmppMessageId(smppMessageId)).thenReturn(messages);
+
final ActorRef messageHandler = system.actorOf(Props.apply(new Creator() {
@Override
public Actor create() throws Exception {
@@ -271,14 +259,21 @@ public Actor create() throws Exception {
// then
final ArgumentCaptor smsCaptor = ArgumentCaptor.forClass(SmsMessage.class);
- verify(smsMessagesDao, timeout(50).times(2)).updateSmsMessage(smsCaptor.capture());
+ verify(smsMessagesDao, timeout(50).times(4)).updateSmsMessage(smsCaptor.capture());
final List capturedSms = smsCaptor.getAllValues();
- assertEquals(2, capturedSms.size());
assertNull(capturedSms.get(0).getSmppMessageId());
- assertEquals(SmsMessage.Status.QUEUED, capturedSms.get(0).getStatus());
- assertEquals(smppMessageId, capturedSms.get(1).getSmppMessageId());
+ assertEquals(SmsMessage.Status.SENT, capturedSms.get(0).getStatus());
+
+ assertNull(capturedSms.get(1).getSmppMessageId());
assertEquals(SmsMessage.Status.SENT, capturedSms.get(1).getStatus());
+
+ assertNull(capturedSms.get(2).getSmppMessageId());
+ assertEquals(SmsMessage.Status.SENT, capturedSms.get(2).getStatus());
+
+ assertEquals(smsMessage.getSid(), capturedSms.get(3).getSid());
+ assertEquals(smppMessageId, capturedSms.get(3).getSmppMessageId());
+ assertEquals(SmsMessage.Status.SENT, capturedSms.get(3).getStatus());
}
};
}