/* * TeleStax, Open Source Cloud Communications Copyright 2012. * and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.mobicents.smsc.slee.services.mt; import static org.testng.Assert.*; import java.util.ArrayList; import java.util.Date; import java.util.UUID; import org.mobicents.smsc.cassandra.PersistenceException; import org.mobicents.smsc.domain.SmscPropertiesManagement; import org.mobicents.smsc.library.Sms; import org.mobicents.smsc.library.SmsSet; import org.mobicents.smsc.library.SmsSetCache; import org.mobicents.smsc.library.TargetAddress; import org.mobicents.smsc.slee.resources.persistence.PersistenceRAInterfaceProxy; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; /** * * @author sergey vetyutnev * */ public class MtDatabaseCassandraTest { private MtSbbProxy sbb; private PersistenceRAInterfaceProxy pers; private boolean cassandraDbInited; private Date curDate; private TargetAddress ta1 = new TargetAddress(1, 1, "5555", 0); private String msg = "01230123"; // private byte[] msg = { 11, 12, 13, 14, 15, 15 }; // private byte[] msg_ref_num = { 0, 10 }; @BeforeMethod public void setUpClass() throws Exception { System.out.println("setUpClass"); this.pers = new PersistenceRAInterfaceProxy(); this.cassandraDbInited = this.pers.testCassandraAccess(); if (!this.cassandraDbInited) return; this.pers.start(); SmscPropertiesManagement.getInstance("Test"); SmsSetCache.getInstance().clearProcessingSmsSet(); this.sbb = new MtSbbProxy(this.pers); } @AfterMethod public void tearDownClass() throws Exception { System.out.println("tearDownClass"); } private long procDueSot; // @Test(groups = { "Mt" }) // public void SuccessDeliveryTest() throws Exception { // // if (!this.cassandraDbInited) // return; // // SmsSet smsSet = prepareDatabase(); // // assertEquals(smsSet.getSmsCount(), 2); // Sms sms1 = smsSet.getSms(0); // assertEquals(sms1.getMessageId(), 1); // Sms sms2 = smsSet.getSms(1); // assertEquals(sms2.getMessageId(), 2); // Sms sms3 = smsSet.getSms(2); // assertNull(sms3); // // // fetchSchedulableSms() // long dueSlot = procDueSot; // PreparedStatementCollection_C3 psc = this.pers.getStatementCollection(new Date()); // int b1 = this.pers.checkSmsExists(dueSlot, ta1); // long b2 = this.pers.c2_getDueSlotForTargetId(psc, ta1.getTargetId()); // assertEquals(b1, 2); // assertEquals(b2, dueSlot); // // // startMessageDelivery() // Sms smsa1 = smsSet.getSms(0); // Sms smsx1 = pers.obtainLiveSms(procDueSot, sms1.getSmsSet().getTargetId(), sms1.getDbId()); // assertEquals(smsa1.getDeliveryCount(), 0); // assertEquals(smsx1.getDeliveryCount(), 0); // this.sbb.startMessageDelivery(smsa1); // smsx1 = pers.obtainLiveSms(procDueSot, smsa1.getSmsSet().getTargetId(), smsa1.getDbId()); // assertEquals(smsa1.getDeliveryCount(), 1); // assertEquals(smsx1.getDeliveryCount(), 1); // // archiveMessageAsDelivered(Sms sms); // // assertEquals(smsSet.getSmsCount(), 2); // this.sbb.archiveMessageAsDelivered(smsa1); // // smsSet.removeFirstSms(); // // assertEquals(smsSet.getSmsCount(), 1); // smsx1 = pers.obtainLiveSms(sms1.getDbId()); // Sms smsx2 = pers.obtainLiveSms(sms2.getDbId()); // assertNull(smsx1); // assertEquals(smsx2.getDeliveryCount(), 0); // SmsProxy smsp1 = pers.obtainArchiveSms(sms1.getDbId()); // SmsProxy smsp2 = pers.obtainArchiveSms(sms2.getDbId()); // assertEquals(smsp1.sms.getDeliveryCount(), 1); // assertEquals(smsp1.smStatus, 0); // assertNull(smsp2); // // Sms smsa2 = smsSet.getSms(1); // assertEquals(smsa2.getMessageId(), 2); // assertNotNull(smsa2); // this.sbb.startMessageDelivery(smsa2); // this.sbb.archiveMessageAsDelivered(smsa2); // // smsSet.removeFirstSms(); // smsx1 = pers.obtainLiveSms(sms1.getDbId()); // smsx2 = pers.obtainLiveSms(sms2.getDbId()); // assertNull(smsx1); // assertNull(smsx2); // smsp1 = pers.obtainArchiveSms(sms1.getDbId()); // smsp2 = pers.obtainArchiveSms(sms2.getDbId()); // assertEquals(smsp1.sms.getDeliveryCount(), 1); // assertEquals(smsp1.smStatus, 0); // assertEquals(smsp2.sms.getDeliveryCount(), 1); // assertEquals(smsp2.smStatus, 0); // // b1 = pers.checkSmsSetExists(ta1); // assertTrue(b1); // this.sbb.freeSmsSetSucceded(smsSet); // b1 = pers.checkSmsSetExists(ta1); // assertFalse(b1); // assertEquals(smsSet.getInSystem(), 0); // } // // @Test(groups = { "Mt" }) // public void FreeSmsSetWhenSmsExistsTest() throws Exception { // // if (!this.cassandraDbInited) // return; // // SmsSet smsSet = prepareDatabase(); // // boolean b1 = pers.checkSmsSetExists(ta1); // assertTrue(b1); // SmsSet smsSetX = pers.obtainSmsSet(ta1); // assertEquals(smsSetX.getInSystem(), 2); // // this.sbb.freeSmsSetSucceded(smsSet); // // b1 = pers.checkSmsSetExists(ta1); // assertTrue(b1); // smsSetX = pers.obtainSmsSet(ta1); // assertEquals(smsSetX.getInSystem(), 0); // assertEquals(smsSet.getInSystem(), 0); // } // // @Test(groups = { "Mt" }) // public void FreeSmsSetFailuredTest() throws Exception { // // if (!this.cassandraDbInited) // return; // // SmsSet smsSet = prepareDatabase(); // Sms sms1 = smsSet.getSms(0); // Sms sms2 = smsSet.getSms(1); // // Sms sms = smsSet.getSms(0); // this.sbb.startMessageDelivery(sms); // // // this.sbb.freeSmsSetFailured(smsSet, ErrorCode.ABSENT_SUBSCRIBER); // // // // boolean b1 = pers.checkSmsSetExists(ta1); // // assertFalse(b1); // // // // Sms smsx1 = pers.obtainLiveSms(sms1.getDbId()); // // Sms smsx2 = pers.obtainLiveSms(sms2.getDbId()); // // assertNull(smsx1); // // assertNull(smsx2); // // // // SmsProxy smsp1 = pers.obtainArchiveSms(sms1.getDbId()); // // SmsProxy smsp2 = pers.obtainArchiveSms(sms2.getDbId()); // // // // assertEquals(smsp1.sms.getMessageId(), 1); // // assertEquals(smsp2.sms.getMessageId(), 2); // // assertEquals(smsp1.sms.getDeliveryCount(), 1); // // assertEquals(smsp2.sms.getDeliveryCount(), 0); // // assertEquals(smsp1.smStatus, 8); // // assertEquals(smsp2.smStatus, 8); // } // // @Test(groups = { "Mt" }) // public void RescheduleSmsSetTest() throws Exception { // // if (!this.cassandraDbInited) // return; // SmscPropertiesManagement.getInstance("Test"); // // SmsSet smsSet = prepareDatabase(); // Sms sms1 = smsSet.getSms(0); // Sms sms2 = smsSet.getSms(1); // // Sms sms = smsSet.getSms(0); // this.sbb.startMessageDelivery(sms); // // // this.sbb.rescheduleSmsSet(smsSet, ErrorCode.ABSENT_SUBSCRIBER, true); // // // // boolean b1 = pers.checkSmsSetExists(ta1); // // assertTrue(b1); // // // // SmsSet smsSetx = pers.obtainSmsSet(ta1); // // assertEquals(smsSetx.getInSystem(), 1); // // assertEquals(smsSetx.getDueDelay(), 300); // // assertEquals(smsSetx.getStatus().getCode(), 8); // // assertTrue(smsSetx.isAlertingSupported()); // // // // this.sbb.rescheduleSmsSet(smsSet, ErrorCode.ABSENT_SUBSCRIBER, // // false); // // // // b1 = pers.checkSmsSetExists(ta1); // // assertTrue(b1); // // // // smsSetx = pers.obtainSmsSet(ta1); // // assertEquals(smsSetx.getInSystem(), 1); // // assertEquals(smsSetx.getDueDelay(), 600); // // assertEquals(smsSetx.getStatus().getCode(), 8); // // assertFalse(smsSetx.isAlertingSupported()); // } private SmsSet prepareDatabase() throws PersistenceException { SmsSet smsSet = createEmptySmsSet(ta1); Sms sms = this.prepareSms(smsSet, 1); this.pers.c2_scheduleMessage_ReschedDueSlot(sms, false, true); sms = this.prepareSms(smsSet, 2); this.pers.c2_scheduleMessage_ReschedDueSlot(sms, false, true); procDueSot = sms.getDueSlot(); ArrayList<SmsSet> lst1 = this.pers.c2_getRecordList(sms.getDueSlot()); ArrayList<SmsSet> lst2 = this.pers.c2_sortRecordList(lst1); SmsSet res = lst2.get(0); curDate = new Date(); return res; // SmsSet smsSet = this.pers.obtainSmsSet(ta1); // // Sms sms = this.prepareSms(smsSet, 1); // this.pers.createLiveSms(sms); // sms = this.prepareSms(smsSet, 2); // this.pers.createLiveSms(sms); // // SmsSet res = this.pers.obtainSmsSet(ta1); // this.pers.fetchSchedulableSms(res); // curDate = new Date(); // this.pers.setDeliveryStart(smsSet, curDate); // return res; } private SmsSet createEmptySmsSet(TargetAddress ta) { SmsSet smsSet = new SmsSet(); smsSet.setDestAddr(ta1.getAddr()); smsSet.setDestAddrNpi(ta1.getAddrNpi()); smsSet.setDestAddrTon(ta1.getAddrTon()); return smsSet; } private Sms prepareSms(SmsSet smsSet, int num) { Sms sms = new Sms(); sms.setStored(true); sms.setSmsSet(smsSet); sms.setDbId(UUID.randomUUID()); // sms.setDbId(id); sms.setSourceAddr("4444"); sms.setSourceAddrTon(1); sms.setSourceAddrNpi(1); sms.setMessageId(8888888 + num); sms.setMoMessageRef(102 + num); sms.setMessageId(num); sms.setOrigEsmeName("esme_1"); sms.setOrigSystemId("sys_1"); sms.setSubmitDate(new Date()); // sms.setDeliveryDate(new GregorianCalendar(2013, 1, 15, 12, 15 + // num).getTime()); // sms.setServiceType("serv_type__" + num); sms.setEsmClass(3); sms.setProtocolId(0); sms.setPriority(0); sms.setRegisteredDelivery(0); sms.setReplaceIfPresent(0); sms.setDataCoding(0); sms.setDefaultMsgId(0); sms.setShortMessage(this.msg.getBytes()); // sms.setScheduleDeliveryTime(new GregorianCalendar(2013, 1, 20, 10, 00 // + num).getTime()); // sms.setValidityPeriod(new GregorianCalendar(2013, 1, 23, 13, 33 + // num).getTime()); // short tag, byte[] value, String tagName // Tlv tlv = new Tlv((short) 5, new byte[] { (byte) (1 + num), 2, 3, 4, // 5 }); // sms.getTlvSet().addOptionalParameter(tlv); // tlv = new Tlv((short) 6, new byte[] { (byte) (6 + num), 7, 8 }); // sms.getTlvSet().addOptionalParameter(tlv); return sms; } private void assertDateEq(Date d1, Date d2) { // creating d3 = d1 + 2 min long tm = d2.getTime(); tm -= 15 * 1000; Date d3 = new Date(tm); tm = d2.getTime(); tm += 15 * 1000; Date d4 = new Date(tm); assertTrue(d1.after(d3)); assertTrue(d1.before(d4)); } }