| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.camel.component.smpp; |
| |
| import java.io.UnsupportedEncodingException; |
| import java.util.Date; |
| |
| import org.apache.camel.Exchange; |
| import org.apache.camel.impl.DefaultCamelContext; |
| import org.apache.camel.impl.DefaultExchange; |
| import org.jsmpp.bean.AlertNotification; |
| import org.jsmpp.bean.DataSm; |
| import org.jsmpp.bean.DeliverSm; |
| import org.jsmpp.bean.NumberingPlanIndicator; |
| import org.jsmpp.bean.OptionalParameter; |
| import org.jsmpp.bean.OptionalParameter.OctetString; |
| import org.jsmpp.bean.SubmitSm; |
| import org.jsmpp.bean.TypeOfNumber; |
| import org.jsmpp.util.DeliveryReceiptState; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| import static org.junit.Assert.assertArrayEquals; |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertSame; |
| |
| /** |
| * JUnit test class for <code>org.apache.camel.component.smpp.SmppBinding</code> |
| * |
| * @version |
| */ |
| public class SmppBindingTest { |
| |
| private SmppBinding binding; |
| |
| @Before |
| public void setUp() { |
| binding = new SmppBinding() { |
| Date getCurrentDate() { |
| return new Date(1251666387000L); |
| } |
| }; |
| } |
| |
| @Test |
| public void emptyConstructorShouldSetTheSmppConfiguration() { |
| assertNotNull(binding.getConfiguration()); |
| } |
| |
| @Test |
| public void constructorSmppConfigurationShouldSetTheSmppConfiguration() { |
| SmppConfiguration configuration = new SmppConfiguration(); |
| binding = new SmppBinding(configuration); |
| |
| assertSame(configuration, binding.getConfiguration()); |
| } |
| |
| @Test |
| public void createSubmitSmShouldCreateASubmitSmFromDefaults() throws UnsupportedEncodingException { |
| Exchange exchange = new DefaultExchange(new DefaultCamelContext()); |
| exchange.getIn().setBody("Hello SMPP world!"); |
| SubmitSm submitSm = binding.createSubmitSm(exchange); |
| |
| assertEquals("Hello SMPP world!", new String(submitSm.getShortMessage())); |
| assertEquals("1717", submitSm.getDestAddress()); |
| assertEquals(0x00, submitSm.getDestAddrNpi()); |
| assertEquals(0x00, submitSm.getDestAddrTon()); |
| assertEquals(0x01, submitSm.getPriorityFlag()); |
| assertEquals(0x00, submitSm.getProtocolId()); |
| assertEquals(0x01, submitSm.getRegisteredDelivery()); |
| assertEquals(0x00, submitSm.getReplaceIfPresent()); |
| // To avoid the test failure when running in different TimeZone |
| //assertEquals("090830230627004+", submitSm.getScheduleDeliveryTime()); |
| assertEquals("CMT", submitSm.getServiceType()); |
| assertEquals("1616", submitSm.getSourceAddr()); |
| assertEquals(0x00, submitSm.getSourceAddrNpi()); |
| assertEquals(0x00, submitSm.getSourceAddrTon()); |
| assertNull(submitSm.getValidityPeriod()); |
| // not relevant |
| //assertEquals(0, submitSm.getCommandId()); |
| //assertEquals(0, submitSm.getCommandStatus()); |
| //assertEquals(0, submitSm.getSequenceNumber()); |
| } |
| |
| @Test |
| public void createSubmitSmWithDifferentEncoding() throws UnsupportedEncodingException { |
| binding.getConfiguration().setEncoding("UTF-16"); |
| |
| Exchange exchange = new DefaultExchange(new DefaultCamelContext()); |
| exchange.getIn().setBody("Hello SMPP world!"); |
| SubmitSm submitSm = binding.createSubmitSm(exchange); |
| |
| assertArrayEquals("Hello SMPP world!".getBytes("UTF-16"), submitSm.getShortMessage()); |
| } |
| |
| @Test |
| public void createSubmitSmShouldCreateASubmitSmFromHeaders() throws UnsupportedEncodingException { |
| Exchange exchange = new DefaultExchange(new DefaultCamelContext()); |
| exchange.getIn().setBody("Hello SMPP world!"); |
| exchange.getIn().setHeader(SmppBinding.DEST_ADDR, "1919"); |
| exchange.getIn().setHeader(SmppBinding.DEST_ADDR_NPI, NumberingPlanIndicator.NATIONAL.value()); |
| exchange.getIn().setHeader(SmppBinding.DEST_ADDR_TON, TypeOfNumber.NATIONAL.value()); |
| exchange.getIn().setHeader(SmppBinding.PRIORITY_FLAG, (byte) 0); |
| exchange.getIn().setHeader(SmppBinding.PROTOCOL_ID, (byte) 1); |
| exchange.getIn().setHeader(SmppBinding.REGISTERED_DELIVERY, (byte) 0); |
| exchange.getIn().setHeader(SmppBinding.REPLACE_IF_PRESENT_FLAG, (byte) 1); |
| exchange.getIn().setHeader(SmppBinding.SCHEDULE_DELIVERY_TIME, new Date(1251753000000L)); |
| exchange.getIn().setHeader(SmppBinding.SERVICE_TYPE, "XXX"); |
| exchange.getIn().setHeader(SmppBinding.VALIDITY_PERIOD, new Date(1251753600000L)); |
| exchange.getIn().setHeader(SmppBinding.SOURCE_ADDR, "1818"); |
| exchange.getIn().setHeader(SmppBinding.SOURCE_ADDR_NPI, NumberingPlanIndicator.NATIONAL.value()); |
| exchange.getIn().setHeader(SmppBinding.SOURCE_ADDR_TON, TypeOfNumber.NATIONAL.value()); |
| SubmitSm submitSm = binding.createSubmitSm(exchange); |
| |
| assertEquals("Hello SMPP world!", new String(submitSm.getShortMessage())); |
| assertEquals("1919", submitSm.getDestAddress()); |
| assertEquals(0x08, submitSm.getDestAddrNpi()); |
| assertEquals(0x02, submitSm.getDestAddrTon()); |
| assertEquals(0x00, submitSm.getPriorityFlag()); |
| assertEquals(0x01, submitSm.getProtocolId()); |
| assertEquals(0x00, submitSm.getRegisteredDelivery()); |
| assertEquals(0x01, submitSm.getReplaceIfPresent()); |
| // To avoid the test failure when running in different TimeZone |
| //assertEquals("090831231000004+", submitSm.getScheduleDeliveryTime()); |
| assertEquals("XXX", submitSm.getServiceType()); |
| assertEquals("1818", submitSm.getSourceAddr()); |
| assertEquals(0x08, submitSm.getSourceAddrNpi()); |
| assertEquals(0x02, submitSm.getSourceAddrTon()); |
| //assertEquals("090831232000004+", submitSm.getValidityPeriod()); |
| // not relevant |
| //assertEquals(0, submitSm.getCommandId()); |
| //assertEquals(0, submitSm.getCommandStatus()); |
| //assertEquals(0, submitSm.getSequenceNumber()); |
| } |
| |
| @Test |
| public void createSubmitSmWithLongMessageBody() throws UnsupportedEncodingException { |
| String payload = "Hello SMPP World! Hello SMPP World! Hello SMPP World! Hello SMPP World! Hello SMPP World! " |
| + "Hello SMPP World! Hello SMPP World! Hello SMPP World! Hello SMPP World! Hello SMPP World! " |
| + "Hello SMPP World! Hello SMPP World! Hello SMPP World! Hello SMPP World! Hello SMPP World! "; // 270 chars |
| Exchange exchange = new DefaultExchange(new DefaultCamelContext()); |
| exchange.getIn().setBody(payload); |
| SubmitSm submitSm = binding.createSubmitSm(exchange); |
| |
| assertArrayEquals(new byte[0], submitSm.getShortMessage()); |
| |
| OptionalParameter[] optionalParametes = submitSm.getOptionalParametes(); |
| assertEquals(1, optionalParametes.length); |
| |
| OptionalParameter messagePayloadTLV = optionalParametes[0]; |
| assertEquals(OptionalParameter.Tag.MESSAGE_PAYLOAD.code(), messagePayloadTLV.tag); |
| byte[] expectedTLV = new byte[274]; |
| expectedTLV[0] = 4; |
| expectedTLV[1] = 36; |
| expectedTLV[2] = 1; |
| expectedTLV[3] = 14; |
| System.arraycopy(payload.getBytes(), 0, expectedTLV, 4, 270); |
| assertArrayEquals(expectedTLV, messagePayloadTLV.serialize()); |
| } |
| |
| @Test |
| public void createSmppMessageFromAlertNotificationShouldReturnASmppMessage() { |
| AlertNotification alertNotification = new AlertNotification(); |
| alertNotification.setCommandId(1); |
| alertNotification.setSequenceNumber(1); |
| alertNotification.setSourceAddr("1616"); |
| alertNotification.setSourceAddrNpi(NumberingPlanIndicator.NATIONAL.value()); |
| alertNotification.setSourceAddrTon(TypeOfNumber.NATIONAL.value()); |
| alertNotification.setEsmeAddr("1717"); |
| alertNotification.setEsmeAddrNpi(NumberingPlanIndicator.NATIONAL.value()); |
| alertNotification.setEsmeAddrTon(TypeOfNumber.NATIONAL.value()); |
| SmppMessage smppMessage = binding.createSmppMessage(alertNotification); |
| |
| assertNull(smppMessage.getBody()); |
| assertEquals(10, smppMessage.getHeaders().size()); |
| assertEquals(1, smppMessage.getHeader(SmppBinding.SEQUENCE_NUMBER)); |
| assertEquals(1, smppMessage.getHeader(SmppBinding.COMMAND_ID)); |
| assertEquals(0, smppMessage.getHeader(SmppBinding.COMMAND_STATUS)); |
| assertEquals("1616", smppMessage.getHeader(SmppBinding.SOURCE_ADDR)); |
| assertEquals((byte) 8, smppMessage.getHeader(SmppBinding.SOURCE_ADDR_NPI)); |
| assertEquals((byte) 2, smppMessage.getHeader(SmppBinding.SOURCE_ADDR_TON)); |
| assertEquals("1717", smppMessage.getHeader(SmppBinding.ESME_ADDR)); |
| assertEquals((byte) 8, smppMessage.getHeader(SmppBinding.ESME_ADDR_NPI)); |
| assertEquals((byte) 2, smppMessage.getHeader(SmppBinding.ESME_ADDR_TON)); |
| assertEquals(SmppMessageType.AlertNotification.toString(), smppMessage.getHeader(SmppBinding.MESSAGE_TYPE)); |
| } |
| |
| @Test |
| public void createSmppMessageFromDeliveryReceiptShouldReturnASmppMessage() throws Exception { |
| DeliverSm deliverSm = new DeliverSm(); |
| deliverSm.setSmscDeliveryReceipt(); |
| deliverSm.setShortMessage("id:2 sub:001 dlvrd:001 submit date:0908312310 done date:0908312311 stat:DELIVRD err:xxx Text:Hello SMPP world!".getBytes()); |
| SmppMessage smppMessage = binding.createSmppMessage(deliverSm); |
| |
| assertEquals("Hello SMPP world!", smppMessage.getBody()); |
| assertEquals(8, smppMessage.getHeaders().size()); |
| assertEquals("2", smppMessage.getHeader(SmppBinding.ID)); |
| assertEquals(1, smppMessage.getHeader(SmppBinding.DELIVERED)); |
| // To avoid the test failure when running in different TimeZone |
| //assertEquals(new Date(1251753060000L), smppMessage.getHeader(SmppBinding.DONE_DATE)); |
| assertEquals("xxx", smppMessage.getHeader(SmppBinding.ERROR)); |
| //assertEquals(new Date(1251753000000L), smppMessage.getHeader(SmppBinding.SUBMIT_DATE)); |
| assertEquals(1, smppMessage.getHeader(SmppBinding.SUBMITTED)); |
| assertEquals(DeliveryReceiptState.DELIVRD, smppMessage.getHeader(SmppBinding.FINAL_STATUS)); |
| assertEquals(SmppMessageType.DeliveryReceipt.toString(), smppMessage.getHeader(SmppBinding.MESSAGE_TYPE)); |
| } |
| |
| @Test |
| public void createSmppMessageFromDeliverSmShouldReturnASmppMessage() throws Exception { |
| DeliverSm deliverSm = new DeliverSm(); |
| deliverSm.setShortMessage("Hello SMPP world!".getBytes()); |
| deliverSm.setSequenceNumber(1); |
| deliverSm.setCommandId(1); |
| deliverSm.setSourceAddr("1818"); |
| deliverSm.setDestAddress("1919"); |
| deliverSm.setScheduleDeliveryTime("090831230627004+"); |
| deliverSm.setValidityPeriod("090901230627004+"); |
| deliverSm.setServiceType("WAP"); |
| SmppMessage smppMessage = binding.createSmppMessage(deliverSm); |
| |
| assertEquals("Hello SMPP world!", smppMessage.getBody()); |
| assertEquals(8, smppMessage.getHeaders().size()); |
| assertEquals(1, smppMessage.getHeader(SmppBinding.SEQUENCE_NUMBER)); |
| assertEquals(1, smppMessage.getHeader(SmppBinding.COMMAND_ID)); |
| assertEquals("1818", smppMessage.getHeader(SmppBinding.SOURCE_ADDR)); |
| assertEquals("1919", smppMessage.getHeader(SmppBinding.DEST_ADDR)); |
| assertEquals("090831230627004+", smppMessage.getHeader(SmppBinding.SCHEDULE_DELIVERY_TIME)); |
| assertEquals("090901230627004+", smppMessage.getHeader(SmppBinding.VALIDITY_PERIOD)); |
| assertEquals("WAP", smppMessage.getHeader(SmppBinding.SERVICE_TYPE)); |
| assertEquals(SmppMessageType.DeliverSm.toString(), smppMessage.getHeader(SmppBinding.MESSAGE_TYPE)); |
| } |
| |
| @Test |
| public void createSmppMessageFromDeliverSmWithPayloadInOptionalParameterShouldReturnASmppMessage() throws Exception { |
| DeliverSm deliverSm = new DeliverSm(); |
| deliverSm.setSequenceNumber(1); |
| deliverSm.setCommandId(1); |
| deliverSm.setSourceAddr("1818"); |
| deliverSm.setDestAddress("1919"); |
| deliverSm.setScheduleDeliveryTime("090831230627004+"); |
| deliverSm.setValidityPeriod("090901230627004+"); |
| deliverSm.setServiceType("WAP"); |
| deliverSm.setOptionalParametes(new OctetString(OptionalParameter.Tag.MESSAGE_PAYLOAD, "Hello SMPP world!")); |
| SmppMessage smppMessage = binding.createSmppMessage(deliverSm); |
| |
| assertEquals("Hello SMPP world!", smppMessage.getBody()); |
| assertEquals(8, smppMessage.getHeaders().size()); |
| assertEquals(1, smppMessage.getHeader(SmppBinding.SEQUENCE_NUMBER)); |
| assertEquals(1, smppMessage.getHeader(SmppBinding.COMMAND_ID)); |
| assertEquals("1818", smppMessage.getHeader(SmppBinding.SOURCE_ADDR)); |
| assertEquals("1919", smppMessage.getHeader(SmppBinding.DEST_ADDR)); |
| assertEquals("090831230627004+", smppMessage.getHeader(SmppBinding.SCHEDULE_DELIVERY_TIME)); |
| assertEquals("090901230627004+", smppMessage.getHeader(SmppBinding.VALIDITY_PERIOD)); |
| assertEquals("WAP", smppMessage.getHeader(SmppBinding.SERVICE_TYPE)); |
| assertEquals(SmppMessageType.DeliverSm.toString(), smppMessage.getHeader(SmppBinding.MESSAGE_TYPE)); |
| } |
| |
| @Test |
| public void createSmppMessageFromDataSmShouldReturnASmppMessage() throws Exception { |
| DataSm dataSm = new DataSm(); |
| dataSm.setSequenceNumber(1); |
| dataSm.setCommandId(1); |
| dataSm.setCommandStatus(0); |
| dataSm.setSourceAddr("1818"); |
| dataSm.setSourceAddrNpi(NumberingPlanIndicator.NATIONAL.value()); |
| dataSm.setSourceAddrTon(TypeOfNumber.NATIONAL.value()); |
| dataSm.setDestAddress("1919"); |
| dataSm.setDestAddrNpi(NumberingPlanIndicator.NATIONAL.value()); |
| dataSm.setDestAddrTon(TypeOfNumber.NATIONAL.value()); |
| dataSm.setServiceType("WAP"); |
| dataSm.setRegisteredDelivery((byte) 0); |
| SmppMessage smppMessage = binding.createSmppMessage(dataSm, "1"); |
| |
| assertNull(smppMessage.getBody()); |
| assertEquals(14, smppMessage.getHeaders().size()); |
| assertEquals("1", smppMessage.getHeader(SmppBinding.ID)); |
| assertEquals(1, smppMessage.getHeader(SmppBinding.SEQUENCE_NUMBER)); |
| assertEquals(1, smppMessage.getHeader(SmppBinding.COMMAND_ID)); |
| assertEquals(0, smppMessage.getHeader(SmppBinding.COMMAND_STATUS)); |
| assertEquals("1818", smppMessage.getHeader(SmppBinding.SOURCE_ADDR)); |
| assertEquals((byte) 8, smppMessage.getHeader(SmppBinding.SOURCE_ADDR_NPI)); |
| assertEquals((byte) 2, smppMessage.getHeader(SmppBinding.SOURCE_ADDR_TON)); |
| assertEquals("1919", smppMessage.getHeader(SmppBinding.DEST_ADDR)); |
| assertEquals((byte) 8, smppMessage.getHeader(SmppBinding.DEST_ADDR_NPI)); |
| assertEquals((byte) 2, smppMessage.getHeader(SmppBinding.DEST_ADDR_TON)); |
| assertEquals("WAP", smppMessage.getHeader(SmppBinding.SERVICE_TYPE)); |
| assertEquals((byte) 0, smppMessage.getHeader(SmppBinding.REGISTERED_DELIVERY)); |
| assertEquals((byte) 0, smppMessage.getHeader(SmppBinding.DATA_CODING)); |
| assertEquals(SmppMessageType.DataSm.toString(), smppMessage.getHeader(SmppBinding.MESSAGE_TYPE)); |
| } |
| |
| @Test |
| public void getterShouldReturnTheSetValues() { |
| SmppConfiguration configuration = new SmppConfiguration(); |
| binding.setConfiguration(configuration); |
| |
| assertSame(configuration, binding.getConfiguration()); |
| } |
| } |