[hornetq-commits] JBoss hornetq SVN: r11336 - in branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp: util and 1 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Sep 13 01:26:25 EDT 2011


Author: gaohoward
Date: 2011-09-13 01:26:24 -0400 (Tue, 13 Sep 2011)
New Revision: 11336

Added:
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/AbstractClientStompFrame.java
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/AbstractStompClientConnection.java
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/ClientStompFrame.java
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/ClientStompFrameV10.java
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/ClientStompFrameV11.java
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnection.java
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnectionFactory.java
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnectionV10.java
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnectionV11.java
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactory.java
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactoryFactory.java
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactoryV10.java
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactoryV11.java
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/v11/
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/v11/StompTestBase2.java
   branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/v11/StompTestV11.java
Log:
add tests


Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/AbstractClientStompFrame.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/AbstractClientStompFrame.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/AbstractClientStompFrame.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.util;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+ *
+ */
+public class AbstractClientStompFrame implements ClientStompFrame
+{
+   protected static final String HEADER_RECEIPT = "receipt";
+   
+   protected String command;
+   protected List<Header> headers = new ArrayList<Header>();
+   protected Set<String> headerKeys = new HashSet<String>();
+   protected String body;
+
+   public AbstractClientStompFrame(String command)
+   {
+      this.command = command;
+   }
+   
+   public String toString()
+   {
+      StringBuffer sb = new StringBuffer("Frame: <" + command + ">" + "\n");
+      Iterator<Header> iter = headers.iterator();
+      while (iter.hasNext())
+      {
+         Header h = iter.next();
+         sb.append(h.key + ":" + h.val + "\n");
+      }
+      sb.append("\n");
+      sb.append("<body>" + body + "<body>");
+      return sb.toString();
+   }
+
+   @Override
+   public ByteBuffer toByteBuffer() throws UnsupportedEncodingException
+   {
+      StringBuffer sb = new StringBuffer();
+      sb.append(command + "\n");
+      int n = headers.size();
+      for (int i = 0; i < n; i++)
+      {
+         sb.append(headers.get(i).key + ":" + headers.get(i).val + "\n");
+      }
+      sb.append("\n");
+      sb.append(body);
+      sb.append((char)0);
+      
+      String data = new String(sb.toString());
+      byte[] byteValue = data.getBytes("UTF-8");
+      
+      ByteBuffer buffer = ByteBuffer.allocateDirect(byteValue.length);
+      buffer.put(byteValue);
+      
+      buffer.rewind();
+      return buffer;
+   }
+
+   @Override
+   public boolean needsReply()
+   {
+      if ("CONNECT".equals(command) || headerKeys.contains(HEADER_RECEIPT))
+      {
+         return true;
+      }
+      return false;
+   }
+
+   @Override
+   public void setCommand(String command)
+   {
+      this.command = command;
+   }
+
+   @Override
+   public void addHeader(String key, String val)
+   {
+      headers.add(new Header(key, val));
+      headerKeys.add(key);
+   }
+
+   @Override
+   public void setBody(String body)
+   {
+      this.body = body;
+   }
+   
+   private class Header
+   {
+      public String key;
+      public String val;
+      
+      public Header(String key, String val)
+      {
+         this.key = key;
+         this.val = val;
+      }
+   }
+
+   @Override
+   public String getCommand()
+   {
+      return command;
+   }
+
+   @Override
+   public String getHeader(String header)
+   {
+      if (headerKeys.contains(header))
+      {
+         Iterator<Header> iter = headers.iterator();
+         while (iter.hasNext())
+         {
+            Header h = iter.next();
+            if (h.key.equals(header))
+            {
+               return h.val;
+            }
+         }
+      }
+      return null;
+   }
+
+}

Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/AbstractStompClientConnection.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/AbstractStompClientConnection.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/AbstractStompClientConnection.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,190 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.util;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+ *
+ */
+public abstract class AbstractStompClientConnection implements StompClientConnection
+{
+   protected static final String CONNECT_COMMAND = "CONNECT";
+   protected static final String CONNECTED_COMMAND = "CONNECTED";
+   protected static final String DISCONNECT_COMMAND = "DISCONNECT";
+   
+   protected static final String LOGIN_HEADER = "login";
+   protected static final String PASSCODE_HEADER = "passcode";
+   
+   
+   protected String version;
+   protected String host;
+   protected int port;
+   protected String username;
+   protected String passcode;
+   protected StompFrameFactory factory;
+   protected SocketChannel socketChannel;
+   protected ByteBuffer readBuffer;
+   
+   protected List<Byte> receiveList;
+   
+   protected BlockingQueue<ClientStompFrame> frameQueue = new LinkedBlockingQueue<ClientStompFrame>();
+   
+   protected boolean connected = false;
+
+   public AbstractStompClientConnection(String version, String host, int port) throws IOException
+   {
+      this.version = version;
+      this.host = host;
+      this.port = port;
+      this.factory = StompFrameFactoryFactory.getFactory(version);
+      
+      initSocket();
+   }
+
+   private void initSocket() throws IOException
+   {
+      socketChannel = SocketChannel.open();
+      socketChannel.configureBlocking(true);
+      InetSocketAddress remoteAddr = new InetSocketAddress(host, port);
+      socketChannel.connect(remoteAddr);
+      
+      startReaderThread();
+   }
+   
+   private void startReaderThread()
+   {
+      readBuffer = ByteBuffer.allocateDirect(10240);
+      receiveList = new ArrayList<Byte>(10240);
+      
+      new ReaderThread().start();
+   }
+   
+   public ClientStompFrame sendFrame(ClientStompFrame frame) throws IOException, InterruptedException
+   {
+      ClientStompFrame response = null;
+      ByteBuffer buffer = frame.toByteBuffer();
+      while (buffer.remaining() > 0)
+      {
+         socketChannel.write(buffer);
+      }
+      
+      //now response
+      if (frame.needsReply())
+      {
+         response = receiveFrame();
+      }
+      return response;
+   }
+   
+   public ClientStompFrame receiveFrame() throws InterruptedException
+   {
+      return frameQueue.poll(10, TimeUnit.SECONDS);
+   }
+   
+   //put bytes to byte array.
+   private void receiveBytes(int n) throws UnsupportedEncodingException
+   {
+      readBuffer.rewind();
+      for (int i = 0; i < n; i++)
+      {
+         byte b = readBuffer.get();
+         if (b == 0)
+         {
+            //a new frame got.
+            int sz = receiveList.size();
+            if (sz > 0)
+            {
+               byte[] frameBytes = new byte[sz];
+               for (int j = 0; j < sz; j++)
+               {
+                  frameBytes[j] = receiveList.get(j);
+               }
+               ClientStompFrame frame = factory.createFrame(new String(frameBytes, "UTF-8"));
+               frameQueue.offer(frame);
+               
+               receiveList.clear();
+            }
+         }
+         else
+         {
+            System.out.println("Added to list: " + b);
+            receiveList.add(b);
+         }
+      }
+      //clear readbuffer
+      readBuffer.rewind();
+   }
+   
+   protected void close() throws IOException
+   {
+      socketChannel.close();
+   }
+   
+   private class ReaderThread extends Thread
+   {
+      public void run()
+      {
+         try
+         {
+            int n = socketChannel.read(readBuffer);
+            
+            while (n >= 0)
+            {
+               System.out.println("read " + n);
+               if (n > 0)
+               {
+                  receiveBytes(n);
+               }
+               n = socketChannel.read(readBuffer);
+            }
+            //peer closed
+            close();
+         
+         } 
+         catch (IOException e)
+         {
+            try
+            {
+               close();
+            } 
+            catch (IOException e1)
+            {
+               //ignore
+            }
+         }
+      }
+   }
+
+   public void connect() throws Exception
+   {
+      connect(null, null);
+   }
+   
+   public void connect(String username, String password) throws Exception
+   {
+      throw new RuntimeException("connect method not implemented!");
+   }
+
+}

Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/ClientStompFrame.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/ClientStompFrame.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/ClientStompFrame.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.util;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.ByteBuffer;
+
+/**
+ * 
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+ *
+ * pls use factory to create frames.
+ */
+public interface ClientStompFrame
+{
+
+   public ByteBuffer toByteBuffer() throws UnsupportedEncodingException;
+
+   public boolean needsReply();
+
+   public void setCommand(String command);
+
+   public void addHeader(String string, String string2);
+
+   public void setBody(String string);
+
+   public String getCommand();
+
+   public String getHeader(String header);
+   
+}

Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/ClientStompFrameV10.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/ClientStompFrameV10.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/ClientStompFrameV10.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.util;
+
+/**
+ * 
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+ *
+ * pls use factory to create frames.
+ */
+public class ClientStompFrameV10 extends AbstractClientStompFrame
+{
+
+   public ClientStompFrameV10(String command)
+   {
+      super(command);
+   }
+   
+}

Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/ClientStompFrameV11.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/ClientStompFrameV11.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/ClientStompFrameV11.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.util;
+
+/**
+ * 
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+ *
+ * pls use factory to create frames.
+ */
+public class ClientStompFrameV11 extends AbstractClientStompFrame
+{
+   public ClientStompFrameV11(String command)
+   {
+      super(command);
+   }
+
+   @Override
+   public boolean needsReply()
+   {
+      if ("CONNECT".equals(command) || "STOMP".equals(command) || headerKeys.contains(HEADER_RECEIPT))
+      {
+         return true;
+      }
+      return false;
+   }
+}

Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnection.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnection.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnection.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.util;
+
+import java.io.IOException;
+
+/**
+ * 
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+ *
+ * pls use factory to create frames.
+ */
+public interface StompClientConnection
+{
+   ClientStompFrame sendFrame(ClientStompFrame frame) throws IOException, InterruptedException;
+   
+   ClientStompFrame receiveFrame() throws InterruptedException;
+
+   void connect() throws Exception;
+
+   void disconnect() throws IOException, InterruptedException;
+   
+}
+

Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnectionFactory.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnectionFactory.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnectionFactory.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.util;
+
+import java.io.IOException;
+
+/**
+ * 
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+ *
+ */
+public class StompClientConnectionFactory
+{
+   //create a raw connection to the host.
+   public static StompClientConnection createClientConnection(String version, String host, int port) throws IOException
+   {
+      if ("1.0".equals(version))
+      {
+         return new StompClientConnectionV10(host, port);
+      }
+      if ("1.1".equals(version))
+      {
+         return new StompClientConnectionV11(host, port);
+      }
+      return null;
+   }
+
+   public static void main(String[] args) throws Exception
+   {
+      StompClientConnection connection = StompClientConnectionFactory.createClientConnection("1.0", "localhost", 61613);
+      
+      System.out.println("created a new connection: " + connection);
+      
+      connection.connect();
+      
+      System.out.println("connected.");
+      
+      connection.disconnect();
+      System.out.println("Simple stomp client works.");
+      
+   }
+}

Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnectionV10.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnectionV10.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnectionV10.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.util;
+
+import java.io.IOException;
+
+/**
+ * 
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+ *
+ * pls use factory to create frames.
+ */
+public class StompClientConnectionV10 extends AbstractStompClientConnection
+{
+
+   public StompClientConnectionV10(String host, int port) throws IOException
+   {
+      super("1.0", host, port);
+   }
+
+   public void connect(String username, String passcode) throws IOException, InterruptedException
+   {
+      ClientStompFrame frame = factory.newFrame(CONNECT_COMMAND);
+      frame.addHeader(LOGIN_HEADER, username);
+      frame.addHeader(PASSCODE_HEADER, passcode);
+      
+      ClientStompFrame response = this.sendFrame(frame);
+      System.out.println("Got response : " + response);
+   }
+
+   @Override
+   public void disconnect() throws IOException, InterruptedException
+   {
+      ClientStompFrame frame = factory.newFrame(DISCONNECT_COMMAND);
+      this.sendFrame(frame);
+      
+      close();
+   }
+}

Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnectionV11.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnectionV11.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompClientConnectionV11.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.util;
+
+import java.io.IOException;
+
+/**
+ * 
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+ *
+ */
+public class StompClientConnectionV11 extends AbstractStompClientConnection
+{
+   public static final String STOMP_COMMAND = "STOMP";
+   
+   public static final String ACCEPT_HEADER = "accept-version";
+   public static final String HOST_HEADER = "host";
+   public static final String VERSION_HEADER = "version";
+   public static final String RECEIPT_HEADER = "receipt";
+
+   public StompClientConnectionV11(String host, int port) throws IOException
+   {
+      super("1.1", host, port);
+   }
+
+   public void connect(String username, String passcode) throws IOException, InterruptedException
+   {
+      ClientStompFrame frame = factory.newFrame(CONNECT_COMMAND);
+      frame.addHeader(ACCEPT_HEADER, "1.0,1.1");
+      frame.addHeader(HOST_HEADER, "localhost");
+      if (username != null)
+      {
+         frame.addHeader(LOGIN_HEADER, username);
+         frame.addHeader(PASSCODE_HEADER, passcode);
+      }
+
+      ClientStompFrame response = this.sendFrame(frame);
+      
+      if (response.getCommand().equals(CONNECTED_COMMAND))
+      {
+         String version = response.getHeader(VERSION_HEADER);
+         assert(version.equals("1.1"));
+         
+         this.username = username;
+         this.passcode = passcode;
+         this.connected = true;
+      }
+   }
+
+   public void connect1(String username, String passcode) throws IOException, InterruptedException
+   {
+      ClientStompFrame frame = factory.newFrame(STOMP_COMMAND);
+      frame.addHeader(ACCEPT_HEADER, "1.0,1.1");
+      frame.addHeader(HOST_HEADER, "localhost");
+      if (username != null)
+      {
+         frame.addHeader(LOGIN_HEADER, username);
+         frame.addHeader(PASSCODE_HEADER, passcode);
+      }
+
+      ClientStompFrame response = this.sendFrame(frame);
+      
+      if (response.getCommand().equals(CONNECTED_COMMAND))
+      {
+         String version = response.getHeader(VERSION_HEADER);
+         assert(version.equals("1.1"));
+         
+         this.username = username;
+         this.passcode = passcode;
+         this.connected = true;
+      }
+   }
+
+   @Override
+   public void disconnect() throws IOException, InterruptedException
+   {
+      ClientStompFrame frame = factory.newFrame(DISCONNECT_COMMAND);
+      frame.addHeader(RECEIPT_HEADER, "77");
+      
+      this.sendFrame(frame);
+      
+      close();
+   }
+
+}

Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactory.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactory.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactory.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.util;
+
+/**
+ * 
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+ *
+ */
+public interface StompFrameFactory
+{
+
+   ClientStompFrame createFrame(String data);
+
+   ClientStompFrame newFrame(String command);
+
+}

Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactoryFactory.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactoryFactory.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactoryFactory.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.util;
+
+/**
+ * 
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+ *
+ */
+public class StompFrameFactoryFactory
+{
+   public static StompFrameFactory getFactory(String version)
+   {
+      if ("1.0".equals(version))
+      {
+         return new StompFrameFactoryV10();
+      }
+      
+      if ("1.1".equals(version))
+      {
+         return new StompFrameFactoryV11();
+      }
+      
+      return null;
+   }
+
+}

Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactoryV10.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactoryV10.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactoryV10.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.util;
+
+import java.util.StringTokenizer;
+
+/**
+ * 
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+ *
+ * 1.0 frames
+ * 
+ * 1. CONNECT
+ * 2. CONNECTED
+ * 3. SEND
+ * 4. SUBSCRIBE
+ * 5. UNSUBSCRIBE
+ * 6. BEGIN
+ * 7. COMMIT
+ * 8. ACK
+ * 9. ABORT
+ * 10. DISCONNECT
+ * 11. MESSAGE
+ * 12. RECEIPT
+ * 13. ERROR
+ */
+public class StompFrameFactoryV10 implements StompFrameFactory
+{
+
+   public ClientStompFrame createFrame(String data)
+   {
+      System.out.println("Raw data is: " + data + "|");
+      
+      //split the string at "\n\n"
+      String[] dataFields = data.split("\n\n");
+      
+      StringTokenizer tokenizer = new StringTokenizer(dataFields[0], "\n");
+      
+      String command = tokenizer.nextToken();
+      ClientStompFrame frame = new ClientStompFrameV10(command);
+      
+      while (tokenizer.hasMoreTokens())
+      {
+         String header = tokenizer.nextToken();
+         String[] fields = header.split(":");
+         frame.addHeader(fields[0], fields[1]);
+      }
+      
+      //body (without null byte)
+      if (dataFields.length == 2)
+      {
+         frame.setBody(dataFields[1]);      
+      }
+      return frame;
+   }
+
+   @Override
+   public ClientStompFrame newFrame(String command)
+   {
+      return new ClientStompFrameV10(command);
+   }
+
+}

Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactoryV11.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactoryV11.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/util/StompFrameFactoryV11.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.util;
+
+import java.util.StringTokenizer;
+
+/**
+ * 
+ * @author <a href="mailto:hgao at redhat.com">Howard Gao</a>
+ *
+ * 1.1 frames
+ * 
+ * 1. CONNECT/STOMP(new)
+ * 2. CONNECTED
+ * 3. SEND
+ * 4. SUBSCRIBE
+ * 5. UNSUBSCRIBE
+ * 6. BEGIN
+ * 7. COMMIT
+ * 8. ACK
+ * 9. NACK (new)
+ * 10. ABORT
+ * 11. DISCONNECT
+ * 12. MESSAGE
+ * 13. RECEIPT
+ * 14. ERROR
+ */
+public class StompFrameFactoryV11 implements StompFrameFactory
+{
+
+   @Override
+
+   public ClientStompFrame createFrame(String data)
+   {
+      //split the string at "\n\n"
+      String[] dataFields = data.split("\n\n");
+      
+      StringTokenizer tokenizer = new StringTokenizer(dataFields[0], "\n");
+      
+      String command = tokenizer.nextToken();
+      ClientStompFrame frame = new ClientStompFrameV11(command);
+      
+      while (tokenizer.hasMoreTokens())
+      {
+         String header = tokenizer.nextToken();
+         String[] fields = header.split(":");
+         frame.addHeader(fields[0], fields[1]);
+      }
+      
+      //body (without null byte)
+      if (dataFields.length == 2)
+      {
+         frame.setBody(dataFields[1]);      
+      }
+      return frame;
+   }
+
+   @Override
+   public ClientStompFrame newFrame(String command)
+   {
+      return new ClientStompFrameV11(command);
+   }
+
+}

Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/v11/StompTestBase2.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/v11/StompTestBase2.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/v11/StompTestBase2.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,195 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.v11;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.jms.BytesMessage;
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.jms.MessageProducer;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.jms.Topic;
+
+import junit.framework.Assert;
+
+import org.hornetq.api.core.TransportConfiguration;
+import org.hornetq.core.config.Configuration;
+import org.hornetq.core.logging.Logger;
+import org.hornetq.core.remoting.impl.invm.InVMAcceptorFactory;
+import org.hornetq.core.remoting.impl.invm.InVMConnectorFactory;
+import org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory;
+import org.hornetq.core.remoting.impl.netty.TransportConstants;
+import org.hornetq.core.server.HornetQServer;
+import org.hornetq.core.server.HornetQServers;
+import org.hornetq.jms.client.HornetQJMSConnectionFactory;
+import org.hornetq.jms.server.JMSServerManager;
+import org.hornetq.jms.server.config.JMSConfiguration;
+import org.hornetq.jms.server.config.impl.JMSConfigurationImpl;
+import org.hornetq.jms.server.config.impl.JMSQueueConfigurationImpl;
+import org.hornetq.jms.server.config.impl.TopicConfigurationImpl;
+import org.hornetq.jms.server.impl.JMSServerManagerImpl;
+import org.hornetq.spi.core.protocol.ProtocolType;
+import org.hornetq.tests.unit.util.InVMContext;
+import org.hornetq.tests.util.UnitTestCase;
+
+public abstract class StompTestBase2 extends UnitTestCase
+{
+   private static final transient Logger log = Logger.getLogger(StompTestBase2.class);
+
+   protected String hostname = "127.0.0.1";
+   
+   protected int port = 61613;
+
+   private ConnectionFactory connectionFactory;
+
+   private Connection connection;
+
+   protected Session session;
+
+   protected Queue queue;
+
+   protected Topic topic;
+
+   protected JMSServerManager server;
+   
+   protected String defUser = "brianm";
+   
+   protected String defPass = "wombats";
+   
+   
+
+   // Implementation methods
+   // -------------------------------------------------------------------------
+   protected void setUp() throws Exception
+   {
+      super.setUp();
+
+      server = createServer();
+      server.start();
+      connectionFactory = createConnectionFactory();
+
+      connection = connectionFactory.createConnection();
+      session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+      queue = session.createQueue(getQueueName());
+      topic = session.createTopic(getTopicName());
+      connection.start();
+   }
+
+   /**
+   * @return
+   * @throws Exception 
+   */
+   protected JMSServerManager createServer() throws Exception
+   {
+      Configuration config = createBasicConfig();
+      config.setSecurityEnabled(false);
+      config.setPersistenceEnabled(false);
+
+      Map<String, Object> params = new HashMap<String, Object>();
+      params.put(TransportConstants.PROTOCOL_PROP_NAME, ProtocolType.STOMP.toString());
+      params.put(TransportConstants.PORT_PROP_NAME, TransportConstants.DEFAULT_STOMP_PORT);
+      TransportConfiguration stompTransport = new TransportConfiguration(NettyAcceptorFactory.class.getName(), params);
+      config.getAcceptorConfigurations().add(stompTransport);
+      config.getAcceptorConfigurations().add(new TransportConfiguration(InVMAcceptorFactory.class.getName()));
+      HornetQServer hornetQServer = HornetQServers.newHornetQServer(config, defUser, defPass);
+
+      JMSConfiguration jmsConfig = new JMSConfigurationImpl();
+      jmsConfig.getQueueConfigurations()
+               .add(new JMSQueueConfigurationImpl(getQueueName(), null, false, getQueueName()));
+      jmsConfig.getTopicConfigurations().add(new TopicConfigurationImpl(getTopicName(), getTopicName()));
+      server = new JMSServerManagerImpl(hornetQServer, jmsConfig);
+      server.setContext(new InVMContext());
+      return server;
+   }
+
+   protected void tearDown() throws Exception
+   {
+      connection.close();
+
+      server.stop();
+
+      super.tearDown();
+   }
+
+   protected ConnectionFactory createConnectionFactory()
+   {
+      return new HornetQJMSConnectionFactory(false, new TransportConfiguration(InVMConnectorFactory.class.getName()));
+   }
+
+   protected String getQueueName()
+   {
+      return "test";
+   }
+
+   protected String getQueuePrefix()
+   {
+      return "jms.queue.";
+   }
+
+   protected String getTopicName()
+   {
+      return "testtopic";
+   }
+
+   protected String getTopicPrefix()
+   {
+      return "jms.topic.";
+   }
+
+   public void sendMessage(String msg) throws Exception
+   {
+      sendMessage(msg, queue);
+   }
+
+   public void sendMessage(String msg, Destination destination) throws Exception
+   {
+      MessageProducer producer = session.createProducer(destination);
+      TextMessage message = session.createTextMessage(msg);
+      producer.send(message);
+   }
+
+   public void sendMessage(byte[] data, Destination destination) throws Exception
+   {
+      sendMessage(data, "foo", "xyz", destination);
+   }
+
+   public void sendMessage(String msg, String propertyName, String propertyValue) throws Exception
+   {
+      sendMessage(msg.getBytes("UTF-8"), propertyName, propertyValue, queue);
+   }
+
+   public void sendMessage(byte[] data, String propertyName, String propertyValue, Destination destination) throws Exception
+   {
+      MessageProducer producer = session.createProducer(destination);
+      BytesMessage message = session.createBytesMessage();
+      message.setStringProperty(propertyName, propertyValue);
+      message.writeBytes(data);
+      producer.send(message);
+   }
+
+}

Added: branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/v11/StompTestV11.java
===================================================================
--- branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/v11/StompTestV11.java	                        (rev 0)
+++ branches/STOMP11/tests/integration-tests/src/test/java/org/hornetq/tests/integration/stomp/v11/StompTestV11.java	2011-09-13 05:26:24 UTC (rev 11336)
@@ -0,0 +1,31 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.hornetq.tests.integration.stomp.v11;
+
+import org.hornetq.core.logging.Logger;
+import org.hornetq.tests.integration.stomp.util.StompClientConnection;
+
+public class StompTestV11 extends StompTestBase2
+{
+   private static final transient Logger log = Logger.getLogger(StompTestV11.class);
+   
+   public void testConnection() throws Exception
+   {
+      StompClientConnection connection = StompClientConnectionFactory.createClientConnection("1.1", hostname, port);
+   }
+}



More information about the hornetq-commits mailing list