/spring-integration-ip/src/test/java/org/springframework/integration/ip/tcp/serializer/DeserializationTests.java

https://github.com/nickspacek/spring-integration · Java · 231 lines · 195 code · 17 blank · 19 comment · 5 complexity · 7e616b41212654acc23bb48c49a24565 MD5 · raw file

  1. /*
  2. * Copyright 2002-2012 the original author or authors.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.springframework.integration.ip.tcp.serializer;
  17. import static org.junit.Assert.assertEquals;
  18. import static org.junit.Assert.fail;
  19. import java.io.IOException;
  20. import java.net.ServerSocket;
  21. import java.net.Socket;
  22. import javax.net.ServerSocketFactory;
  23. import org.junit.Test;
  24. import org.springframework.core.serializer.DefaultDeserializer;
  25. import org.springframework.integration.ip.util.SocketTestUtils;
  26. import org.springframework.integration.test.util.SocketUtils;
  27. /**
  28. * @author Gary Russell
  29. * @since 2.0
  30. */
  31. public class DeserializationTests {
  32. @Test
  33. public void testReadLength() throws Exception {
  34. int port = SocketUtils.findAvailableServerSocket();
  35. ServerSocket server = ServerSocketFactory.getDefault().createServerSocket(port);
  36. server.setSoTimeout(10000);
  37. SocketTestUtils.testSendLength(port, null);
  38. Socket socket = server.accept();
  39. socket.setSoTimeout(5000);
  40. ByteArrayLengthHeaderSerializer serializer = new ByteArrayLengthHeaderSerializer();
  41. byte[] out = serializer.deserialize(socket.getInputStream());
  42. assertEquals("Data", SocketTestUtils.TEST_STRING + SocketTestUtils.TEST_STRING,
  43. new String(out));
  44. out = serializer.deserialize(socket.getInputStream());
  45. assertEquals("Data", SocketTestUtils.TEST_STRING + SocketTestUtils.TEST_STRING,
  46. new String(out));
  47. server.close();
  48. }
  49. @Test
  50. public void testReadStxEtx() throws Exception {
  51. int port = SocketUtils.findAvailableServerSocket();
  52. ServerSocket server = ServerSocketFactory.getDefault().createServerSocket(port);
  53. server.setSoTimeout(10000);
  54. SocketTestUtils.testSendStxEtx(port, null);
  55. Socket socket = server.accept();
  56. socket.setSoTimeout(5000);
  57. ByteArrayStxEtxSerializer serializer = new ByteArrayStxEtxSerializer();
  58. byte[] out = serializer.deserialize(socket.getInputStream());
  59. assertEquals("Data", SocketTestUtils.TEST_STRING + SocketTestUtils.TEST_STRING,
  60. new String(out));
  61. out = serializer.deserialize(socket.getInputStream());
  62. assertEquals("Data", SocketTestUtils.TEST_STRING + SocketTestUtils.TEST_STRING,
  63. new String(out));
  64. server.close();
  65. }
  66. @Test
  67. public void testReadCrLf() throws Exception {
  68. int port = SocketUtils.findAvailableServerSocket();
  69. ServerSocket server = ServerSocketFactory.getDefault().createServerSocket(port);
  70. server.setSoTimeout(10000);
  71. SocketTestUtils.testSendCrLf(port, null);
  72. Socket socket = server.accept();
  73. socket.setSoTimeout(5000);
  74. ByteArrayCrLfSerializer serializer = new ByteArrayCrLfSerializer();
  75. byte[] out = serializer.deserialize(socket.getInputStream());
  76. assertEquals("Data", SocketTestUtils.TEST_STRING + SocketTestUtils.TEST_STRING,
  77. new String(out));
  78. out = serializer.deserialize(socket.getInputStream());
  79. assertEquals("Data", SocketTestUtils.TEST_STRING + SocketTestUtils.TEST_STRING,
  80. new String(out));
  81. server.close();
  82. }
  83. @Test
  84. public void testReadRaw() throws Exception {
  85. int port = SocketUtils.findAvailableServerSocket();
  86. ServerSocket server = ServerSocketFactory.getDefault().createServerSocket(port);
  87. server.setSoTimeout(10000);
  88. SocketTestUtils.testSendRaw(port);
  89. Socket socket = server.accept();
  90. socket.setSoTimeout(5000);
  91. ByteArrayRawSerializer serializer = new ByteArrayRawSerializer();
  92. byte[] out = serializer.deserialize(socket.getInputStream());
  93. assertEquals("Data", SocketTestUtils.TEST_STRING + SocketTestUtils.TEST_STRING,
  94. new String(out));
  95. server.close();
  96. }
  97. @Test
  98. public void testReadSerialized() throws Exception {
  99. int port = SocketUtils.findAvailableServerSocket();
  100. ServerSocket server = ServerSocketFactory.getDefault().createServerSocket(port);
  101. server.setSoTimeout(10000);
  102. SocketTestUtils.testSendSerialized(port);
  103. Socket socket = server.accept();
  104. socket.setSoTimeout(5000);
  105. DefaultDeserializer deserializer = new DefaultDeserializer();
  106. Object out = deserializer.deserialize(socket.getInputStream());
  107. assertEquals("Data", SocketTestUtils.TEST_STRING, out);
  108. out = deserializer.deserialize(socket.getInputStream());
  109. assertEquals("Data", SocketTestUtils.TEST_STRING, out);
  110. server.close();
  111. }
  112. @Test
  113. public void testReadLengthOverflow() throws Exception {
  114. int port = SocketUtils.findAvailableServerSocket();
  115. ServerSocket server = ServerSocketFactory.getDefault().createServerSocket(port);
  116. server.setSoTimeout(10000);
  117. SocketTestUtils.testSendLengthOverflow(port);
  118. Socket socket = server.accept();
  119. socket.setSoTimeout(5000);
  120. ByteArrayLengthHeaderSerializer serializer = new ByteArrayLengthHeaderSerializer();
  121. try {
  122. serializer.deserialize(socket.getInputStream());
  123. fail("Expected message length exceeded exception");
  124. } catch (IOException e) {
  125. if (!e.getMessage().startsWith("Message length")) {
  126. e.printStackTrace();
  127. fail("Unexpected IO Error:" + e.getMessage());
  128. }
  129. }
  130. server.close();
  131. }
  132. @Test
  133. public void testReadStxEtxTimeout() throws Exception {
  134. int port = SocketUtils.findAvailableServerSocket();
  135. ServerSocket server = ServerSocketFactory.getDefault().createServerSocket(port);
  136. server.setSoTimeout(10000);
  137. SocketTestUtils.testSendStxEtxOverflow(port);
  138. Socket socket = server.accept();
  139. socket.setSoTimeout(500);
  140. ByteArrayStxEtxSerializer serializer = new ByteArrayStxEtxSerializer();
  141. try {
  142. serializer.deserialize(socket.getInputStream());
  143. fail("Expected timeout exception");
  144. } catch (IOException e) {
  145. if (!e.getMessage().startsWith("Read timed out")) {
  146. e.printStackTrace();
  147. fail("Unexpected IO Error:" + e.getMessage());
  148. }
  149. }
  150. server.close();
  151. }
  152. @Test
  153. public void testReadStxEtxOverflow() throws Exception {
  154. int port = SocketUtils.findAvailableServerSocket();
  155. ServerSocket server = ServerSocketFactory.getDefault().createServerSocket(port);
  156. server.setSoTimeout(10000);
  157. SocketTestUtils.testSendStxEtxOverflow(port);
  158. Socket socket = server.accept();
  159. socket.setSoTimeout(5000);
  160. ByteArrayStxEtxSerializer serializer = new ByteArrayStxEtxSerializer();
  161. serializer.setMaxMessageSize(1024);
  162. try {
  163. serializer.deserialize(socket.getInputStream());
  164. fail("Expected message length exceeded exception");
  165. } catch (IOException e) {
  166. if (!e.getMessage().startsWith("ETX not found")) {
  167. e.printStackTrace();
  168. fail("Unexpected IO Error:" + e.getMessage());
  169. }
  170. }
  171. server.close();
  172. }
  173. @Test
  174. public void testReadCrLfTimeout() throws Exception {
  175. int port = SocketUtils.findAvailableServerSocket();
  176. ServerSocket server = ServerSocketFactory.getDefault().createServerSocket(port);
  177. server.setSoTimeout(10000);
  178. SocketTestUtils.testSendCrLfOverflow(port);
  179. Socket socket = server.accept();
  180. socket.setSoTimeout(500);
  181. ByteArrayCrLfSerializer serializer = new ByteArrayCrLfSerializer();
  182. try {
  183. serializer.deserialize(socket.getInputStream());
  184. fail("Expected timout exception");
  185. } catch (IOException e) {
  186. if (!e.getMessage().startsWith("Read timed out")) {
  187. e.printStackTrace();
  188. fail("Unexpected IO Error:" + e.getMessage());
  189. }
  190. }
  191. server.close();
  192. }
  193. @Test
  194. public void testReadCrLfOverflow() throws Exception {
  195. int port = SocketUtils.findAvailableServerSocket();
  196. ServerSocket server = ServerSocketFactory.getDefault().createServerSocket(port);
  197. server.setSoTimeout(10000);
  198. SocketTestUtils.testSendCrLfOverflow(port);
  199. Socket socket = server.accept();
  200. socket.setSoTimeout(5000);
  201. ByteArrayCrLfSerializer serializer = new ByteArrayCrLfSerializer();
  202. serializer.setMaxMessageSize(1024);
  203. try {
  204. serializer.deserialize(socket.getInputStream());
  205. fail("Expected message length exceeded exception");
  206. } catch (IOException e) {
  207. if (!e.getMessage().startsWith("CRLF not found")) {
  208. e.printStackTrace();
  209. fail("Unexpected IO Error:" + e.getMessage());
  210. }
  211. }
  212. server.close();
  213. }
  214. }