PageRenderTime 52ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 1ms

/servers/diameter/testsuite/tests/src/test/java/org/mobicents/slee/resources/diameter/tests/factories/BaseFactoriesTest.java

http://mobicents.googlecode.com/
Java | 848 lines | 619 code | 180 blank | 49 comment | 43 complexity | 640503be64c1795ada2f9181f1db9cdd MD5 | raw file
Possible License(s): LGPL-3.0, GPL-3.0, LGPL-2.1, GPL-2.0, CC-BY-SA-3.0, CC0-1.0, Apache-2.0, BSD-3-Clause
  1. /*
  2. * JBoss, Home of Professional Open Source
  3. * Copyright 2008-2011, Red Hat, Inc. and individual contributors
  4. * by the @authors tag. See the copyright.txt in the distribution for a
  5. * full listing of individual contributors.
  6. *
  7. * This is free software; you can redistribute it and/or modify it
  8. * under the terms of the GNU Lesser General Public License as
  9. * published by the Free Software Foundation; either version 2.1 of
  10. * the License, or (at your option) any later version.
  11. *
  12. * This software is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with this software; if not, write to the Free
  19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21. */
  22. package org.mobicents.slee.resources.diameter.tests.factories;
  23. import static org.jdiameter.client.impl.helpers.Parameters.AcctApplId;
  24. import static org.jdiameter.client.impl.helpers.Parameters.ApplicationId;
  25. import static org.jdiameter.client.impl.helpers.Parameters.Assembler;
  26. import static org.jdiameter.client.impl.helpers.Parameters.AuthApplId;
  27. import static org.jdiameter.client.impl.helpers.Parameters.OwnDiameterURI;
  28. import static org.jdiameter.client.impl.helpers.Parameters.OwnRealm;
  29. import static org.jdiameter.client.impl.helpers.Parameters.OwnVendorID;
  30. import static org.jdiameter.client.impl.helpers.Parameters.PeerName;
  31. import static org.jdiameter.client.impl.helpers.Parameters.PeerRating;
  32. import static org.jdiameter.client.impl.helpers.Parameters.PeerTable;
  33. import static org.jdiameter.client.impl.helpers.Parameters.RealmEntry;
  34. import static org.jdiameter.client.impl.helpers.Parameters.RealmTable;
  35. import static org.jdiameter.client.impl.helpers.Parameters.VendorId;
  36. import static org.jdiameter.server.impl.helpers.Parameters.RealmEntryExpTime;
  37. import static org.jdiameter.server.impl.helpers.Parameters.RealmEntryIsDynamic;
  38. import static org.jdiameter.server.impl.helpers.Parameters.RealmHosts;
  39. import static org.jdiameter.server.impl.helpers.Parameters.RealmLocalAction;
  40. import static org.jdiameter.server.impl.helpers.Parameters.RealmName;
  41. import static org.junit.Assert.*;
  42. import java.util.ArrayList;
  43. import java.util.List;
  44. import net.java.slee.resource.diameter.base.events.AbortSessionAnswer;
  45. import net.java.slee.resource.diameter.base.events.AbortSessionRequest;
  46. import net.java.slee.resource.diameter.base.events.AccountingAnswer;
  47. import net.java.slee.resource.diameter.base.events.AccountingRequest;
  48. import net.java.slee.resource.diameter.base.events.CapabilitiesExchangeAnswer;
  49. import net.java.slee.resource.diameter.base.events.CapabilitiesExchangeRequest;
  50. import net.java.slee.resource.diameter.base.events.DeviceWatchdogAnswer;
  51. import net.java.slee.resource.diameter.base.events.DeviceWatchdogRequest;
  52. import net.java.slee.resource.diameter.base.events.DiameterMessage;
  53. import net.java.slee.resource.diameter.base.events.DisconnectPeerAnswer;
  54. import net.java.slee.resource.diameter.base.events.DisconnectPeerRequest;
  55. import net.java.slee.resource.diameter.base.events.ReAuthAnswer;
  56. import net.java.slee.resource.diameter.base.events.ReAuthRequest;
  57. import net.java.slee.resource.diameter.base.events.SessionTerminationAnswer;
  58. import net.java.slee.resource.diameter.base.events.SessionTerminationRequest;
  59. import net.java.slee.resource.diameter.base.events.avp.DiameterAvp;
  60. import net.java.slee.resource.diameter.base.events.avp.DiameterAvpCodes;
  61. import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity;
  62. import net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp;
  63. import net.java.slee.resource.diameter.base.events.avp.GroupedAvp;
  64. import net.java.slee.resource.diameter.base.events.avp.ProxyInfoAvp;
  65. import net.java.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvp;
  66. import org.jdiameter.api.Avp;
  67. import org.jdiameter.api.Stack;
  68. import org.jdiameter.client.impl.helpers.EmptyConfiguration;
  69. import org.junit.Assert;
  70. import org.junit.Test;
  71. import org.mobicents.diameter.dictionary.AvpDictionary;
  72. import org.mobicents.slee.resource.diameter.base.DiameterAvpFactoryImpl;
  73. import org.mobicents.slee.resource.diameter.base.DiameterMessageFactoryImpl;
  74. import org.mobicents.slee.resource.diameter.base.events.DiameterMessageImpl;
  75. /**
  76. * Test class for JAIN SLEE Diameter Base RA Message and AVP Factories
  77. *
  78. * @author <a href="mailto:brainslog@gmail.com"> Alexandre Mendonca </a>
  79. * @author <a href="mailto:baranowb@gmail.com"> Bartosz Baranowski </a>
  80. */
  81. public class BaseFactoriesTest {
  82. public static final int NO_APP_ID_AVPS = 0;
  83. public static final int VENDOR_SPECIFIC_APP_ID = 16;
  84. public static final int AUTH_APP_ID = 32;
  85. public static final int ACCT_APP_ID = 64;
  86. public static final int VENDOR_SPECIFIC_APP_ID_AUTH = VENDOR_SPECIFIC_APP_ID * AUTH_APP_ID; // 512
  87. public static final int VENDOR_SPECIFIC_APP_ID_ACCT = VENDOR_SPECIFIC_APP_ID * ACCT_APP_ID; // 1024
  88. public static final int VENDOR_SPECIFIC_APP_ID_AUTH_AND_ACCT = VENDOR_SPECIFIC_APP_ID * AUTH_APP_ID * ACCT_APP_ID; // 32768
  89. public static final int AUTH_AND_ACCT_APP_ID = AUTH_APP_ID + ACCT_APP_ID; // 96
  90. public static final int AUTH_AND_VENDOR_SPECIFIC_APP_ID = AUTH_APP_ID + VENDOR_SPECIFIC_APP_ID; // 48
  91. public static final int ACCT_AND_VENDOR_SPECIFIC_APP_ID = ACCT_APP_ID + VENDOR_SPECIFIC_APP_ID; // 80
  92. public static final int AUTH_ACCT_AND_VENDOR_SPECIFIC_APP_ID = AUTH_APP_ID + ACCT_APP_ID + VENDOR_SPECIFIC_APP_ID; // 112
  93. private static String clientHost = "127.0.0.1";
  94. private static String clientPort = "13868";
  95. private static String clientURI = "aaa://" + clientHost + ":" + clientPort;
  96. private static String serverHost = "localhost";
  97. private static String serverPort = "3868";
  98. private static String serverURI = "aaa://" + serverHost + ":" + serverPort;
  99. private static String realmName = "mobicents.org";
  100. private static DiameterMessageFactoryImpl messageFactory;
  101. private static DiameterAvpFactoryImpl avpFactory;
  102. static {
  103. Stack stack = new org.jdiameter.client.impl.StackImpl();
  104. try {
  105. stack.init(new MyConfiguration());
  106. AvpDictionary.INSTANCE.parseDictionary(BaseFactoriesTest.class.getClassLoader().getResourceAsStream("dictionary.xml"));
  107. }
  108. catch (Exception e) {
  109. throw new RuntimeException("");
  110. }
  111. messageFactory = new DiameterMessageFactoryImpl(stack);
  112. avpFactory = new DiameterAvpFactoryImpl();
  113. }
  114. @Test
  115. public void isRequestASR() throws Exception {
  116. AbortSessionRequest asr = messageFactory.createAbortSessionRequest();
  117. assertTrue("Request Flag in Abort-Session-Request is not set.", asr.getHeader().isRequest());
  118. }
  119. @Test
  120. public void isProxiableASR() throws Exception {
  121. AbortSessionRequest asr = messageFactory.createAbortSessionRequest();
  122. assertTrue("The 'P' bit is not set by default in Abort-Session-Request, it should.", asr.getHeader().isProxiable());
  123. }
  124. @Test
  125. public void testGettersAndSettersASR() throws Exception {
  126. AbortSessionRequest asr = messageFactory.createAbortSessionRequest();
  127. int nFailures = AvpAssistant.testMethods(asr, AbortSessionRequest.class);
  128. assertEquals("Some methods have failed. See logs for more details.", 0, nFailures);
  129. }
  130. @Test
  131. public void isAnswerASA() throws Exception {
  132. AbortSessionAnswer asa = messageFactory.createAbortSessionAnswer(messageFactory.createAbortSessionRequest());
  133. assertFalse("Request Flag in Abort-Session-Answer is set.", asa.getHeader().isRequest());
  134. }
  135. @Test
  136. public void isProxiableCopiedASA() throws Exception {
  137. AbortSessionRequest asr = messageFactory.createAbortSessionRequest();
  138. AbortSessionAnswer asa = messageFactory.createAbortSessionAnswer(asr);
  139. assertEquals("The 'P' bit is not copied from request in Abort-Session-Answer, it should. [RFC3588/6.2]", asr.getHeader().isProxiable(), asa.getHeader().isProxiable());
  140. // Reverse 'P' bit ...
  141. ((DiameterMessageImpl) asr).getGenericData().setProxiable(!asr.getHeader().isProxiable());
  142. assertTrue("The 'P' bit was not modified in Abort-Session-Request, it should.", asr.getHeader().isProxiable() != asa.getHeader().isProxiable());
  143. asa = messageFactory.createAbortSessionAnswer(asr);
  144. assertEquals("The 'P' bit is not copied from request in Abort-Session-Answer, it should. [RFC3588/6.2]", asr.getHeader().isProxiable(), asa.getHeader().isProxiable());
  145. }
  146. @Test
  147. public void hasTFlagSetASA() throws Exception {
  148. AbortSessionRequest asr = messageFactory.createAbortSessionRequest();
  149. ((DiameterMessageImpl) asr).getGenericData().setReTransmitted(true);
  150. assertTrue("The 'T' flag should be set in Abort-Session-Request", asr.getHeader().isPotentiallyRetransmitted());
  151. AbortSessionAnswer asa = messageFactory.createAbortSessionAnswer(asr);
  152. assertFalse("The 'T' flag should not be set in Abort-Session-Answer", asa.getHeader().isPotentiallyRetransmitted());
  153. }
  154. @Test
  155. public void testGettersAndSettersASA() throws Exception {
  156. AbortSessionAnswer asa = messageFactory.createAbortSessionAnswer(messageFactory.createAbortSessionRequest());
  157. int nFailures = AvpAssistant.testMethods(asa, AbortSessionAnswer.class);
  158. assertEquals("Some methods have failed. See logs for more details.", 0, nFailures);
  159. }
  160. @Test
  161. public void hasDestinationHostASA() throws Exception {
  162. AbortSessionAnswer asa = messageFactory.createAbortSessionAnswer(messageFactory.createAbortSessionRequest());
  163. assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", asa.getDestinationHost());
  164. }
  165. @Test
  166. public void hasDestinationRealmASA() throws Exception {
  167. AbortSessionAnswer asa = messageFactory.createAbortSessionAnswer(messageFactory.createAbortSessionRequest());
  168. assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", asa.getDestinationRealm());
  169. }
  170. @Test
  171. public void isRequestACR() throws Exception {
  172. AccountingRequest acr = messageFactory.createAccountingRequest();
  173. assertTrue("Request Flag in Accounting-Request is not set.", acr.getHeader().isRequest());
  174. }
  175. @Test
  176. public void isProxiableACR() throws Exception {
  177. AccountingRequest acr = messageFactory.createAccountingRequest();
  178. assertTrue("The 'P' bit is not set by default in Accounting-Request, it should.", acr.getHeader().isProxiable());
  179. }
  180. @Test
  181. public void testGettersAndSettersACR() throws Exception {
  182. AccountingRequest acr = messageFactory.createAccountingRequest();
  183. int nFailures = AvpAssistant.testMethods(acr, AccountingRequest.class);
  184. assertEquals("Some methods have failed. See logs for more details.", 0, nFailures);
  185. }
  186. @Test
  187. public void isAnswerACA() throws Exception {
  188. AccountingAnswer aca = messageFactory.createAccountingAnswer(messageFactory.createAccountingRequest());
  189. assertFalse("Request Flag in Accounting-Answer is set.", aca.getHeader().isRequest());
  190. }
  191. @Test
  192. public void isProxiableCopiedACA() throws Exception {
  193. AccountingRequest acr = messageFactory.createAccountingRequest();
  194. acr.setSessionId("sssxxx");
  195. AccountingAnswer aca = messageFactory.createAccountingAnswer(acr);
  196. System.out.println(aca);
  197. assertEquals("The 'P' bit is not copied from request in Accounting-Answer, it should. [RFC3588/6.2]", acr.getHeader().isProxiable(), aca.getHeader().isProxiable());
  198. // Reverse 'P' bit ...
  199. ((DiameterMessageImpl) acr).getGenericData().setProxiable(!acr.getHeader().isProxiable());
  200. assertTrue("The 'P' bit was not modified in Accounting-Request, it should.", acr.getHeader().isProxiable() != aca.getHeader().isProxiable());
  201. aca = messageFactory.createAccountingAnswer(acr);
  202. assertEquals("The 'P' bit is not copied from request in Accounting-Answer, it should. [RFC3588/6.2]", acr.getHeader().isProxiable(), aca.getHeader().isProxiable());
  203. }
  204. @Test
  205. public void hasTFlagSetACA() throws Exception {
  206. AccountingRequest acr = messageFactory.createAccountingRequest();
  207. ((DiameterMessageImpl) acr).getGenericData().setReTransmitted(true);
  208. assertTrue("The 'T' flag should be set in Accounting-Request", acr.getHeader().isPotentiallyRetransmitted());
  209. AccountingAnswer aca = messageFactory.createAccountingAnswer(acr);
  210. assertFalse("The 'T' flag should not be set in Accounting-Answer", aca.getHeader().isPotentiallyRetransmitted());
  211. }
  212. @Test
  213. public void testGettersAndSettersACA() throws Exception {
  214. AccountingAnswer aca = messageFactory.createAccountingAnswer(messageFactory.createAccountingRequest());
  215. int nFailures = AvpAssistant.testMethods(aca, AccountingAnswer.class);
  216. assertEquals("Some methods have failed. See logs for more details.", 0, nFailures);
  217. }
  218. @Test
  219. public void hasDestinationHostACA() throws Exception {
  220. AccountingAnswer aca = messageFactory.createAccountingAnswer(messageFactory.createAccountingRequest());
  221. assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", aca.getDestinationHost());
  222. }
  223. @Test
  224. public void hasDestinationRealmACA() throws Exception {
  225. AccountingAnswer aca = messageFactory.createAccountingAnswer(messageFactory.createAccountingRequest());
  226. assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", aca.getDestinationRealm());
  227. }
  228. @Test
  229. public void isRequestCER() throws Exception {
  230. CapabilitiesExchangeRequest cer = messageFactory.createCapabilitiesExchangeRequest();
  231. assertTrue("Request Flag in Capabilities-Exchange-Request is not set.", cer.getHeader().isRequest());
  232. }
  233. @Test
  234. public void isProxiableCER() throws Exception {
  235. CapabilitiesExchangeRequest cer = messageFactory.createCapabilitiesExchangeRequest();
  236. assertFalse("The 'P' bit is set by default in Capabilities-Exchange-Request, it shouldn't.", cer.getHeader().isProxiable());
  237. }
  238. @Test
  239. public void testGettersAndSettersCER() throws Exception {
  240. CapabilitiesExchangeRequest cer = messageFactory.createCapabilitiesExchangeRequest();
  241. int nFailures = AvpAssistant.testMethods(cer, CapabilitiesExchangeRequest.class);
  242. assertEquals("Some methods have failed. See logs for more details.", 0, nFailures);
  243. }
  244. @Test
  245. public void isAnswerCEA() throws Exception {
  246. CapabilitiesExchangeAnswer cea = messageFactory.createCapabilitiesExchangeAnswer(messageFactory.createCapabilitiesExchangeRequest());
  247. assertFalse("Request Flag in Capabilities-Exchange-Answer is set.", cea.getHeader().isRequest());
  248. }
  249. @Test
  250. public void isProxiableCopiedCEA() throws Exception {
  251. CapabilitiesExchangeRequest cer = messageFactory.createCapabilitiesExchangeRequest();
  252. CapabilitiesExchangeAnswer cea = messageFactory.createCapabilitiesExchangeAnswer(cer);
  253. assertEquals("The 'P' bit is not copied from request in Capabilities-Exchange-Answer, it should. [RFC3588/6.2]", cer.getHeader().isProxiable(), cea.getHeader().isProxiable());
  254. // Reverse 'P' bit ...
  255. ((DiameterMessageImpl) cer).getGenericData().setProxiable(!cer.getHeader().isProxiable());
  256. assertTrue("The 'P' bit was not modified in Capabilities-Exchange-Request, it should.", cer.getHeader().isProxiable() != cea.getHeader().isProxiable());
  257. cea = messageFactory.createCapabilitiesExchangeAnswer(cer);
  258. assertEquals("The 'P' bit is not copied from request in Capabilities-Exchange-Answer, it should. [RFC3588/6.2]", cer.getHeader().isProxiable(), cea.getHeader().isProxiable());
  259. }
  260. @Test
  261. public void hasTFlagSetCEA() throws Exception {
  262. CapabilitiesExchangeRequest cer = messageFactory.createCapabilitiesExchangeRequest();
  263. ((DiameterMessageImpl) cer).getGenericData().setReTransmitted(true);
  264. assertTrue("The 'T' flag should be set in Capabilities-Exchange-Request", cer.getHeader().isPotentiallyRetransmitted());
  265. CapabilitiesExchangeAnswer cea = messageFactory.createCapabilitiesExchangeAnswer(cer);
  266. assertFalse("The 'T' flag should not be set in Capabilities-Exchange-Answer", cea.getHeader().isPotentiallyRetransmitted());
  267. }
  268. @Test
  269. public void testGettersAndSettersCEA() throws Exception {
  270. CapabilitiesExchangeAnswer cea = messageFactory.createCapabilitiesExchangeAnswer(messageFactory.createCapabilitiesExchangeRequest());
  271. int nFailures = AvpAssistant.testMethods(cea, CapabilitiesExchangeAnswer.class);
  272. assertEquals("Some methods have failed. See logs for more details.", 0, nFailures);
  273. }
  274. @Test
  275. public void hasDestinationHostCEA() throws Exception {
  276. CapabilitiesExchangeAnswer cea = messageFactory.createCapabilitiesExchangeAnswer(messageFactory.createCapabilitiesExchangeRequest());
  277. assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", cea.getDestinationHost());
  278. }
  279. @Test
  280. public void hasDestinationRealmCEA() throws Exception {
  281. CapabilitiesExchangeAnswer cea = messageFactory.createCapabilitiesExchangeAnswer(messageFactory.createCapabilitiesExchangeRequest());
  282. assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", cea.getDestinationRealm());
  283. }
  284. @Test
  285. public void isRequestDWR() throws Exception {
  286. DeviceWatchdogRequest dwr = messageFactory.createDeviceWatchdogRequest();
  287. assertTrue("Request Flag in Device-Watchdog-Request is not set.", dwr.getHeader().isRequest());
  288. }
  289. @Test
  290. public void isProxiableDWR() throws Exception {
  291. DeviceWatchdogRequest dwr = messageFactory.createDeviceWatchdogRequest();
  292. assertFalse("The 'P' bit is set by default in Device-Watchdog-Request, it shouldn't.", dwr.getHeader().isProxiable());
  293. }
  294. @Test
  295. public void testGettersAndSettersDWR() throws Exception {
  296. DeviceWatchdogRequest dwr = messageFactory.createDeviceWatchdogRequest();
  297. int nFailures = AvpAssistant.testMethods(dwr, DeviceWatchdogRequest.class);
  298. assertEquals("Some methods have failed. See logs for more details.", 0, nFailures);
  299. }
  300. @Test
  301. public void isAnswerDWA() throws Exception {
  302. DeviceWatchdogAnswer dwa = messageFactory.createDeviceWatchdogAnswer(messageFactory.createDeviceWatchdogRequest());
  303. assertFalse("Request Flag in Device-Watchdog-Answer is set.", dwa.getHeader().isRequest());
  304. }
  305. @Test
  306. public void isProxiableCopiedDWA() throws Exception {
  307. DeviceWatchdogRequest dwr = messageFactory.createDeviceWatchdogRequest();
  308. DeviceWatchdogAnswer dwa = messageFactory.createDeviceWatchdogAnswer(dwr);
  309. assertEquals("The 'P' bit is not copied from request in Device-Watchdog-Answer, it should. [RFC3588/6.2]", dwr.getHeader().isProxiable(), dwa.getHeader().isProxiable());
  310. // Reverse 'P' bit ...
  311. ((DiameterMessageImpl) dwr).getGenericData().setProxiable(!dwr.getHeader().isProxiable());
  312. assertTrue("The 'P' bit was not modified in Device-Watchdog-Request, it should.", dwr.getHeader().isProxiable() != dwa.getHeader().isProxiable());
  313. dwa = messageFactory.createDeviceWatchdogAnswer(dwr);
  314. assertEquals("The 'P' bit is not copied from request in Device-Watchdog-Answer, it should. [RFC3588/6.2]", dwr.getHeader().isProxiable(), dwa.getHeader().isProxiable());
  315. }
  316. @Test
  317. public void hasTFlagSetDWA() throws Exception {
  318. DeviceWatchdogRequest dwr = messageFactory.createDeviceWatchdogRequest();
  319. ((DiameterMessageImpl) dwr).getGenericData().setReTransmitted(true);
  320. assertTrue("The 'T' flag should be set in Device-Watchdog-Request", dwr.getHeader().isPotentiallyRetransmitted());
  321. DeviceWatchdogAnswer dwa = messageFactory.createDeviceWatchdogAnswer(dwr);
  322. assertFalse("The 'T' flag should not be set in Device-Watchdog-Answer", dwa.getHeader().isPotentiallyRetransmitted());
  323. }
  324. @Test
  325. public void testGettersAndSettersDWA() throws Exception {
  326. DeviceWatchdogAnswer dwa = messageFactory.createDeviceWatchdogAnswer(messageFactory.createDeviceWatchdogRequest());
  327. int nFailures = AvpAssistant.testMethods(dwa, DeviceWatchdogAnswer.class);
  328. assertEquals("Some methods have failed. See logs for more details.", 0, nFailures);
  329. }
  330. @Test
  331. public void hasDestinationHostDWA() throws Exception {
  332. DeviceWatchdogAnswer dwa = messageFactory.createDeviceWatchdogAnswer(messageFactory.createDeviceWatchdogRequest());
  333. assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", dwa.getDestinationHost());
  334. }
  335. @Test
  336. public void hasDestinationRealmDWA() throws Exception {
  337. DeviceWatchdogAnswer dwa = messageFactory.createDeviceWatchdogAnswer(messageFactory.createDeviceWatchdogRequest());
  338. assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", dwa.getDestinationRealm());
  339. }
  340. @Test
  341. public void isRequestDPR() throws Exception {
  342. DisconnectPeerRequest dpr = messageFactory.createDisconnectPeerRequest();
  343. assertTrue("Request Flag in Disconnect-Peer-Request is not set.", dpr.getHeader().isRequest());
  344. }
  345. @Test
  346. public void isProxiableDPR() throws Exception {
  347. DisconnectPeerRequest dpr = messageFactory.createDisconnectPeerRequest();
  348. assertFalse("The 'P' bit is set by default in Disconnect-Peer-Request, it shouldn't.", dpr.getHeader().isProxiable());
  349. }
  350. @Test
  351. public void testGettersAndSettersDPR() throws Exception {
  352. DisconnectPeerRequest dpr = messageFactory.createDisconnectPeerRequest();
  353. int nFailures = AvpAssistant.testMethods(dpr, DisconnectPeerRequest.class);
  354. assertEquals("Some methods have failed. See logs for more details.", 0, nFailures);
  355. }
  356. @Test
  357. public void isAnswerDPA() throws Exception {
  358. DisconnectPeerAnswer dpa = messageFactory.createDisconnectPeerAnswer(messageFactory.createDisconnectPeerRequest());
  359. assertFalse("Request Flag in Disconnect-Peer-Answer is set.", dpa.getHeader().isRequest());
  360. }
  361. @Test
  362. public void isProxiableCopiedDPA() throws Exception {
  363. DisconnectPeerRequest dpr = messageFactory.createDisconnectPeerRequest();
  364. DisconnectPeerAnswer dpa = messageFactory.createDisconnectPeerAnswer(dpr);
  365. assertEquals("The 'P' bit is not copied from request in Disconnect-Peer-Answer, it should. [RFC3588/6.2]", dpr.getHeader().isProxiable(), dpa.getHeader().isProxiable());
  366. // Reverse 'P' bit ...
  367. ((DiameterMessageImpl) dpr).getGenericData().setProxiable(!dpr.getHeader().isProxiable());
  368. assertTrue("The 'P' bit was not modified in Disconnect-Peer-Request, it should.", dpr.getHeader().isProxiable() != dpa.getHeader().isProxiable());
  369. dpa = messageFactory.createDisconnectPeerAnswer(dpr);
  370. assertEquals("The 'P' bit is not copied from request in Disconnect-Peer-Answer, it should. [RFC3588/6.2]", dpr.getHeader().isProxiable(), dpa.getHeader().isProxiable());
  371. }
  372. @Test
  373. public void hasTFlagSetDPA() throws Exception {
  374. DisconnectPeerRequest dpr = messageFactory.createDisconnectPeerRequest();
  375. ((DiameterMessageImpl) dpr).getGenericData().setReTransmitted(true);
  376. assertTrue("The 'T' flag should be set in Disconnect-Peer-Request", dpr.getHeader().isPotentiallyRetransmitted());
  377. DisconnectPeerAnswer dpa = messageFactory.createDisconnectPeerAnswer(dpr);
  378. assertFalse("The 'T' flag should not be set in Disconnect-Peer-Answer", dpa.getHeader().isPotentiallyRetransmitted());
  379. }
  380. @Test
  381. public void testGettersAndSettersDPA() throws Exception {
  382. DisconnectPeerAnswer dpa = messageFactory.createDisconnectPeerAnswer(messageFactory.createDisconnectPeerRequest());
  383. int nFailures = AvpAssistant.testMethods(dpa, DisconnectPeerAnswer.class);
  384. assertEquals("Some methods have failed. See logs for more details.", 0, nFailures);
  385. }
  386. @Test
  387. public void hasDestinationHostDPA() throws Exception {
  388. DisconnectPeerAnswer dpa = messageFactory.createDisconnectPeerAnswer(messageFactory.createDisconnectPeerRequest());
  389. assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", dpa.getDestinationHost());
  390. }
  391. @Test
  392. public void hasDestinationRealmDPA() throws Exception {
  393. DisconnectPeerAnswer dpa = messageFactory.createDisconnectPeerAnswer(messageFactory.createDisconnectPeerRequest());
  394. assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", dpa.getDestinationRealm());
  395. }
  396. @Test
  397. public void isRequestRAR() throws Exception {
  398. ReAuthRequest rar = messageFactory.createReAuthRequest();
  399. assertTrue("Request Flag in Re-Auth-Request is not set.", rar.getHeader().isRequest());
  400. }
  401. @Test
  402. public void isProxiableRAR() throws Exception {
  403. ReAuthRequest acr = messageFactory.createReAuthRequest();
  404. assertTrue("The 'P' bit is not set by default in Re-Auth-Request, it should.", acr.getHeader().isProxiable());
  405. }
  406. @Test
  407. public void testGettersAndSettersRAR() throws Exception {
  408. ReAuthRequest rar = messageFactory.createReAuthRequest();
  409. int nFailures = AvpAssistant.testMethods(rar, ReAuthRequest.class);
  410. assertEquals("Some methods have failed. See logs for more details.", 0, nFailures);
  411. }
  412. @Test
  413. public void isAnswerRAA() throws Exception {
  414. ReAuthAnswer raa = messageFactory.createReAuthAnswer(messageFactory.createReAuthRequest());
  415. assertFalse("Request Flag in Re-Auth-Answer is set.", raa.getHeader().isRequest());
  416. }
  417. @Test
  418. public void isProxiableCopiedRAA() throws Exception {
  419. ReAuthRequest asr = messageFactory.createReAuthRequest();
  420. ReAuthAnswer asa = messageFactory.createReAuthAnswer(asr);
  421. assertEquals("The 'P' bit is not copied from request in Re-Auth-Answer, it should. [RFC3588/6.2]", asr.getHeader().isProxiable(), asa.getHeader().isProxiable());
  422. // Reverse 'P' bit ...
  423. ((DiameterMessageImpl) asr).getGenericData().setProxiable(!asr.getHeader().isProxiable());
  424. assertTrue("The 'P' bit was not modified in Re-Auth-Request, it should.", asr.getHeader().isProxiable() != asa.getHeader().isProxiable());
  425. asa = messageFactory.createReAuthAnswer(asr);
  426. assertEquals("The 'P' bit is not copied from request in Re-Auth-Answer, it should. [RFC3588/6.2]", asr.getHeader().isProxiable(), asa.getHeader().isProxiable());
  427. }
  428. @Test
  429. public void hasTFlagSetRAA() throws Exception {
  430. ReAuthRequest rar = messageFactory.createReAuthRequest();
  431. ((DiameterMessageImpl) rar).getGenericData().setReTransmitted(true);
  432. assertTrue("The 'T' flag should be set in Re-Auth-Request", rar.getHeader().isPotentiallyRetransmitted());
  433. ReAuthAnswer raa = messageFactory.createReAuthAnswer(rar);
  434. assertFalse("The 'T' flag should not be set in Re-Auth-Answer", raa.getHeader().isPotentiallyRetransmitted());
  435. }
  436. @Test
  437. public void testGettersAndSettersRAA() throws Exception {
  438. ReAuthAnswer raa = messageFactory.createReAuthAnswer(messageFactory.createReAuthRequest());
  439. int nFailures = AvpAssistant.testMethods(raa, ReAuthAnswer.class);
  440. assertEquals("Some methods have failed. See logs for more details.", 0, nFailures);
  441. }
  442. @Test
  443. public void hasDestinationHostRAA() throws Exception {
  444. ReAuthAnswer raa = messageFactory.createReAuthAnswer(messageFactory.createReAuthRequest());
  445. assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", raa.getDestinationHost());
  446. }
  447. @Test
  448. public void hasDestinationRealmRAA() throws Exception {
  449. ReAuthAnswer raa = messageFactory.createReAuthAnswer(messageFactory.createReAuthRequest());
  450. assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", raa.getDestinationRealm());
  451. }
  452. @Test
  453. public void isRequestSTR() throws Exception {
  454. SessionTerminationRequest str = messageFactory.createSessionTerminationRequest();
  455. assertTrue("Request Flag in Disconnect-Peer-Request is not set.", str.getHeader().isRequest());
  456. }
  457. @Test
  458. public void isProxiableSTR() throws Exception {
  459. SessionTerminationRequest acr = messageFactory.createSessionTerminationRequest();
  460. assertTrue("The 'P' bit is not set by default in Session-Termination-Request, it should.", acr.getHeader().isProxiable());
  461. }
  462. @Test
  463. public void testGettersAndSettersSTR() throws Exception {
  464. SessionTerminationRequest str = messageFactory.createSessionTerminationRequest();
  465. int nFailures = AvpAssistant.testMethods(str, SessionTerminationRequest.class);
  466. assertEquals("Some methods have failed. See logs for more details.", 0, nFailures);
  467. }
  468. @Test
  469. public void isAnswerSTA() throws Exception {
  470. SessionTerminationAnswer sta = messageFactory.createSessionTerminationAnswer(messageFactory.createSessionTerminationRequest());
  471. assertFalse("Request Flag in Disconnect-Peer-Answer is set.", sta.getHeader().isRequest());
  472. }
  473. @Test
  474. public void isProxiableCopiedSTA() throws Exception {
  475. SessionTerminationRequest asr = messageFactory.createSessionTerminationRequest();
  476. SessionTerminationAnswer asa = messageFactory.createSessionTerminationAnswer(asr);
  477. assertEquals("The 'P' bit is not copied from request in Session-Termination-Answer, it should. [RFC3588/6.2]", asr.getHeader().isProxiable(), asa.getHeader().isProxiable());
  478. // Reverse 'P' bit ...
  479. ((DiameterMessageImpl) asr).getGenericData().setProxiable(!asr.getHeader().isProxiable());
  480. assertTrue("The 'P' bit was not modified in Session-Termination-Request, it should.", asr.getHeader().isProxiable() != asa.getHeader().isProxiable());
  481. asa = messageFactory.createSessionTerminationAnswer(asr);
  482. assertEquals("The 'P' bit is not copied from request in Session-Termination-Answer, it should. [RFC3588/6.2]", asr.getHeader().isProxiable(), asa.getHeader().isProxiable());
  483. }
  484. @Test
  485. public void hasTFlagSetSTA() throws Exception {
  486. SessionTerminationRequest str = messageFactory.createSessionTerminationRequest();
  487. ((DiameterMessageImpl) str).getGenericData().setReTransmitted(true);
  488. assertTrue("The 'T' flag should be set in Session-Termination-Request", str.getHeader().isPotentiallyRetransmitted());
  489. SessionTerminationAnswer sta = messageFactory.createSessionTerminationAnswer(str);
  490. assertFalse("The 'T' flag should not be set in Session-Termination-Answer", sta.getHeader().isPotentiallyRetransmitted());
  491. }
  492. @Test
  493. public void testGettersAndSettersSTA() throws Exception {
  494. SessionTerminationAnswer str = messageFactory.createSessionTerminationAnswer(messageFactory.createSessionTerminationRequest());
  495. int nFailures = AvpAssistant.testMethods(str, SessionTerminationAnswer.class);
  496. assertEquals("Some methods have failed. See logs for more details.", 0, nFailures);
  497. }
  498. @Test
  499. public void hasDestinationHostSTA() throws Exception {
  500. SessionTerminationAnswer sta = messageFactory.createSessionTerminationAnswer(messageFactory.createSessionTerminationRequest());
  501. assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", sta.getDestinationHost());
  502. }
  503. @Test
  504. public void hasDestinationRealmSTA() throws Exception {
  505. SessionTerminationAnswer sta = messageFactory.createSessionTerminationAnswer(messageFactory.createSessionTerminationRequest());
  506. assertNull("The Destination-Host and Destination-Realm AVPs MUST NOT be present in the answer message. [RFC3588/6.2]", sta.getDestinationRealm());
  507. }
  508. @Test
  509. public void testAvpFactoryCreateExperimentalResult() {
  510. ExperimentalResultAvp erAvp1 = avpFactory.createExperimentalResult(10609L, 9999L);
  511. Assert.assertNotNull("Created Experimental-Result AVP from objects should not be null.", erAvp1);
  512. ExperimentalResultAvp erAvp2 = avpFactory.createExperimentalResult(erAvp1.getExtensionAvps());
  513. Assert.assertEquals("Created Experimental-Result AVP from extension avps should be equal to original.", erAvp1, erAvp2);
  514. ExperimentalResultAvp erAvp3 = avpFactory.createExperimentalResult(erAvp2.getVendorIdAVP(), erAvp2.getExperimentalResultCode());
  515. Assert.assertEquals("Created Experimental-Result AVP from getters should be equal to original.", erAvp1, erAvp3);
  516. }
  517. @Test
  518. public void testAvpFactoryCreateProxyInfo() {
  519. ProxyInfoAvp piAvp1 = avpFactory.createProxyInfo(new DiameterIdentity("diameter.mobicents.org"), "INITIALIZED".getBytes());
  520. Assert.assertNotNull("Created Proxy-Info AVP from objects should not be null.", piAvp1);
  521. ProxyInfoAvp piAvp2 = avpFactory.createProxyInfo(piAvp1.getExtensionAvps());
  522. Assert.assertEquals("Created Proxy-Info AVP from extension avps should be equal to original.", piAvp1, piAvp2);
  523. ProxyInfoAvp piAvp3 = avpFactory.createProxyInfo(piAvp2.getProxyHost(), piAvp2.getProxyState());
  524. Assert.assertEquals("Created Proxy-Info AVP from getters should be equal to original.", piAvp1, piAvp3);
  525. }
  526. @Test
  527. public void testAvpFactoryCreateVendorSpecificApplicationId() {
  528. VendorSpecificApplicationIdAvp vsaidAvp1 = avpFactory.createVendorSpecificApplicationId(10609L);
  529. Assert.assertNotNull("Created Vendor-Specific-Application-Id AVP from objects should not be null.", vsaidAvp1);
  530. VendorSpecificApplicationIdAvp vsaidAvp2 = avpFactory.createVendorSpecificApplicationId(vsaidAvp1.getExtensionAvps());
  531. Assert.assertEquals("Created Vendor-Specific-Application-Id AVP from extension avps should be equal to original.", vsaidAvp1, vsaidAvp2);
  532. VendorSpecificApplicationIdAvp vsaidAvp3 = avpFactory.createVendorSpecificApplicationId(vsaidAvp2.getVendorIdsAvp()[0]);
  533. Assert.assertEquals("Created Vendor-Specific-Application-Id AVP from getters should be equal to original.", vsaidAvp1, vsaidAvp3);
  534. }
  535. @Test
  536. public void testMessageCreationVendorSpecificApplicationIdAvp() {
  537. // Relates to Issue #1555 (http://code.google.com/p/mobicents/issues/detail?id=1555)
  538. List<DiameterAvp> avps = new ArrayList<DiameterAvp>();
  539. try {
  540. long vendorId = 2312L;
  541. long acctApplicationId = 23121L;
  542. DiameterAvp avpVendorId = avpFactory.createAvp(DiameterAvpCodes.VENDOR_ID, vendorId);
  543. DiameterAvp avpAcctApplicationId = avpFactory.createAvp(DiameterAvpCodes.ACCT_APPLICATION_ID, acctApplicationId);
  544. avps.add(avpFactory.createAvp(DiameterAvpCodes.VENDOR_SPECIFIC_APPLICATION_ID, new DiameterAvp[] { avpVendorId, avpAcctApplicationId }));
  545. DiameterAvp[] avpArray = new DiameterAvp[avps.size()];
  546. avpArray = avps.toArray(avpArray);
  547. AccountingRequest acr = messageFactory.createAccountingRequest(avpArray);
  548. VendorSpecificApplicationIdAvp vsaidAvp = acr.getVendorSpecificApplicationId();
  549. assertNotNull("Vendor-Specific-Application-Id should be present in message.", vsaidAvp);
  550. // hack: vendor id is Avp vendor-id value, need to do this way.
  551. long msgAppVendorId = vsaidAvp.getVendorIdsAvp()[0];
  552. assertTrue("Vendor-Specific-Application-Id / Vendor-Id should be [" + vendorId + "] it is [" + msgAppVendorId + "]", vendorId == msgAppVendorId);
  553. long msgAppId = vsaidAvp.getAcctApplicationId();
  554. assertTrue("Vendor-Specific-Application-Id / Acct-Application-Id should be [" + acctApplicationId + "] it is [" + msgAppId + "]", acctApplicationId == msgAppId);
  555. }
  556. catch (Exception e) {
  557. e.printStackTrace();
  558. fail(e.getLocalizedMessage());
  559. }
  560. }
  561. @Test
  562. public void testMessageCreationApplicationIdAvp() {
  563. // Relates to Issue #1555 (http://code.google.com/p/mobicents/issues/detail?id=1555)
  564. List<DiameterAvp> avps = new ArrayList<DiameterAvp>();
  565. try {
  566. long acctApplicationId = 23121L;
  567. DiameterAvp avpAcctApplicationId = avpFactory.createAvp(DiameterAvpCodes.ACCT_APPLICATION_ID, acctApplicationId);
  568. avps.add(avpAcctApplicationId);
  569. DiameterAvp[] avpArray = new DiameterAvp[avps.size()];
  570. avpArray = avps.toArray(avpArray);
  571. AccountingRequest acr = messageFactory.createAccountingRequest(avpArray);
  572. VendorSpecificApplicationIdAvp vsaidAvp = acr.getVendorSpecificApplicationId();
  573. assertNull("Vendor-Specific-Application-Id should not be present in message.", vsaidAvp);
  574. long msgAppId = acr.getAcctApplicationId();
  575. assertTrue("Acct-Application-Id should be [" + acctApplicationId + "] it is [" + msgAppId + "]", acctApplicationId == msgAppId);
  576. }
  577. catch (Exception e) {
  578. e.printStackTrace();
  579. fail(e.getLocalizedMessage());
  580. }
  581. }
  582. /**
  583. * Class representing the Diameter Configuration
  584. */
  585. public static class MyConfiguration extends EmptyConfiguration {
  586. public MyConfiguration() {
  587. super();
  588. add(Assembler, Assembler.defValue());
  589. add(OwnDiameterURI, clientURI);
  590. add(OwnRealm, realmName);
  591. add(OwnVendorID, 193L);
  592. // Set Ericsson SDK feature
  593. // add(UseUriAsFqdn, true);
  594. // Set Common Applications
  595. add(ApplicationId,
  596. // AppId 1
  597. getInstance().
  598. add(VendorId, 193L).
  599. add(AuthApplId, 0L).
  600. add(AcctApplId, 19302L));
  601. // Set peer table
  602. add(PeerTable,
  603. // Peer 1
  604. getInstance().
  605. add(PeerRating, 1).
  606. add(PeerName, serverURI));
  607. // Set realm table
  608. add(RealmTable,
  609. // Realm 1
  610. getInstance().add(
  611. RealmEntry,
  612. getInstance().
  613. add(RealmName, realmName).
  614. add(ApplicationId, getInstance().add(VendorId, 193L).add(AuthApplId, 0L).add(AcctApplId, 19302L)).
  615. add(RealmHosts, clientHost + ", " + serverHost).add(RealmLocalAction, "LOCAL").add(RealmEntryIsDynamic, false).add(RealmEntryExpTime, 1000L)));
  616. }
  617. }
  618. // Util methods for several applications
  619. public static int getApplicationIdAvpsHash(DiameterMessage msg) {
  620. int result = NO_APP_ID_AVPS;
  621. int vsaiResult = 1;
  622. for(DiameterAvp avp : msg.getAvps()) {
  623. if(avp.getCode() == Avp.AUTH_APPLICATION_ID) {
  624. result += AUTH_APP_ID;
  625. }
  626. else if(avp.getCode() == Avp.ACCT_APPLICATION_ID) {
  627. result += ACCT_APP_ID;
  628. }
  629. if(avp.getCode() == Avp.VENDOR_SPECIFIC_APPLICATION_ID) {
  630. result += VENDOR_SPECIFIC_APP_ID;
  631. GroupedAvp vsai = (GroupedAvp)avp;
  632. for(DiameterAvp subAvp : vsai.getExtensionAvps()) {
  633. if(subAvp.getCode() == Avp.AUTH_APPLICATION_ID) {
  634. vsaiResult *= AUTH_APP_ID;
  635. }
  636. else if(subAvp.getCode() == Avp.ACCT_APPLICATION_ID) {
  637. vsaiResult *= ACCT_APP_ID;
  638. }
  639. }
  640. }
  641. }
  642. if(result == VENDOR_SPECIFIC_APP_ID) {
  643. result *= vsaiResult;
  644. }
  645. return result;
  646. }
  647. public static void checkCorrectApplicationIdAVPs(boolean isVendor, boolean isAuth, boolean isAcct, DiameterMessage message) {
  648. int appIdCode = getApplicationIdAvpsHash(message);
  649. assertFalse("Invalid Application ID AVPs found (" + appIdCode + ")", appIdCode == AUTH_AND_ACCT_APP_ID || appIdCode == AUTH_AND_VENDOR_SPECIFIC_APP_ID ||
  650. appIdCode == ACCT_AND_VENDOR_SPECIFIC_APP_ID || appIdCode == AUTH_ACCT_AND_VENDOR_SPECIFIC_APP_ID || appIdCode == VENDOR_SPECIFIC_APP_ID_AUTH_AND_ACCT);
  651. if(!isVendor) {
  652. if(isAuth) {
  653. assertEquals("Message should have Auth-Application-Id AVP. Application ID AVPs Hashcode mismatch... ", AUTH_APP_ID, appIdCode);
  654. }
  655. else if(isAcct) {
  656. assertEquals("Message should have Acct-Application-Id AVP. Application ID AVPs Hashcode mismatch... ", ACCT_APP_ID, appIdCode);
  657. }
  658. }
  659. else {
  660. if(isAuth) {
  661. assertEquals("Message should have Auth-Application-Id AVP. Application ID AVPs Hashcode mismatch... ", VENDOR_SPECIFIC_APP_ID_AUTH, appIdCode);
  662. }
  663. else if(isAcct) {
  664. assertEquals("Message should have Acct-Application-Id AVP. Application ID AVPs Hashcode mismatch... ", VENDOR_SPECIFIC_APP_ID_ACCT, appIdCode);
  665. }
  666. }
  667. }
  668. }