/*
* TeleStax, Open Source Cloud Communications
* Copyright 2012, Telestax Inc 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.protocols.ss7.isup.impl.stack.timers;
import java.util.ArrayList;
import java.util.List;
import org.mobicents.protocols.ss7.isup.ISUPEvent;
import org.mobicents.protocols.ss7.isup.ISUPTimeoutEvent;
import org.mobicents.protocols.ss7.isup.message.ISUPMessage;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
/**
* @author baranowb
*
*/
public abstract class SingleTimers extends EventTestHarness {
protected int tid;
protected long timeout;
protected ISUPMessage request; // message exchanged within
protected ISUPMessage answer;
@BeforeClass
public void setUp() throws Exception {
super.setUp();
this.tid = getT_ID();
this.timeout = getT();
this.request = getRequest();
this.answer = getAnswer();
}
@AfterClass
public void tearDown() throws Exception {
super.provider.removeListener(this);
super.tearDown();
}
protected abstract long getT();
// IDS
protected abstract int getT_ID();
protected ISUPMessage getAfterTRequest() {
return this.provider.getMessageFactory().createREL(getRequest().getCircuitIdentificationCode().getCIC());
}
// @Test(groups = { "functional.timer","timer.timeout.timeout"})
public void testWithTimeout() throws Exception {
// add expected events on remote and local end
List<EventReceived> expectedRemoteEventsReceived = new ArrayList<EventReceived>();
List<EventReceived> expectedLocalEvents = new ArrayList<EventReceived>();
long startTStamp = System.currentTimeMillis();
super.provider.sendMessage(this.request, dpc);
MessageEventReceived eventReceived = new MessageEventReceived(startTStamp, new ISUPEvent(super.provider, this.request,
dpc));
expectedRemoteEventsReceived.add(eventReceived);
ISUPMessage afterTimeoutMessage = getAfterTRequest();
if (afterTimeoutMessage != null) {
eventReceived = new MessageEventReceived(startTStamp + getT(), new ISUPEvent(super.provider, afterTimeoutMessage,
dpc));
expectedRemoteEventsReceived.add(eventReceived);
}
ISUPTimeoutEvent timeoutEvent = new ISUPTimeoutEvent(super.provider, this.request, tid, dpc);
TimeoutEventReceived ter = new TimeoutEventReceived(startTStamp + timeout, timeoutEvent);
expectedLocalEvents.add(ter);
doWait(timeout + 1000);
// stop stack
stack.stop();
// now make compare
super.compareEvents(expectedLocalEvents, expectedRemoteEventsReceived);
}
// @Test(groups = { "functional.timer","timer.timeout.wotimeout"})
public void testWithoutTimeout() throws Exception {
// add expected events on remote and local end
List<EventReceived> expectedRemoteEventsReceived = new ArrayList<EventReceived>();
List<EventReceived> expectedLocalEvents = new ArrayList<EventReceived>();
long startTStamp = System.currentTimeMillis();
this.provider.sendMessage(this.request, dpc);
MessageEventReceived eventReceived = new MessageEventReceived(startTStamp, new ISUPEvent(super.provider, this.request,
dpc));
expectedRemoteEventsReceived.add(eventReceived);
doWait(timeout / 2); // 500 should be good even here.
long tstamp = System.currentTimeMillis();
doAnswer();
ISUPEvent event = new ISUPEvent(super.provider, this.answer, dpc);
eventReceived = new MessageEventReceived(tstamp, event);
expectedLocalEvents.add(eventReceived);
doWait(timeout); // wait more
stack.stop();
// now make compare
super.compareEvents(expectedLocalEvents, expectedRemoteEventsReceived);
}
}