/*
* Mobicents, Communications Middleware
*
* Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors. All third-party contributions are
* distributed under license by Red Hat Middleware LLC.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program 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 distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
*
* Boston, MA 02110-1301 USA
*/
package org.mobicents.slee.resources.diameter.tests.factories;
import static org.jdiameter.client.impl.helpers.Parameters.AcctApplId;
import static org.jdiameter.client.impl.helpers.Parameters.ApplicationId;
import static org.jdiameter.client.impl.helpers.Parameters.Assembler;
import static org.jdiameter.client.impl.helpers.Parameters.AuthApplId;
import static org.jdiameter.client.impl.helpers.Parameters.OwnDiameterURI;
import static org.jdiameter.client.impl.helpers.Parameters.OwnRealm;
import static org.jdiameter.client.impl.helpers.Parameters.OwnVendorID;
import static org.jdiameter.client.impl.helpers.Parameters.PeerName;
import static org.jdiameter.client.impl.helpers.Parameters.PeerRating;
import static org.jdiameter.client.impl.helpers.Parameters.PeerTable;
import static org.jdiameter.client.impl.helpers.Parameters.RealmEntry;
import static org.jdiameter.client.impl.helpers.Parameters.RealmTable;
import static org.jdiameter.client.impl.helpers.Parameters.VendorId;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import net.java.slee.resource.diameter.base.events.AbortSessionAnswer;
import net.java.slee.resource.diameter.base.events.AbortSessionRequest;
import net.java.slee.resource.diameter.base.events.AccountingAnswer;
import net.java.slee.resource.diameter.base.events.AccountingRequest;
import net.java.slee.resource.diameter.base.events.CapabilitiesExchangeAnswer;
import net.java.slee.resource.diameter.base.events.CapabilitiesExchangeRequest;
import net.java.slee.resource.diameter.base.events.DeviceWatchdogAnswer;
import net.java.slee.resource.diameter.base.events.DeviceWatchdogRequest;
import net.java.slee.resource.diameter.base.events.DisconnectPeerAnswer;
import net.java.slee.resource.diameter.base.events.DisconnectPeerRequest;
import net.java.slee.resource.diameter.base.events.ReAuthAnswer;
import net.java.slee.resource.diameter.base.events.ReAuthRequest;
import net.java.slee.resource.diameter.base.events.SessionTerminationAnswer;
import net.java.slee.resource.diameter.base.events.SessionTerminationRequest;
import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity;
import net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp;
import net.java.slee.resource.diameter.base.events.avp.ProxyInfoAvp;
import net.java.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvp;
import org.jdiameter.api.Stack;
import org.jdiameter.client.impl.helpers.EmptyConfiguration;
import org.junit.Assert;
import org.junit.Test;
import org.mobicents.diameter.dictionary.AvpDictionary;
import org.mobicents.slee.resource.diameter.base.DiameterAvpFactoryImpl;
import org.mobicents.slee.resource.diameter.base.DiameterMessageFactoryImpl;
/**
*
* <br>Project: mobicents-diameter-server
* <br>3:37:56 PM Jun 1, 2009
* <br>
*
* BaseFactoriesTest.java
*
* @author <a href="mailto:brainslog@gmail.com"> Alexandre Mendonca </a>
* @author <a href="mailto:baranowb@gmail.com"> Bartosz Baranowski </a>
*/
public class BaseFactoriesTest {
private static String clientHost = "127.0.0.1";
private static String clientPort = "21812";
private static String clientURI = "aaa://" + clientHost + ":" + clientPort;
private static String serverHost = "localhost";
private static String serverPort = "1812";
private static String serverURI = "aaa://" + serverHost + ":" + serverPort;
private static String realmName = "mobicents.org";
private static DiameterMessageFactoryImpl messageFactory;
private static DiameterAvpFactoryImpl avpFactory;
static
{
Stack stack = new org.jdiameter.client.impl.StackImpl();
try
{
stack.init(new MyConfiguration());
AvpDictionary.INSTANCE.parseDictionary( ShClientFactoriesTest.class.getClassLoader().getResourceAsStream( "dictionary.xml" ) );
}
catch ( Exception e )
{
throw new RuntimeException("");
}
messageFactory = new DiameterMessageFactoryImpl(stack);
avpFactory = new DiameterAvpFactoryImpl();
}
@Test
public void isRequestASR() throws Exception
{
AbortSessionRequest asr = messageFactory.createAbortSessionRequest();
assertTrue("Request Flag in Abort-Session-Request is not set.", asr.getHeader().isRequest());
}
@Test
public void testGettersAndSettersASR() throws Exception
{
AbortSessionRequest asr = messageFactory.createAbortSessionRequest();
int nFailures = AvpAssistant.testMethods(asr, AbortSessionRequest.class);
assertTrue("Some methods have failed. See logs for more details.", nFailures == 0);
}
@Test
public void isAnswerASA() throws Exception
{
AbortSessionAnswer asa = messageFactory.createAbortSessionAnswer(messageFactory.createAbortSessionRequest());
assertFalse("Request Flag in Abort-Session-Answer is set.", asa.getHeader().isRequest());
}
@Test
public void testGettersAndSettersASA() throws Exception
{
AbortSessionAnswer asa = messageFactory.createAbortSessionAnswer(messageFactory.createAbortSessionRequest());
int nFailures = AvpAssistant.testMethods(asa, AbortSessionAnswer.class);
assertTrue("Some methods have failed. See logs for more details.", nFailures == 0);
}
@Test
public void hasDestinationHostASA() throws Exception
{
AbortSessionAnswer asa = messageFactory.createAbortSessionAnswer(messageFactory.createAbortSessionRequest());
assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", asa.getDestinationHost());
}
@Test
public void hasDestinationRealmASA() throws Exception
{
AbortSessionAnswer asa = messageFactory.createAbortSessionAnswer(messageFactory.createAbortSessionRequest());
assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", asa.getDestinationRealm());
}
@Test
public void isRequestACR() throws Exception
{
AccountingRequest acr = messageFactory.createAccountingRequest();
assertTrue("Request Flag in Accounting-Request is not set.", acr.getHeader().isRequest());
}
@Test
public void testGettersAndSettersACR() throws Exception
{
AccountingRequest acr = messageFactory.createAccountingRequest();
int nFailures = AvpAssistant.testMethods(acr, AccountingRequest.class);
assertTrue("Some methods have failed. See logs for more details.", nFailures == 0);
}
@Test
public void isAnswerACA() throws Exception
{
AccountingAnswer aca = messageFactory.createAccountingAnswer(messageFactory.createAccountingRequest());
assertFalse("Request Flag in Abort-Session-Answer is set.", aca.getHeader().isRequest());
}
@Test
public void testGettersAndSettersACA() throws Exception
{
AccountingAnswer aca = messageFactory.createAccountingAnswer(messageFactory.createAccountingRequest());
int nFailures = AvpAssistant.testMethods(aca, AccountingAnswer.class);
assertTrue("Some methods have failed. See logs for more details.", nFailures == 0);
}
@Test
public void hasDestinationHostACA() throws Exception
{
AccountingAnswer aca = messageFactory.createAccountingAnswer(messageFactory.createAccountingRequest());
assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", aca.getDestinationHost());
}
@Test
public void hasDestinationRealmACA() throws Exception
{
AccountingAnswer aca = messageFactory.createAccountingAnswer(messageFactory.createAccountingRequest());
assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", aca.getDestinationRealm());
}
@Test
public void isRequestCER() throws Exception
{
CapabilitiesExchangeRequest cer = messageFactory.createCapabilitiesExchangeRequest();
assertTrue("Request Flag in Capabilities-Exchange-Request is not set.", cer.getHeader().isRequest());
}
@Test
public void testGettersAndSettersCER() throws Exception
{
CapabilitiesExchangeRequest cer = messageFactory.createCapabilitiesExchangeRequest();
int nFailures = AvpAssistant.testMethods(cer, CapabilitiesExchangeRequest.class);
assertTrue("Some methods have failed. See logs for more details.", nFailures == 0);
}
@Test
public void isAnswerCEA() throws Exception
{
CapabilitiesExchangeAnswer cea = messageFactory.createCapabilitiesExchangeAnswer(messageFactory.createCapabilitiesExchangeRequest());
assertFalse("Request Flag in Capabilities-Exchange-Answer is set.", cea.getHeader().isRequest());
}
@Test
public void testGettersAndSettersCEA() throws Exception
{
CapabilitiesExchangeAnswer cea = messageFactory.createCapabilitiesExchangeAnswer(messageFactory.createCapabilitiesExchangeRequest());
int nFailures = AvpAssistant.testMethods(cea, CapabilitiesExchangeAnswer.class);
assertTrue("Some methods have failed. See logs for more details.", nFailures == 0);
}
@Test
public void hasDestinationHostCEA() throws Exception
{
CapabilitiesExchangeAnswer cea = messageFactory.createCapabilitiesExchangeAnswer(messageFactory.createCapabilitiesExchangeRequest());
assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", cea.getDestinationHost());
}
@Test
public void hasDestinationRealmCEA() throws Exception
{
CapabilitiesExchangeAnswer cea = messageFactory.createCapabilitiesExchangeAnswer(messageFactory.createCapabilitiesExchangeRequest());
assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", cea.getDestinationRealm());
}
@Test
public void isRequestDWR() throws Exception
{
DeviceWatchdogRequest dwr = messageFactory.createDeviceWatchdogRequest();
assertTrue("Request Flag in Device-Watchdog-Request is not set.", dwr.getHeader().isRequest());
}
@Test
public void testGettersAndSettersDWR() throws Exception
{
DeviceWatchdogRequest dwr = messageFactory.createDeviceWatchdogRequest();
int nFailures = AvpAssistant.testMethods(dwr, DeviceWatchdogRequest.class);
assertTrue("Some methods have failed. See logs for more details.", nFailures == 0);
}
@Test
public void isAnswerDWA() throws Exception
{
DeviceWatchdogAnswer dwa = messageFactory.createDeviceWatchdogAnswer(messageFactory.createDeviceWatchdogRequest());
assertFalse("Request Flag in Device-Watchdog-Answer is set.", dwa.getHeader().isRequest());
}
@Test
public void testGettersAndSettersDWA() throws Exception
{
DeviceWatchdogAnswer dwa = messageFactory.createDeviceWatchdogAnswer(messageFactory.createDeviceWatchdogRequest());
int nFailures = AvpAssistant.testMethods(dwa, DeviceWatchdogAnswer.class);
assertTrue("Some methods have failed. See logs for more details.", nFailures == 0);
}
@Test
public void hasDestinationHostDWA() throws Exception
{
DeviceWatchdogAnswer dwa = messageFactory.createDeviceWatchdogAnswer(messageFactory.createDeviceWatchdogRequest());
assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", dwa.getDestinationHost());
}
@Test
public void hasDestinationRealmDWA() throws Exception
{
DeviceWatchdogAnswer dwa = messageFactory.createDeviceWatchdogAnswer(messageFactory.createDeviceWatchdogRequest());
assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", dwa.getDestinationRealm());
}
@Test
public void isRequestDPR() throws Exception
{
DisconnectPeerRequest dpr = messageFactory.createDisconnectPeerRequest();
assertTrue("Request Flag in Disconnect-Peer-Request is not set.", dpr.getHeader().isRequest());
}
@Test
public void testGettersAndSettersDPR() throws Exception
{
DisconnectPeerRequest dpr = messageFactory.createDisconnectPeerRequest();
int nFailures = AvpAssistant.testMethods(dpr, DisconnectPeerRequest.class);
assertTrue("Some methods have failed. See logs for more details.", nFailures == 0);
}
@Test
public void isAnswerDPA() throws Exception
{
DisconnectPeerAnswer dpa = messageFactory.createDisconnectPeerAnswer(messageFactory.createDisconnectPeerRequest());
assertFalse("Request Flag in Disconnect-Peer-Answer is set.", dpa.getHeader().isRequest());
}
@Test
public void testGettersAndSettersDPA() throws Exception
{
DisconnectPeerAnswer dpa = messageFactory.createDisconnectPeerAnswer(messageFactory.createDisconnectPeerRequest());
int nFailures = AvpAssistant.testMethods(dpa, DisconnectPeerAnswer.class);
assertTrue("Some methods have failed. See logs for more details.", nFailures == 0);
}
@Test
public void hasDestinationHostDPA() throws Exception
{
DisconnectPeerAnswer dpa = messageFactory.createDisconnectPeerAnswer(messageFactory.createDisconnectPeerRequest());
assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", dpa.getDestinationHost());
}
@Test
public void hasDestinationRealmDPA() throws Exception
{
DisconnectPeerAnswer dpa = messageFactory.createDisconnectPeerAnswer(messageFactory.createDisconnectPeerRequest());
assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", dpa.getDestinationRealm());
}
@Test
public void isRequestRAR() throws Exception
{
ReAuthRequest rar = messageFactory.createReAuthRequest();
assertTrue("Request Flag in Disconnect-Peer-Request is not set.", rar.getHeader().isRequest());
}
@Test
public void testGettersAndSettersRAR() throws Exception
{
ReAuthRequest rar = messageFactory.createReAuthRequest();
int nFailures = AvpAssistant.testMethods(rar, ReAuthRequest.class);
assertTrue("Some methods have failed. See logs for more details.", nFailures == 0);
}
@Test
public void isAnswerRAA() throws Exception
{
ReAuthAnswer raa = messageFactory.createReAuthAnswer(messageFactory.createReAuthRequest());
assertFalse("Request Flag in Disconnect-Peer-Answer is set.", raa.getHeader().isRequest());
}
@Test
public void testGettersAndSettersRAA() throws Exception
{
ReAuthAnswer raa = messageFactory.createReAuthAnswer(messageFactory.createReAuthRequest());
int nFailures = AvpAssistant.testMethods(raa, ReAuthAnswer.class);
assertTrue("Some methods have failed. See logs for more details.", nFailures == 0);
}
@Test
public void hasDestinationHostRAA() throws Exception
{
ReAuthAnswer raa = messageFactory.createReAuthAnswer(messageFactory.createReAuthRequest());
assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", raa.getDestinationHost());
}
@Test
public void hasDestinationRealmRAA() throws Exception
{
ReAuthAnswer raa = messageFactory.createReAuthAnswer(messageFactory.createReAuthRequest());
assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", raa.getDestinationRealm());
}
@Test
public void isRequestSTR() throws Exception
{
SessionTerminationRequest str = messageFactory.createSessionTerminationRequest();
assertTrue("Request Flag in Disconnect-Peer-Request is not set.", str.getHeader().isRequest());
}
@Test
public void testGettersAndSettersSTR() throws Exception
{
SessionTerminationRequest str = messageFactory.createSessionTerminationRequest();
int nFailures = AvpAssistant.testMethods(str, SessionTerminationRequest.class);
assertTrue("Some methods have failed. See logs for more details.", nFailures == 0);
}
@Test
public void isAnswerSTA() throws Exception
{
SessionTerminationAnswer sta = messageFactory.createSessionTerminationAnswer(messageFactory.createSessionTerminationRequest());
assertFalse("Request Flag in Disconnect-Peer-Answer is set.", sta.getHeader().isRequest());
}
@Test
public void testGettersAndSettersSTA() throws Exception
{
SessionTerminationAnswer str = messageFactory.createSessionTerminationAnswer(messageFactory.createSessionTerminationRequest());
int nFailures = AvpAssistant.testMethods(str, SessionTerminationAnswer.class);
assertTrue("Some methods have failed. See logs for more details.", nFailures == 0);
}
@Test
public void hasDestinationHostSTA() throws Exception
{
SessionTerminationAnswer sta = messageFactory.createSessionTerminationAnswer(messageFactory.createSessionTerminationRequest());
assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", sta.getDestinationHost());
}
@Test
public void hasDestinationRealmSTA() throws Exception
{
SessionTerminationAnswer sta = messageFactory.createSessionTerminationAnswer(messageFactory.createSessionTerminationRequest());
assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", sta.getDestinationRealm());
}
@Test
public void testAvpFactoryCreateExperimentalResult()
{
ExperimentalResultAvp erAvp1 = avpFactory.createExperimentalResult(10609L, 9999L);
Assert.assertNotNull("Created Experimental-Result AVP from objects should not be null.", erAvp1);
ExperimentalResultAvp erAvp2 = avpFactory.createExperimentalResult(erAvp1.getExtensionAvps());
Assert.assertEquals("Created Experimental-Result AVP from extension avps should be equal to original.", erAvp1, erAvp2);
ExperimentalResultAvp erAvp3 = avpFactory.createExperimentalResult(erAvp2.getVendorIdAVP(), erAvp2.getExperimentalResultCode());
Assert.assertEquals("Created Experimental-Result AVP from getters should be equal to original.", erAvp1, erAvp3);
}
@Test
public void testAvpFactoryCreateProxyInfo()
{
ProxyInfoAvp piAvp1 = avpFactory.createProxyInfo( new DiameterIdentity("diameter.mobicents.org"), "INITIALIZED".getBytes() );
Assert.assertNotNull("Created Proxy-Info AVP from objects should not be null.", piAvp1);
ProxyInfoAvp piAvp2 = avpFactory.createProxyInfo(piAvp1.getExtensionAvps());
Assert.assertEquals("Created Proxy-Info AVP from extension avps should be equal to original.", piAvp1, piAvp2);
ProxyInfoAvp piAvp3 = avpFactory.createProxyInfo(piAvp2.getProxyHost(), piAvp2.getProxyState());
Assert.assertEquals("Created Proxy-Info AVP from getters should be equal to original.", piAvp1, piAvp3);
}
@Test
public void testAvpFactoryCreateVendorSpecificApplicationId()
{
VendorSpecificApplicationIdAvp vsaidAvp1 = avpFactory.createVendorSpecificApplicationId(10609L);
Assert.assertNotNull("Created Vendor-Specific-Application-Id AVP from objects should not be null.", vsaidAvp1);
VendorSpecificApplicationIdAvp vsaidAvp2 = avpFactory.createVendorSpecificApplicationId(vsaidAvp1.getExtensionAvps());
Assert.assertEquals("Created Vendor-Specific-Application-Id AVP from extension avps should be equal to original.", vsaidAvp1, vsaidAvp2);
VendorSpecificApplicationIdAvp vsaidAvp3 = avpFactory.createVendorSpecificApplicationId(vsaidAvp2.getVendorIdsAvp()[0]);
Assert.assertEquals("Created Vendor-Specific-Application-Id AVP from getters should be equal to original.", vsaidAvp1, vsaidAvp3);
}
/**
* Class representing the Diameter Configuration
*/
public static class MyConfiguration extends EmptyConfiguration
{
public MyConfiguration()
{
super();
add(Assembler, Assembler.defValue());
add(OwnDiameterURI, clientURI);
add(OwnRealm, realmName);
add(OwnVendorID, 193L);
// Set Ericsson SDK feature
//add(UseUriAsFqdn, true);
// Set Common Applications
add(ApplicationId,
// AppId 1
getInstance().
add(VendorId, 193L).
add(AuthApplId, 0L).
add(AcctApplId, 19302L)
);
// Set peer table
add(PeerTable,
// Peer 1
getInstance().
add(PeerRating, 1).
add(PeerName, serverURI));
// Set realm table
add(RealmTable,
// Realm 1
getInstance().
add(RealmEntry, realmName + ":" + clientHost + "," + serverHost)
);
}
}
}