You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2011/06/17 15:03:31 UTC
svn commit: r1136867 - in /tomcat/trunk/test/org/apache/catalina/comet: ./
TestCometProcessor.java
Author: markt
Date: Fri Jun 17 13:03:30 2011
New Revision: 1136867
URL: http://svn.apache.org/viewvc?rev=1136867&view=rev
Log:
Add a simple Comet test case
Added:
tomcat/trunk/test/org/apache/catalina/comet/
tomcat/trunk/test/org/apache/catalina/comet/TestCometProcessor.java (with props)
Added: tomcat/trunk/test/org/apache/catalina/comet/TestCometProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/comet/TestCometProcessor.java?rev=1136867&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/comet/TestCometProcessor.java (added)
+++ tomcat/trunk/test/org/apache/catalina/comet/TestCometProcessor.java Fri Jun 17 13:03:30 2011
@@ -0,0 +1,174 @@
+/*
+ * 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.apache.catalina.comet;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+
+import javax.net.SocketFactory;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.comet.CometEvent.EventType;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.catalina.startup.TomcatBaseTest;
+
+public class TestCometProcessor extends TomcatBaseTest {
+
+ public void testSimpleCometClient() throws Exception {
+
+ if (!isCometSupported()) {
+ return;
+ }
+
+ // Setup Tomcat instance
+ Tomcat tomcat = getTomcatInstance();
+ Context root = tomcat.addContext("", TEMP_DIR);
+ Tomcat.addServlet(root, "comet", new SimpleCometServlet());
+ root.addServletMapping("/", "comet");
+ tomcat.start();
+
+ // Create connection to Comet servlet
+ final Socket socket =
+ SocketFactory.getDefault().createSocket("localhost", getPort());
+ socket.setSoTimeout(60000);
+
+ final OutputStream os = socket.getOutputStream();
+ String requestLine = "POST http://localhost:" + getPort() +
+ "/ HTTP/1.1\r\n";
+ os.write(requestLine.getBytes());
+ os.write("transfer-encoding: chunked\r\n".getBytes());
+ os.write("\r\n".getBytes());
+
+ Thread writeThread = new Thread(new Runnable() {
+
+ @Override
+ public void run() {
+ try {
+ for (int i = 0; i < 4; i++) {
+ os.write("4\r\n".getBytes());
+ os.write("PING\r\n".getBytes());
+ os.flush();
+ Thread.sleep(2000);
+ }
+ os.write("0\r\n".getBytes());
+ os.write("\r\n".getBytes());
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
+ }
+ });
+
+ writeThread.start();
+
+ StringBuffer buffer = new StringBuffer();
+ socket.setSoTimeout(25000);
+ InputStream is = socket.getInputStream();
+ int c = is.read();
+ while (c > -1) {
+ buffer.append((char) c);
+ c = is.read();
+ }
+ os.close();
+
+ // Validate response
+ String[] response = buffer.toString().split("\r\n");
+ // Expect 26 lines
+ assertEquals(26, response.length);
+ assertEquals("HTTP/1.1 200 OK", response[0]);
+ assertEquals("Server: Apache-Coyote/1.1", response[1]);
+ assertTrue(response[2].startsWith("Set-Cookie: JSESSIONID="));
+ assertEquals("Content-Type: text/plain;charset=ISO-8859-1", response[3]);
+ assertEquals("Transfer-Encoding: chunked", response[4]);
+ assertTrue(response[5].startsWith("Date: "));
+ assertEquals("", response[6]);
+ assertEquals("7", response[7]);
+ assertEquals("BEGIN", response[8]);
+ assertEquals("", response[9]);
+ assertEquals("17", response[10]);
+ assertEquals("Client: READ: 4 bytes", response[11]);
+ assertEquals("", response[12]);
+ assertEquals("17", response[13]);
+ assertEquals("Client: READ: 4 bytes", response[14]);
+ assertEquals("", response[15]);
+ assertEquals("17", response[16]);
+ assertEquals("Client: READ: 4 bytes", response[17]);
+ assertEquals("", response[18]);
+ assertEquals("17", response[19]);
+ assertEquals("Client: READ: 4 bytes", response[20]);
+ assertEquals("", response[21]);
+ assertEquals("d", response[22]);
+ assertEquals("Client: END", response[23]);
+ assertEquals("", response[24]);
+ assertEquals("0", response[25]);
+ }
+
+ private boolean isCometSupported() {
+ String protocol =
+ getTomcatInstance().getConnector().getProtocolHandlerClassName();
+ if (protocol.indexOf("Nio") == -1 && protocol.indexOf("Apr") == -1) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ private static class SimpleCometServlet extends HttpServlet
+ implements CometProcessor {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void event(CometEvent event) throws IOException,
+ ServletException {
+
+ HttpServletRequest request = event.getHttpServletRequest();
+ HttpServletResponse response = event.getHttpServletResponse();
+
+ HttpSession session = request.getSession(true);
+ session.setMaxInactiveInterval(30);
+
+ if (event.getEventType() == EventType.BEGIN) {
+ response.setContentType("text/plain");
+ response.getWriter().println("BEGIN");
+ } else if (event.getEventType() == EventType.READ) {
+ InputStream is = request.getInputStream();
+ int count = 0;
+ while (is.available() > 0) {
+ is.read();
+ count ++;
+ }
+ String msg = "READ: " + count + " bytes";
+ response.getWriter().println("Client: " + msg);
+ } else if (event.getEventType() == EventType.END) {
+ String msg = "END";
+ response.getWriter().println("Client: " + msg);
+ event.close();
+ } else {
+ response.getWriter().println(event.getEventSubType());
+ event.close();
+ }
+ response.getWriter().flush();
+ }
+ }
+}
Propchange: tomcat/trunk/test/org/apache/catalina/comet/TestCometProcessor.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org