/*
* 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.protocols.ss7.m3ua.impl.oam;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import io.netty.buffer.ByteBufAllocator;
import java.util.List;
import java.util.Map;
import javolution.util.FastMap;
import org.mobicents.protocols.api.Association;
import org.mobicents.protocols.api.AssociationListener;
import org.mobicents.protocols.api.AssociationType;
import org.mobicents.protocols.api.CongestionListener;
import org.mobicents.protocols.api.IpChannelType;
import org.mobicents.protocols.api.Management;
import org.mobicents.protocols.api.ManagementEventListener;
import org.mobicents.protocols.api.PayloadData;
import org.mobicents.protocols.api.Server;
import org.mobicents.protocols.api.ServerListener;
import org.mobicents.protocols.ss7.m3ua.Util;
import org.mobicents.protocols.ss7.m3ua.impl.M3UAManagementImpl;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
*
* @author amit bhayani
*
*/
public class M3UAShellExecutorTest {
M3UAShellExecutor m3uaExec = null;
private TransportManagement transportManagement = null;
M3UAManagementImpl clientM3UAMgmt = null;
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@BeforeMethod
public void setUp() throws Exception {
m3uaExec = new M3UAShellExecutor();
this.transportManagement = new TransportManagement();
this.transportManagement.setPersistDir(Util.getTmpTestDir());
this.clientM3UAMgmt = new M3UAManagementImpl("M3UAShellExecutorTest", null);
this.clientM3UAMgmt.setTransportManagement(this.transportManagement);
this.clientM3UAMgmt.setPersistDir(Util.getTmpTestDir());
this.clientM3UAMgmt.start();
}
@AfterMethod
public void tearDown() throws Exception {
// Clean up
clientM3UAMgmt.removeAllResourses();
clientM3UAMgmt.stop();
}
@Test
public void testServerCommands() throws Exception {
FastMap<String, M3UAManagementImpl> m3uaManagements = new FastMap<String, M3UAManagementImpl>();
m3uaManagements.put(clientM3UAMgmt.getName(), clientM3UAMgmt);
m3uaExec.setM3uaManagements(m3uaManagements);
Association sctpAssociation = this.transportManagement.addAssociation(null, 0, null, 0, "testAssoc1");
Association sctpAssociation2 = this.transportManagement.addAssociation(null, 0, null, 0, "testAssoc2");
String result = m3uaExec.execute("m3ua as show stackname M3UAShellExecutorTest".split(" "));
assertEquals(result, String.format(M3UAOAMMessages.NO_AS_DEFINED_YET, this.clientM3UAMgmt.getName()));
result = m3uaExec.execute("m3ua asp show stackname M3UAShellExecutorTest".split(" "));
assertEquals(result, String.format(M3UAOAMMessages.NO_ASP_DEFINED_YET, this.clientM3UAMgmt.getName()));
// Test creating new AS testas
result = m3uaExec.execute("m3ua as create testas AS mode SE rc 100 traffic-mode loadshare".split(" "));
assertEquals(result, String.format(M3UAOAMMessages.CREATE_AS_SUCESSFULL, "testas", this.clientM3UAMgmt.getName()));
// Try adding same again
result = m3uaExec.execute("m3ua as create testas AS mode SE rc 100 traffic-mode loadshare".split(" "));
assertEquals(String.format(M3UAOAMMessages.CREATE_AS_FAIL_NAME_EXIST, "testas"), result);
// Create AS with only mandatory params
result = m3uaExec.execute("m3ua as create testas1 AS".split(" "));
assertEquals(String.format(M3UAOAMMessages.CREATE_AS_SUCESSFULL, "testas1", this.clientM3UAMgmt.getName()), result);
// Create AS with all params
result = m3uaExec
.execute("m3ua as create testas2 AS mode DE ipspType CLIENT rc 100 traffic-mode loadshare network-appearance 12"
.split(" "));
assertEquals(String.format(M3UAOAMMessages.CREATE_AS_SUCESSFULL, "testas2", this.clientM3UAMgmt.getName()), result);
// Create AS of type IPSP
result = m3uaExec.execute("m3ua as create MTUAS IPSP mode DE ipspType server rc 1 traffic-mode loadshare".split(" "));
assertEquals(String.format(M3UAOAMMessages.CREATE_AS_SUCESSFULL, "MTUAS", this.clientM3UAMgmt.getName()), result);
// create ASP with only mandatory params
result = m3uaExec.execute("m3ua asp create testasp1 testAssoc1".split(" "));
assertEquals(String.format(M3UAOAMMessages.CREATE_ASP_SUCESSFULL, "testasp1", this.clientM3UAMgmt.getName()), result);
// create ASP with all params but with same aspid
result = m3uaExec.execute("m3ua asp create testasp2 testAssoc2 aspid 2".split(" "));
assertEquals(result, String.format(M3UAOAMMessages.ASP_ID_TAKEN, 2));
// create ASP with all params but with unique aspid
result = m3uaExec.execute("m3ua asp create testasp2 testAssoc2 aspid 3".split(" "));
assertEquals(result, String.format(M3UAOAMMessages.CREATE_ASP_SUCESSFULL, "testasp2", this.clientM3UAMgmt.getName()));
// Error for same name
result = m3uaExec.execute("m3ua asp create testasp1 testAssoc1".split(" "));
assertEquals(String.format(M3UAOAMMessages.CREATE_ASP_FAIL_NAME_EXIST, "testasp1"), result);
// Error : Try to start Asp without assiging to any As
result = m3uaExec.execute("m3ua asp start testasp1".split(" "));
assertEquals(String.format(M3UAOAMMessages.ASP_NOT_ASSIGNED_TO_AS, "testasp1"), result);
// assign ASP to AS
result = m3uaExec.execute("m3ua as add testas testasp1".split(" "));
assertEquals(
String.format(M3UAOAMMessages.ADD_ASP_TO_AS_SUCESSFULL, "testasp1", "testas", this.clientM3UAMgmt.getName()),
result);
// add again
result = m3uaExec.execute("m3ua as add testas testasp1".split(" "));
assertEquals(String.format(M3UAOAMMessages.ADD_ASP_TO_AS_FAIL_ALREADY_ASSIGNED_TO_THIS_AS, "testasp1", "testas"),
result);
// Test Routes
result = m3uaExec.execute("m3ua route add testas 2 -1 -1".split(" "));
assertEquals(
String.format(M3UAOAMMessages.ADD_ROUTE_AS_FOR_DPC_SUCCESSFULL, "testas", 2, this.clientM3UAMgmt.getName()),
result);
// Start Asp
result = m3uaExec.execute("m3ua asp start testasp1".split(" "));
assertEquals(String.format(M3UAOAMMessages.ASP_START_SUCESSFULL, "testasp1", this.clientM3UAMgmt.getName()), result);
assertTrue(sctpAssociation.isStarted());
// manually make Association up
((TestAssociation) sctpAssociation).signalCommUp();
// Error : starting Asp again
result = m3uaExec.execute("m3ua asp start testasp1".split(" "));
assertEquals(String.format(M3UAOAMMessages.ASP_ALREADY_STARTED, "testasp1"), result);
// Stop Asp
result = m3uaExec.execute("m3ua asp stop testasp1".split(" "));
assertEquals(String.format(M3UAOAMMessages.ASP_STOP_SUCESSFULL, "testasp1", this.clientM3UAMgmt.getName()), result);
// Lets wait for 3 seconds so underlying transport is killed
Thread.sleep(3500);
assertTrue(!sctpAssociation.isStarted());
// manually bring down
((TestAssociation) sctpAssociation).signalCommLost();
// Remove Asp
result = m3uaExec.execute("m3ua as remove testas testasp1".split(" "));
assertEquals(
result,
String.format(M3UAOAMMessages.REMOVE_ASP_FROM_AS_SUCESSFULL, "testasp1", "testas",
this.clientM3UAMgmt.getName()));
// Destroy Asp
result = m3uaExec.execute("m3ua asp destroy testasp1".split(" "));
assertEquals(result, String.format(M3UAOAMMessages.DESTROY_ASP_SUCESSFULL, "testasp1", this.clientM3UAMgmt.getName()));
// Error : Destroy As
result = m3uaExec.execute("m3ua as destroy testas".split(" "));
assertEquals(result, String.format(M3UAOAMMessages.AS_USED_IN_ROUTE_ERROR, "testas", "2:-1:-1"));
// Remove route
result = m3uaExec.execute("m3ua route remove testas 2 -1 -1".split(" "));
assertEquals(
String.format(M3UAOAMMessages.REMOVE_AS_ROUTE_FOR_DPC_SUCCESSFULL, "testas", 2, this.clientM3UAMgmt.getName()),
result);
// Destroy As
result = m3uaExec.execute("m3ua as destroy testas".split(" "));
assertEquals(result, String.format(M3UAOAMMessages.DESTROY_AS_SUCESSFULL, "testas", this.clientM3UAMgmt.getName()));
}
class TestAssociation implements Association {
// Is the Association been started by management?
private volatile boolean started = false;
// Is the Association up (connection is established)
protected volatile boolean up = false;
private AssociationListener associationListener = null;
private String name = null;
TestAssociation(String name) {
this.name = name;
}
@Override
public AssociationListener getAssociationListener() {
return this.associationListener;
}
@Override
public String getHostAddress() {
return null;
}
@Override
public int getHostPort() {
return 0;
}
@Override
public String getName() {
return this.name;
}
@Override
public String getPeerAddress() {
return null;
}
@Override
public int getPeerPort() {
return 0;
}
@Override
public String getServerName() {
return null;
}
@Override
public boolean isStarted() {
return this.started;
}
@Override
public void send(PayloadData payloadData) throws Exception {
}
@Override
public void setAssociationListener(AssociationListener associationListener) {
this.associationListener = associationListener;
}
public void signalCommUp() {
this.up = true;
this.associationListener.onCommunicationUp(this, 1, 1);
}
public void signalCommLost() {
this.up = false;
this.associationListener.onCommunicationLost(this);
}
@Override
public IpChannelType getIpChannelType() {
// TODO Auto-generated method stub
return null;
}
@Override
public AssociationType getAssociationType() {
// TODO Auto-generated method stub
return null;
}
@Override
public String[] getExtraHostAddresses() {
// TODO Auto-generated method stub
return null;
}
/*
* (non-Javadoc)
*
* @see org.mobicents.protocols.api.Association#isConnected()
*/
@Override
public boolean isConnected() {
return started && up;
}
protected void start() {
this.started = true;
}
protected void stop() {
this.started = false;
}
@Override
public void acceptAnonymousAssociation(AssociationListener arg0) throws Exception {
// TODO Auto-generated method stub
}
@Override
public void rejectAnonymousAssociation() {
// TODO Auto-generated method stub
}
@Override
public void stopAnonymousAssociation() throws Exception {
// TODO Auto-generated method stub
}
@Override
public boolean isUp() {
// TODO Auto-generated method stub
return false;
}
@Override
public ByteBufAllocator getByteBufAllocator() throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public int getCongestionLevel() {
// TODO Auto-generated method stub
return 0;
}
}
class TransportManagement implements Management {
private FastMap<String, Association> associations = new FastMap<String, Association>();
@Override
public Association addAssociation(String hostAddress, int hostPort, String peerAddress, int peerPort, String assocName)
throws Exception {
TestAssociation testAssociation = new TestAssociation(assocName);
this.associations.put(assocName, testAssociation);
return testAssociation;
}
@Override
public Server addServer(String serverName, String hostAddress, int port) throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public Association addServerAssociation(String peerAddress, int peerPort, String serverName, String assocName)
throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public Association getAssociation(String assocName) throws Exception {
return this.associations.get(assocName);
}
@Override
public Map<String, Association> getAssociations() {
return associations.unmodifiable();
}
@Override
public int getConnectDelay() {
return 0;
}
@Override
public String getName() {
return null;
}
@Override
public List<Server> getServers() {
return null;
}
@Override
public int getWorkerThreads() {
return 0;
}
@Override
public boolean isSingleThread() {
return false;
}
@Override
public void removeAssociation(String assocName) throws Exception {
}
@Override
public void removeServer(String serverName) throws Exception {
}
@Override
public void setConnectDelay(int connectDelay) {
}
@Override
public void setSingleThread(boolean arg0) {
// TODO Auto-generated method stub
}
@Override
public void setWorkerThreads(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void start() throws Exception {
// TODO Auto-generated method stub
}
@Override
public void startAssociation(String assocName) throws Exception {
Association association = this.associations.get(assocName);
if (association != null) {
((TestAssociation) association).start();
}
}
@Override
public void startServer(String arg0) throws Exception {
// TODO Auto-generated method stub
}
@Override
public void stop() throws Exception {
}
@Override
public void stopAssociation(String assocName) throws Exception {
Association association = this.associations.get(assocName);
if (association != null) {
((TestAssociation) association).stop();
}
}
@Override
public void stopServer(String arg0) throws Exception {
// TODO Auto-generated method stub
}
@Override
public String getPersistDir() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setPersistDir(String arg0) {
// TODO Auto-generated method stub
}
@Override
public Association addAssociation(String arg0, int arg1, String arg2, int arg3, String arg4, IpChannelType arg5,
String[] extraHostAddresses) throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public Server addServer(String arg0, String arg1, int arg2, IpChannelType arg3, String[] extraHostAddresses)
throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public Association addServerAssociation(String arg0, int arg1, String arg2, String arg3, IpChannelType arg4)
throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public void removeAllResourses() throws Exception {
// TODO Auto-generated method stub
}
@Override
public void addManagementEventListener(ManagementEventListener arg0) {
// TODO Auto-generated method stub
}
@Override
public Server addServer(String arg0, String arg1, int arg2, IpChannelType arg3, boolean arg4, int arg5, String[] arg6)
throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public ServerListener getServerListener() {
// TODO Auto-generated method stub
return null;
}
@Override
public void removeManagementEventListener(ManagementEventListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void setServerListener(ServerListener arg0) {
// TODO Auto-generated method stub
}
/*
* (non-Javadoc)
*
* @see org.mobicents.protocols.api.Management#isStarted()
*/
@Override
public boolean isStarted() {
// TODO Auto-generated method stub
return false;
}
@Override
public double getCongControl_BackToNormalDelayThreshold_1() {
// TODO Auto-generated method stub
return 0;
}
@Override
public double getCongControl_BackToNormalDelayThreshold_2() {
// TODO Auto-generated method stub
return 0;
}
@Override
public double getCongControl_BackToNormalDelayThreshold_3() {
// TODO Auto-generated method stub
return 0;
}
@Override
public double getCongControl_DelayThreshold_1() {
// TODO Auto-generated method stub
return 0;
}
@Override
public double getCongControl_DelayThreshold_2() {
// TODO Auto-generated method stub
return 0;
}
@Override
public double getCongControl_DelayThreshold_3() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void setCongControl_BackToNormalDelayThreshold_1(double arg0) throws Exception {
// TODO Auto-generated method stub
}
@Override
public void setCongControl_BackToNormalDelayThreshold_2(double arg0) throws Exception {
// TODO Auto-generated method stub
}
@Override
public void setCongControl_BackToNormalDelayThreshold_3(double arg0) throws Exception {
// TODO Auto-generated method stub
}
@Override
public void setCongControl_DelayThreshold_1(double arg0) throws Exception {
// TODO Auto-generated method stub
}
@Override
public void setCongControl_DelayThreshold_2(double arg0) throws Exception {
// TODO Auto-generated method stub
}
@Override
public void setCongControl_DelayThreshold_3(double arg0) throws Exception {
// TODO Auto-generated method stub
}
@Override
public Boolean getOptionSctpDisableFragments() {
// TODO Auto-generated method stub
return null;
}
@Override
public Integer getOptionSctpFragmentInterleave() {
// TODO Auto-generated method stub
return null;
}
@Override
public Boolean getOptionSctpNodelay() {
// TODO Auto-generated method stub
return null;
}
@Override
public Integer getOptionSoLinger() {
// TODO Auto-generated method stub
return null;
}
@Override
public Integer getOptionSoRcvbuf() {
// TODO Auto-generated method stub
return null;
}
@Override
public Integer getOptionSoSndbuf() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setOptionSctpDisableFragments(Boolean arg0) {
// TODO Auto-generated method stub
}
@Override
public void setOptionSctpFragmentInterleave(Integer arg0) {
// TODO Auto-generated method stub
}
@Override
public void setOptionSctpNodelay(Boolean arg0) {
// TODO Auto-generated method stub
}
@Override
public void setOptionSoLinger(Integer arg0) {
// TODO Auto-generated method stub
}
@Override
public void setOptionSoRcvbuf(Integer arg0) {
// TODO Auto-generated method stub
}
@Override
public void setOptionSoSndbuf(Integer arg0) {
// TODO Auto-generated method stub
}
@Override
public Integer getOptionSctpInitMaxstreams_MaxInStreams() {
// TODO Auto-generated method stub
return null;
}
@Override
public Integer getOptionSctpInitMaxstreams_MaxOutStreams() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setOptionSctpInitMaxstreams_MaxInStreams(Integer arg0) {
// TODO Auto-generated method stub
}
@Override
public void setOptionSctpInitMaxstreams_MaxOutStreams(Integer arg0) {
// TODO Auto-generated method stub
}
@Override
public void addCongestionListener(CongestionListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void removeCongestionListener(CongestionListener arg0) {
// TODO Auto-generated method stub
}
@Override
public int getBufferSize() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void setBufferSize(int arg0) throws Exception {
// TODO Auto-generated method stub
}
}
}