/protocols/smpp/src/test/java/org/mobicents/protocols/smpp/encoding/EncodingFactoryTest.java

http://mobicents.googlecode.com/ · Java · 165 lines · 129 code · 15 blank · 21 comment · 0 complexity · 2f10018e6f0980f2d3c63b2921c4d3ac MD5 · raw file

  1. /*
  2. * JBoss, Home of Professional Open Source
  3. * Copyright 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.protocols.smpp.encoding;
  23. import static org.testng.Assert.assertEquals;
  24. import static org.testng.Assert.assertFalse;
  25. import static org.testng.Assert.assertNotNull;
  26. import static org.testng.Assert.assertNull;
  27. import static org.testng.Assert.assertTrue;
  28. import java.util.Iterator;
  29. import java.util.Locale;
  30. import org.testng.annotations.Test;
  31. import org.mobicents.protocols.smpp.SMPPRuntimeException;
  32. import org.mobicents.protocols.smpp.encoding.ASCIIEncoding;
  33. import org.mobicents.protocols.smpp.encoding.AlphabetEncoding;
  34. import org.mobicents.protocols.smpp.encoding.BinaryEncoding;
  35. import org.mobicents.protocols.smpp.encoding.DefaultAlphabetEncoding;
  36. import org.mobicents.protocols.smpp.encoding.EncodingFactory;
  37. import org.mobicents.protocols.smpp.encoding.HPRoman8Encoding;
  38. import org.mobicents.protocols.smpp.encoding.Latin1Encoding;
  39. import org.mobicents.protocols.smpp.encoding.MessageEncoding;
  40. import org.mobicents.protocols.smpp.encoding.UCS2Encoding;
  41. import org.mobicents.protocols.smpp.encoding.UTF16Encoding;
  42. import org.mobicents.protocols.smpp.util.APIConfig;
  43. import org.mobicents.protocols.smpp.util.APIConfigFactory;
  44. import org.mobicents.protocols.smpp.util.PropertiesAPIConfig;
  45. @Test
  46. public class EncodingFactoryTest {
  47. public void testEncodingFactory() {
  48. EncodingFactory factory = EncodingFactory.getInstance();
  49. assertNotNull(factory.getDefaultAlphabet());
  50. assertEquals(factory.getEncoding(0).getClass(), DefaultAlphabetEncoding.class);
  51. assertEquals(factory.getEncoding(1).getClass(), ASCIIEncoding.class);
  52. assertEquals(factory.getEncoding(3).getClass(), Latin1Encoding.class);
  53. assertEquals(factory.getEncoding(4).getClass(), BinaryEncoding.class);
  54. assertEquals(factory.getEncoding(8).getClass(), UCS2Encoding.class);
  55. assertNull(factory.getEncoding(10));
  56. assertNull(factory.getEncoding(100));
  57. assertNull(factory.getEncoding(189));
  58. assertEquals(DefaultAlphabetEncoding.class,
  59. factory.getAlphabet("en").getClass());
  60. Locale chinese = Locale.CHINESE;
  61. Locale korean = Locale.KOREAN;
  62. assertEquals(UCS2Encoding.class,
  63. factory.getAlphabet(chinese.getLanguage()).getClass());
  64. assertEquals(UCS2Encoding.class,
  65. factory.getAlphabet(korean.getLanguage()).getClass());
  66. }
  67. public void testAddEncoding() {
  68. class TestEncoding1 extends AlphabetEncoding {
  69. TestEncoding1() {
  70. super(100);
  71. }
  72. }
  73. EncodingFactory factory = new EncodingFactory();
  74. factory.addEncoding(new TestEncoding1());
  75. assertNotNull(factory.getEncoding(100));
  76. assertEquals(factory.getEncoding(100).getClass(), TestEncoding1.class);
  77. }
  78. @Test(expectedExceptions = {SMPPRuntimeException.class})
  79. public void testAddNullEncodingThrowsException() {
  80. EncodingFactory factory = new EncodingFactory();
  81. factory.addEncoding((Class<AlphabetEncoding>) null);
  82. }
  83. @Test(expectedExceptions = {SMPPRuntimeException.class})
  84. public void testExceptionIsThrownWhenEncodingConstructorExceptions() {
  85. class TestEncoding2 extends AlphabetEncoding {
  86. TestEncoding2() {
  87. super(101);
  88. throw new RuntimeException("This exception is expected.");
  89. }
  90. }
  91. EncodingFactory factory = new EncodingFactory();
  92. factory.addEncoding(TestEncoding2.class);
  93. }
  94. public void testGetAllEncodings() {
  95. Iterator<MessageEncoding<?>> encodings =
  96. EncodingFactory.getInstance().getAllEncodings();
  97. assertNotNull(encodings);
  98. assertTrue(encodings.hasNext());
  99. }
  100. public void testDefaultAlphabetUsesGsmDefaultAlphabetIfNotOtherwiseSpecified() throws Exception {
  101. assertNull(System.getProperty(EncodingFactory.DEFAULT_ALPHABET_PROPNAME));
  102. APIConfig config = APIConfigFactory.getConfig();
  103. assertFalse(config.isSet(APIConfig.DEFAULT_ALPHABET));
  104. EncodingFactory factory = new EncodingFactory();
  105. assertEquals(factory.getDefaultAlphabet().getClass(), DefaultAlphabetEncoding.class);
  106. }
  107. public void testInstantiatingDefaultAlphabetFromSystemProperty() {
  108. try {
  109. System.setProperty(
  110. EncodingFactory.DEFAULT_ALPHABET_PROPNAME,
  111. "org.mobicents.protocols.smpp.encoding.UTF16Encoding");
  112. EncodingFactory factory = new EncodingFactory();
  113. assertNotNull(factory.getDefaultAlphabet());
  114. assertEquals(factory.getDefaultAlphabet().getClass(), UTF16Encoding.class);
  115. } finally {
  116. System.clearProperty(EncodingFactory.DEFAULT_ALPHABET_PROPNAME);
  117. }
  118. }
  119. public void testInstantiatingDefaultAlphabetFromAPIConfig() throws Exception {
  120. try {
  121. assertNull(System.getProperty(EncodingFactory.DEFAULT_ALPHABET_PROPNAME));
  122. PropertiesAPIConfig config = new PropertiesAPIConfig();
  123. config.initialise();
  124. config.setProperty(APIConfig.DEFAULT_ALPHABET, ASCIIEncoding.class.getName());
  125. APIConfigFactory.setCachedConfig(config);
  126. EncodingFactory factory = new EncodingFactory();
  127. assertNotNull(factory.getDefaultAlphabet());
  128. assertEquals(factory.getDefaultAlphabet().getClass(), ASCIIEncoding.class);
  129. } finally {
  130. APIConfigFactory.reset();
  131. }
  132. }
  133. public void testDefaultAlphabetSpecifiedInSystemPropertyOverridesAPIConfig() throws Exception {
  134. try {
  135. System.setProperty(
  136. EncodingFactory.DEFAULT_ALPHABET_PROPNAME,
  137. UCS2Encoding.class.getName());
  138. PropertiesAPIConfig config = new PropertiesAPIConfig();
  139. config.initialise();
  140. config.setProperty(APIConfig.DEFAULT_ALPHABET, HPRoman8Encoding.class.getName());
  141. APIConfigFactory.setCachedConfig(config);
  142. EncodingFactory factory = new EncodingFactory();
  143. assertNotNull(factory.getDefaultAlphabet());
  144. assertEquals(factory.getDefaultAlphabet().getClass(), UCS2Encoding.class);
  145. } finally {
  146. System.clearProperty(EncodingFactory.DEFAULT_ALPHABET_PROPNAME);
  147. APIConfigFactory.reset();
  148. }
  149. }
  150. }