package org.mobicents.smsc.slee.services.http.server.tx; import org.junit.Ignore; import org.mobicents.smsc.domain.HttpUsersManagement; import org.mobicents.smsc.domain.MProcManagement; import org.mobicents.smsc.domain.SmscPropertiesManagement; import org.mobicents.smsc.domain.StoreAndForwordMode; import org.mobicents.smsc.slee.resources.persistence.PersistenceRAInterfaceProxy; import org.mobicents.smsc.slee.services.http.server.tx.enums.RequestParameter; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import javax.servlet.http.HttpServletResponse; import javax.slee.ActivityContextInterface; import javax.slee.SLEEException; import javax.slee.SbbLocalObject; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Arrays; /** * Created by tpalucki on 05.09.16. * * @author Tomasz Pałucki */ public class TxHttpServerSbbTest { private TxHttpServerSbbProxy sbb; private PersistenceRAInterfaceProxy pers; private boolean cassandraDbInited; // test constants private static final String ENCODING_UCS2 = "UCS2"; private static final String ENCODING_GSM7 = "GSM7"; private static final String BODY_ENCODING_UTF8 = "UTF8"; private static final String BODY_ENCODING_UTF16 = "UTF16"; private static final String FORMAT_STRING = "String"; private static final String FORMAT_JSON = "json"; private static final String METHOD_GET = "GET"; private static final String METHOD_POST = "POST"; private static final String SENDER_ID_DEFAULT = "1231241243"; private static final String SENDER_ALPHANUMERIC = "ABC1231241243"; private static final String MESSAGE_DEFAULT = "SMS message ;P"; private static final String MESSAGE_TEXT_WITH_LINK = "SMS=message&emot=;P&a=b"; private static final String SENDER_TON_DEFAULT = "1"; private static final String SENDER_NPI_DEFAULT = "1"; private static final String SENDER_TON_INCORRECT = "9d"; private static final String SENDER_NPI_INCORRECT = "20"; private static final String PASSWORD_DEFAULT = "password"; private static final String USER_DEFAULT = "user_4321"; private static final String USER_INCORRECT = "user_6584"; private static final String PASSWORD_INCORRECT = "password345"; private static final String[] TO_MULTIPLE = {"123456789", "111222333", "123123123"}; private static final String[] TO_ONE = {"123456789"}; private static final String[] TO_INCORRECT = {"123tr4"}; private static final String[] TO_EMPTY = {""}; private static final String[] TO_ONE_ALPHANUMERIC = {"ABC"}; private static final String[] TO_MULTIPLE_PLUS_ALPHANUMERIC = {"123456789", "111222333", "123123123", "ABC"}; private static final String[] TO_MULTIPLE_PLUS_EMPTY = {"123456789", "111222333", "123123123", "", " "}; private static final String URL_SEND_MESSAGE = "http://test.pl/restcomm/sendSms"; private static final String URL_SEND_MESSAGE_FAKE = "http://test.pl/sendMessageFake"; private static final String URL_GET_MESSAGE_ID_STATUS = "http://test.pl/restcomm/msgQuery"; private static final String MESSAGE_ID = "123456789"; private static final String MSG_ARABIC = "الأَبْجَدِيَّة العَرَبِيَّة"; @BeforeMethod public void setUpClass() throws Exception { System.out.println("setUpClass"); this.pers = new PersistenceRAInterfaceProxy(); this.cassandraDbInited = this.pers.testCassandraAccess(); if (!this.cassandraDbInited) return; // if (!this.cassandraDbInited) // Assert.fail("Cassandra DB is not inited"); this.pers.start(); SmscPropertiesManagement.getInstance("Test"); SmscPropertiesManagement.getInstance().setSmscStopped(false); SmscPropertiesManagement.getInstance().setStoreAndForwordMode(StoreAndForwordMode.normal); MProcManagement.getInstance("Test"); HttpUsersManagement usersManagement = HttpUsersManagement.getInstance("Test"); if(usersManagement.getHttpUserByName("user_4321") == null) { //add if not exists usersManagement.createHttpUser("user_4321", "password", 0); } this.sbb = new TxHttpServerSbbProxy(this.pers); } @AfterMethod public void tearDownClass() throws Exception { System.out.println("tearDownClass"); } //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //-SEND MESSAGE FUNCTIONALITY TESTS //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ @Test public void sendMessageGETStringSuccessTest() throws Exception { System.out.println("sendMessageGETStringSuccessTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, URLEncoder.encode(MESSAGE_DEFAULT, "UTF-8"), FORMAT_STRING, ENCODING_GSM7, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_STRING, true, 1), "Response is not valid"); } @Test public void sendMessageGETStringErrorTest() throws UnsupportedEncodingException { System.out.println("sendMessageGETStringErrorTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, null, PASSWORD_DEFAULT, URLEncoder.encode(MESSAGE_DEFAULT, "UTF-8"), FORMAT_STRING, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertEquals(resp.getStatus(), HttpServletResponse.SC_UNAUTHORIZED); } @Test public void sendMessageGETForbiddenTest() throws UnsupportedEncodingException { System.out.println("sendMessageGETForbiddenTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, URLEncoder.encode(MESSAGE_DEFAULT, "UTF-8"), FORMAT_STRING, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.setForbidden(true); this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertFalse(isValid(resp, FORMAT_STRING, false), "Response is not valid"); this.sbb.setForbidden(false); } @Test public void sendMessageGETStringIncorrectTonTest() throws Exception { System.out.println("sendMessageGETStringIncorrectTonTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, URLEncoder.encode(MESSAGE_DEFAULT, "UTF-8"), FORMAT_STRING, ENCODING_GSM7, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_INCORRECT, SENDER_NPI_DEFAULT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_STRING, false, 1), "Response is not valid"); } @Test public void sendMessageGETStringIncorrectNpiTest() throws Exception { System.out.println("sendMessageGETStringIncorrectNpiTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, URLEncoder.encode(MESSAGE_DEFAULT, "UTF-8"), FORMAT_STRING, ENCODING_GSM7, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_INCORRECT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_STRING, false, 1), "Response is not valid"); } @Test public void incorrectToAdressTest() { System.out.println("incorrectToAdressTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_INCORRECT); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_JSON, false), "Response is not valid"); } @Test public void emptyToAdressTest() { System.out.println("emptyToAdressTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_EMPTY); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_JSON, false), "Response is not valid"); } @Test public void wrongServiceTest() { System.out.println("wrongServiceTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE_FAKE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_STRING, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_STRING, false), "Response is not valid"); } @Test public void sendMessageGETJsonSuccessTest() { System.out.println("sendMessageGETJsonSuccessTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_GSM7, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_JSON, true, 1), "Response is not valid"); } @Test public void sendMessageGETJsonErrorTest() { System.out.println("sendMessageGETJsonErrorTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, null, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertEquals(resp.getStatus(), HttpServletResponse.SC_UNAUTHORIZED); } @Test public void sendMessageGETJsonWrongUsernameTest() { System.out.println("sendMessageGETJsonWrongUsernameTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_INCORRECT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertEquals(resp.getStatus(), HttpServletResponse.SC_UNAUTHORIZED); } @Test public void sendMessageGETJsonWrongPasswordTest() { System.out.println("sendMessageGETJsonWrongPasswordTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_INCORRECT, PASSWORD_INCORRECT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertEquals(resp.getStatus(), HttpServletResponse.SC_UNAUTHORIZED); } @Test public void sendMessagePOSTStringSuccessTest() { System.out.println("sendMessagePOSTStringSuccessTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_POST, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_STRING, ENCODING_GSM7, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpPost(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_STRING, true, 1), "Response is not valid"); } @Test public void sendMessagePOSTStringWithMessageLinkSuccessTest() { System.out.println("sendMessagePOSTStringWithMessageLinkSuccessTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_POST, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_TEXT_WITH_LINK, FORMAT_STRING, ENCODING_GSM7, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpPost(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_STRING, true, 1), "Response is not valid"); } @Test public void sendMessagePOSTStringErrorTest() { System.out.println("sendMessagePOSTStringErrorTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_POST, URL_SEND_MESSAGE, null, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_STRING, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpPost(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertEquals(resp.getStatus(), HttpServletResponse.SC_UNAUTHORIZED); } @Test public void sendMessagePOSTJsonSuccessTest() { System.out.println("sendMessagePOSTJsonSuccessTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_POST, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_GSM7, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpPost(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_JSON, true, 1), "Response is not valid"); } @Test public void sendMessagePOSTJsonToMultipleSuccessTest() { System.out.println("sendMessagePOSTJsonSuccessTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_POST, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_GSM7, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_MULTIPLE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpPost(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_JSON, true, 3), "Response is not valid"); } @Test public void sendMessagePOSTJsonWrongRecipientsAmountErrorTest() { System.out.println("sendMessagePOSTJsonWrongRecipientsAmountErrorTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_POST, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_GSM7, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_MULTIPLE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpPost(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertFalse(isValid(resp, FORMAT_JSON, true, 4), "Response is not valid"); } @Test public void sendMessagePOSTJsonErrorTest() { System.out.println("sendMessagePOSTJsonErrorTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_POST, URL_SEND_MESSAGE, USER_DEFAULT, null, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpPost(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertEquals(resp.getStatus(), HttpServletResponse.SC_UNAUTHORIZED); } @Test public void sendArabicMessageGETJsonSuccessTest() throws UnsupportedEncodingException { System.out.println("sendArabicMessageGETJsonSuccessTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); String urlEncoded = null; urlEncoded = URLEncoder.encode(MSG_ARABIC, "UTF-8"); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, urlEncoded, FORMAT_JSON, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_MULTIPLE); // request.setContentType("application/x-www-form-urlencoded"); // request.setCharacterEncoding("UTF-8"); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_JSON, true, 3), "Response is not valid"); } @Test public void sendArabicMessageGETStringSuccessTest() throws UnsupportedEncodingException { System.out.println("sendArabicMessageGETStringSuccessTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); String urlEncoded = null; urlEncoded = URLEncoder.encode(MSG_ARABIC, "UTF-8"); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, urlEncoded, FORMAT_STRING, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_MULTIPLE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_STRING, true, 3), "Response is not valid"); } @Test public void sendArabicMessagePOSTSuccessStringTest() throws UnsupportedEncodingException { System.out.println("sendArabicMessagePOSTSuccessTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); String urlEncoded = null; urlEncoded = URLEncoder.encode(MSG_ARABIC, "UTF-8"); MockHttpServletRequest request = buildSendMessageRequest(METHOD_POST, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, urlEncoded, FORMAT_STRING, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_MULTIPLE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpPost(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_STRING, true, 3), "Response is not valid"); } //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //-END OF SEND MESSAGE FUNCTIONALITY TESTS //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //-GET STATUS FUNCTIONALITY TESTS //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ @Ignore @Test public void getStatusGETSuccessTest() { System.out.println("getStatusGETSuccessTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildGetMessageIdStatusRequest(METHOD_GET, URL_GET_MESSAGE_ID_STATUS, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_ID, FORMAT_STRING); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_STRING, true), "Response is not valid"); } @Test public void getStatusGETJsonSuccessTest() { System.out.println("getStatusGETJsonSuccessTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildGetMessageIdStatusRequest(METHOD_GET, URL_GET_MESSAGE_ID_STATUS, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_ID, FORMAT_JSON); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_JSON, true), "Response is not valid"); } @Test public void getStatusGETJsonErrorTest() { System.out.println("getStatusGETJsonErrorTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildGetMessageIdStatusRequest(METHOD_GET, URL_GET_MESSAGE_ID_STATUS, USER_DEFAULT, PASSWORD_DEFAULT, null, FORMAT_JSON); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_JSON, false), "Response is not valid"); } @Test public void getStatusGETPasswordNullErrorTest() { System.out.println("getStatusGETErrorTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildGetMessageIdStatusRequest(METHOD_GET, URL_GET_MESSAGE_ID_STATUS, USER_DEFAULT, null, MESSAGE_ID, FORMAT_STRING); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertEquals(resp.getStatus(), HttpServletResponse.SC_UNAUTHORIZED); } @Test public void getStatusPOSTStringErrorTest() { System.out.println("getStatusPOSTStringErrorTest"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildGetMessageIdStatusRequest(METHOD_POST, URL_GET_MESSAGE_ID_STATUS, USER_DEFAULT, PASSWORD_DEFAULT, null, FORMAT_STRING); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpPost(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_STRING, false), "Response is not valid"); } @Test public void alphanumericSenderAddressTest_GET() { System.out.println("alphanumericSenderAddressTest_GET"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ALPHANUMERIC, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_MULTIPLE); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_JSON, true), "Response is not valid"); } @Test public void alphanumericToAddressTest_GET() { System.out.println("alphanumericToAddressTest_GET"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE_ALPHANUMERIC); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_JSON, false), "Response is not valid"); } @Test public void alphanumericToAddressTest_POST() { System.out.println("alphanumericToAddressTest_POST"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_POST, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_ONE_ALPHANUMERIC); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpPost(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_JSON, false), "Response is not valid"); } @Test public void multiplePlusAlphanumericToAddressTest_GET() { System.out.println("multiplePlusAlphanumericToAddressTest_GET"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_MULTIPLE_PLUS_ALPHANUMERIC); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_JSON, false), "Response is not valid"); } @Test public void multiplePlusEmptyToAddressTest_GET() { System.out.println("multiplePlusEmptyToAddressTest_GET"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_GET, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_MULTIPLE_PLUS_EMPTY); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpGet(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_JSON, true, 3), "Response is not valid"); } @Test public void multiplePlusEmptyToAddressTest_POST() { System.out.println("multiplePlusEmptyToAddressTest_GET"); if (!this.cassandraDbInited) { // Assert.fail("Cassandra DB is not inited"); return; } // prepare ActivityContextInterface aci = new HttpActivityContextInterface(); MockHttpServletRequestEvent event = new MockHttpServletRequestEvent(); MockHttpServletRequest request = buildSendMessageRequest(METHOD_POST, URL_SEND_MESSAGE, USER_DEFAULT, PASSWORD_DEFAULT, MESSAGE_DEFAULT, FORMAT_JSON, ENCODING_UCS2, BODY_ENCODING_UTF8, SENDER_ID_DEFAULT, SENDER_TON_DEFAULT, SENDER_NPI_DEFAULT, TO_MULTIPLE_PLUS_EMPTY); event.setRequest(request); MockHttpServletResponse response = new MockHttpServletResponse(); event.setResponse(response); // perform the action this.sbb.onHttpPost(event, aci); MockHttpServletResponse resp = (MockHttpServletResponse) event.getResponse(); printResponseData(resp); Assert.assertTrue(isValid(resp, FORMAT_JSON, true, 3), "Response is not valid"); } //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //-END OF GET STATUS FUNCTIONALITY TESTS //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ private boolean isValid(MockHttpServletResponse resp, String format, boolean expectedStatus) { return isValid(resp, format, expectedStatus, null); } private boolean isValid(MockHttpServletResponse resp, String format, boolean expectedStatus, Integer count) { System.out.println("Validating the response"); if (200 != resp.getStatus()) { System.out.println("Status is not 200 - OK. actual status is: " + resp.getStatus()); return false; } try { final String content = resp.getContentAsString(); if (FORMAT_STRING.equalsIgnoreCase(format)) { System.out.println("Validating the String response."); if (expectedStatus) { Assert.assertTrue(content.contains("Success"), "Content does not contain success status."); } else { Assert.assertTrue(content.contains("Error"), "Content does not contain error status."); } } else if (FORMAT_JSON.equalsIgnoreCase(format)) { System.out.println("Validating the Json response."); Assert.assertNotNull(content, "Response content is null"); if (expectedStatus) { Assert.assertTrue(content.startsWith("{\"Success\""), "Content does not contain success status."); } else { Assert.assertTrue(content.startsWith("{\"Error\""), "Content does not contain Error status."); } Assert.assertTrue(content.endsWith("}"), "Json does not end with '}'"); Assert.assertTrue(content.contains(","), "Json does not contain ','"); } else { System.out.println("Unknown format: " + format); return false; } if (count != null && content.split(",").length - 1 != count) { System.out.println("Response contains wrong number of recipients"); return false; } System.out.println("Response is valid"); return true; } catch (UnsupportedEncodingException e) { e.printStackTrace(); System.out.println(e.toString()); return false; } } private void printResponseData(MockHttpServletResponse resp) { System.out.println("Header names: " + resp.getHeaderNames()); System.out.println("Content-Type: " + resp.getHeader("Content-Type")); System.out.println("Buffer size: " + resp.getBufferSize()); System.out.println("Content length: " + resp.getContentLength()); try { System.out.println("Status: " + resp.getStatus()); System.out.println("Content as String: " + resp.getContentAsString()); } catch (UnsupportedEncodingException e) { System.out.println("Unsupported exception."); e.printStackTrace(); } } private class HttpActivityContextInterface implements ActivityContextInterface { public HttpActivityContextInterface() { } @Override public void attach(SbbLocalObject arg0) throws NullPointerException, SLEEException { // TODO Auto-generated method stub } @Override public void detach(SbbLocalObject arg0) throws NullPointerException, SLEEException { // TODO Auto-generated method stub } @Override public Object getActivity() throws SLEEException { // TODO Auto-generated method stub return this; } @Override public boolean isAttached(SbbLocalObject arg0) throws NullPointerException, SLEEException { // TODO Auto-generated method stub return false; } @Override public boolean isEnding() throws SLEEException { // TODO Auto-generated method stub return false; } } private MockHttpServletRequest buildSendMessageRequest(String method, String url, String userId, String password, String msg, String format, String smscEncoding, String messageBodyEncoding, String sender, String senderTon, String senderNpi, String[] to) { MockHttpServletRequest req = new MockHttpServletRequest(); req.setMethod(method); if(!method.equals("POST")) { req.setParameter(RequestParameter.USER_ID.getName(), userId); req.setParameter(RequestParameter.PASSWORD.getName(), password); req.setParameter(RequestParameter.MESSAGE_BODY.getName(), msg); req.setParameter(RequestParameter.SENDER.getName(), sender); req.setParameter(RequestParameter.TO.getName(), Arrays.toString(to).replaceAll("\\[", "").replaceAll("\\]", "")); req.setParameter(RequestParameter.FORMAT.getName(), format); req.setParameter(RequestParameter.SMSC_ENCODING.getName(), smscEncoding); req.setParameter(RequestParameter.MESSAGE_BODY_ENCODING.getName(), messageBodyEncoding); req.setParameter(RequestParameter.SENDER_TON.getName(), senderTon); req.setParameter(RequestParameter.SENDER_NPI.getName(), senderNpi); } else { String params = RequestParameter.USER_ID.getName() + "=" + getValue(userId) + "&" + RequestParameter.PASSWORD.getName() + "=" + getValue(password) + "&" + RequestParameter.MESSAGE_BODY.getName() + "=" + getValue(msg) + "&" + RequestParameter.SENDER.getName() + "=" + getValue(sender) + "&" + RequestParameter.TO.getName() + "=" + Arrays.toString(to).replaceAll("\\[", "").replaceAll("\\]", "") ; if (format != null) { params += "&" + RequestParameter.FORMAT.getName() + "=" + getValue(format); } if (smscEncoding != null) { params += "&" + RequestParameter.SMSC_ENCODING.getName() + "=" + getValue(smscEncoding); } if (messageBodyEncoding != null) { params += "&" + RequestParameter.MESSAGE_BODY_ENCODING.getName() + "=" + getValue(messageBodyEncoding); } if (senderTon != null) { params += "&" + RequestParameter.SENDER_TON.getName() + "=" + getValue(senderTon); } if (senderNpi != null) { params += "&" + RequestParameter.SENDER_NPI.getName() + "=" + getValue(senderNpi); } try { req.setContent(params.getBytes("UTF8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } req.setRequestURI(url); return req; } private String getValue(String str){ return str==null ? "" : str; } private MockHttpServletRequest buildGetMessageIdStatusRequest(String method, String url, String userId, String password, String msgId, String format) { MockHttpServletRequest req = new MockHttpServletRequest(); req.setMethod(method); req.setParameter(RequestParameter.USER_ID.getName(), userId); req.setParameter(RequestParameter.PASSWORD.getName(), password); req.setParameter(RequestParameter.MESSAGE_ID.getName(), msgId); if (format != null) { req.setParameter(RequestParameter.FORMAT.getName(), format); } req.setRequestURI(url); return req; } }