1   /*
2    * $Id: XmlMessageProtocolTestCase.java 7963 2007-08-21 08:53:15Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.providers.tcp.protocols;
12  
13  import org.mule.tck.AbstractMuleTestCase;
14  
15  import java.io.ByteArrayInputStream;
16  import java.io.IOException;
17  import java.io.InputStream;
18  
19  /**
20   * Test by reading characters from a fixed StringBuffer instead of a TCP port.
21   */
22  public class XmlMessageProtocolTestCase extends AbstractMuleTestCase
23  {
24      private XmlMessageProtocol xmp;
25  
26      protected void setProtocol(XmlMessageProtocol xmp)
27      {
28          this.xmp = xmp;
29      }
30  
31      protected byte[] read(InputStream is) throws IOException
32      {
33          return(byte[]) xmp.read(is);
34      }
35  
36      protected void doSetUp() throws Exception
37      {
38          setProtocol(new XmlMessageProtocol());
39      }
40  
41      protected void doTearDown() throws Exception
42      {
43          xmp = null;
44      }
45  
46      public void testSingleMessage() throws Exception
47      {
48          String msgData = "<?xml version=\"1.0\"?><data>hello</data>";
49  
50          ByteArrayInputStream bais = new ByteArrayInputStream(msgData.getBytes());
51  
52          byte[] result = read(bais);
53          assertNotNull(result);
54          assertEquals(msgData, new String(result));
55  
56          assertNull(read(bais));
57      }
58  
59      public void testTwoMessages() throws Exception
60      {
61          String[] msgData = {"<?xml version=\"1.0\"?><data>hello</data>",
62              "<?xml version=\"1.0\"?><data>goodbye</data>"};
63  
64          ByteArrayInputStream bais = new ByteArrayInputStream((msgData[0] + msgData[1]).getBytes());
65  
66          byte[] result = read(bais);
67          assertNotNull(result);
68          assertEquals(msgData[0], new String(result));
69  
70          result = read(bais);
71          assertNotNull(result);
72          assertEquals(msgData[1], new String(result));
73  
74          assertNull(read(bais));
75      }
76  
77      public void testMultipleMessages() throws Exception
78      {
79          String[] msgData = {"<?xml version=\"1.0\"?><data>1</data>",
80              "<?xml version=\"1.0\"?><data>22</data>", "<?xml version=\"1.0\"?><data>333</data>",
81              "<?xml version=\"1.0\"?><data>4444</data>",
82              "<?xml version=\"1.0\"?><data>55555</data>",
83              "<?xml version=\"1.0\"?><data>666666</data>",
84              "<?xml version=\"1.0\"?><data>7777777</data>",
85              "<?xml version=\"1.0\"?><data>88888888</data>",
86              "<?xml version=\"1.0\"?><data>999999999</data>",
87              "<?xml version=\"1.0\"?><data>aaaaaaaaaa</data>",
88              "<?xml version=\"1.0\"?><data>bbbbbbbbbbb</data>",
89              "<?xml version=\"1.0\"?><data>cccccccccccc</data>",
90              "<?xml version=\"1.0\"?><data>ddddddddddddd</data>",
91              "<?xml version=\"1.0\"?><data>eeeeeeeeeeeeee</data>",
92              "<?xml version=\"1.0\"?><data>fffffffffffffff</data>"};
93  
94          StringBuffer allMsgData = new StringBuffer();
95  
96          for (int i = 0; i < msgData.length; i++)
97          {
98              allMsgData.append(msgData[i]);
99          }
100 
101         ByteArrayInputStream bais = new ByteArrayInputStream(allMsgData.toString().getBytes());
102 
103         byte[] result;
104 
105         for (int i = 0; i < msgData.length; i++)
106         {
107             result = read(bais);
108             assertNotNull(result);
109             assertEquals(msgData[i], new String(result));
110         }
111 
112         assertNull(read(bais));
113     }
114 
115     public void testSlowStream() throws Exception
116     {
117         String msgData = "<?xml version=\"1.0\"?><data>hello</data>";
118 
119         SlowInputStream bais = new SlowInputStream(msgData.getBytes());
120 
121         byte[] result = read(bais);
122         assertNotNull(result);
123         // only get the first character!  use XmlMessageEOFProtocol instead
124         assertEquals(msgData.substring(0, 1), new String(result));
125     }
126 
127 }