Author: jfclere
Date: Wed Feb 27 05:07:21 2008
New Revision: 631578

URL: http://svn.apache.org/viewvc?rev=631578&view=rev
Log:
Add a test (for the read timeouts).

Added:
    
tomcat/connectors/trunk/jni/test/org/apache/tomcat/jni/SocketServerTestSuite.java
Modified:
    tomcat/connectors/trunk/jni/build.xml

Modified: tomcat/connectors/trunk/jni/build.xml
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jni/build.xml?rev=631578&r1=631577&r2=631578&view=diff
==============================================================================
--- tomcat/connectors/trunk/jni/build.xml (original)
+++ tomcat/connectors/trunk/jni/build.xml Wed Feb 27 05:07:21 2008
@@ -260,7 +260,7 @@
         </copy>
         <javac srcdir="${build.src}/test"
             destdir="${build.dest}/test"
-            debug="${debug}"
+            debug="on"
             deprecation="${deprecation}"
             optimize="${optimize}">
 
@@ -271,11 +271,21 @@
     <!-- =================================================================== 
-->
     <!-- Junit tests                                                         
-->
     <!-- =================================================================== 
-->
-    <target name="test.file" depends="compile-tests">
+    <target name="test" depends="compile-tests">
         <echo message="Running Tomcat Native package tests ..."/>
         <java dir="${test.dir}" classname="${test.runner}" fork="yes" 
failonerror="${test.failonerror}">
             <arg value="org.apache.tomcat.jni.FileTestSuite"/>
             <classpath refid="test.classpath"/>
+            <env key="PATH" path="${tc.library.path}:${java.library.path}"/>
+            <env key="Path" path="${tc.library.path}:${java.library.path}"/>
+            <jvmarg value="-Djava.library.path=${tc.library.path}"/>
+        </java>
+        <java dir="${test.dir}" classname="${test.runner}" fork="yes" 
failonerror="${test.failonerror}">
+            <arg value="org.apache.tomcat.jni.SocketServerTestSuite"/>
+            <classpath refid="test.classpath"/>
+            <env key="PATH" path="${tc.library.path}:${java.library.path}"/>
+            <env key="Path" path="${tc.library.path}:${java.library.path}"/>
+            <jvmarg value="-Djava.library.path=${tc.library.path}"/>
         </java>
     </target>
 

Added: 
tomcat/connectors/trunk/jni/test/org/apache/tomcat/jni/SocketServerTestSuite.java
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jni/test/org/apache/tomcat/jni/SocketServerTestSuite.java?rev=631578&view=auto
==============================================================================
--- 
tomcat/connectors/trunk/jni/test/org/apache/tomcat/jni/SocketServerTestSuite.java
 (added)
+++ 
tomcat/connectors/trunk/jni/test/org/apache/tomcat/jni/SocketServerTestSuite.java
 Wed Feb 27 05:07:21 2008
@@ -0,0 +1,167 @@
+/*
+ * 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.tomcat.jni;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+import junit.framework.TestCase;
+
+import java.io.OutputStream;
+
+/**
+ * A basic test suite that tests Socket Server feature.
+ * 
+ * @author Jean-Frederic Clere
+ * @version $Revision: 466585 $, $Date: 2006-10-22 00:16:34 +0200 (Sun, 22 Oct 
2006) $ 
+ * @see org.apache.tomcat.jni
+ */
+public class SocketServerTestSuite extends TestCase {
+
+    private long serverSock = 0;
+    public static long serverPool = 0;
+
+    public void testSocketServerTestSuite() throws Exception {
+
+        /* Load APR library */
+        Library.initialize(null);
+
+        /* Create the server socket and listen on it */
+        serverPool = Pool.create(0);
+        long inetAddress = Address.info("127.0.0.1", Socket.APR_INET,
+                                        6666, 0, serverPool);
+        serverSock = Socket.create(Socket.APR_INET, Socket.SOCK_STREAM,
+                                   Socket.APR_PROTO_TCP, serverPool);
+        int rc = Socket.bind(serverSock, inetAddress);
+        if (rc != 0) {
+            throw(new Exception("Can't bind: " + Error.strerror(rc)));
+        }
+        Socket.listen(serverSock, 5);
+
+        /* Start the client that connects to the server */
+        Client client = new Client();
+        client.start(); 
+        java.lang.Thread.sleep(100);
+    
+        /* Accept it */
+        long clientSock = Socket.accept(serverSock);
+
+        /* Try 2 milliseconds timeout */
+        Socket.timeoutSet(clientSock, 2000);
+        long timeout = Socket.timeoutGet(clientSock);
+        if (timeout != 2000)
+            throw new Exception("Socket.timeoutGet clientSock failed");
+
+        long start = System.currentTimeMillis();
+        byte [] buf = new byte[1];
+        while (Socket.recv(clientSock, buf, 0, 1) == 1) {
+        }
+        long wait = System.currentTimeMillis() - start;
+        if (wait < 1 || wait >3)
+            throw new Exception("2 milliseconds client Socket.timeoutSet 
failed");
+
+        /* Try 2 milliseconds timeout on accept socket */
+        Socket.timeoutSet(serverSock, 2000);
+        timeout = Socket.timeoutGet(serverSock);
+        if (timeout != 2000)
+            throw new Exception("Socket.timeoutGet serverSock failed");
+
+        start = System.currentTimeMillis();
+        boolean ok = false;
+        try {
+            clientSock = Socket.accept(serverSock);
+        } catch (Exception ex) {
+            ok = true;
+        }
+        wait = System.currentTimeMillis() - start;
+        if (wait < 1 || wait >3 && ! ok)
+            throw new Exception("2 milliseconds accept Socket.timeoutSet 
failed");
+
+        /* Try APR_SO_NONBLOCK */
+        Socket.optSet(serverSock, Socket.APR_SO_NONBLOCK, 1);
+        int val = Socket.optGet(serverSock, Socket.APR_SO_NONBLOCK);
+        if (val != 1)
+            throw new Exception("Socket.optGet serverSock failed");
+
+        start = System.currentTimeMillis();
+        ok = false;
+        try {
+            clientSock = Socket.accept(serverSock);
+        } catch (Exception ex) {
+            ok = true;
+        }
+        wait = System.currentTimeMillis() - start;
+        if (wait > 1 && ! ok)
+            throw new Exception("non_blocking accept Socket.APR_SO_NONBLOCK 
failed");
+
+        /* Try the same on client socket */
+        client = new Client();
+        client.start(); 
+        java.lang.Thread.sleep(100);
+        clientSock = Socket.accept(serverSock);
+        Socket.optSet(clientSock, Socket.APR_SO_NONBLOCK, 1);
+        val = Socket.optGet(clientSock, Socket.APR_SO_NONBLOCK);
+        if (val != 1)
+            throw new Exception("Socket.optGet clientSock failed");
+        start = System.currentTimeMillis();
+        while (Socket.recv(clientSock, buf, 0, 1) == 1) {
+        }
+        wait = System.currentTimeMillis() - start;
+        if (wait > 1)
+            throw new Exception("non_blocking client Socket.APR_SO_NONBLOCK 
failed");
+
+        /* Now blocking */
+        Socket.optSet(clientSock, Socket.APR_SO_NONBLOCK, 0);
+        start = System.currentTimeMillis();
+        while (Socket.recv(clientSock, buf, 0, 1) == 1) {
+        }
+        wait = System.currentTimeMillis() - start;
+        if (wait < 1)
+            throw new Exception("non_blocking client Socket.APR_SO_NONBLOCK 
false failed");
+    }
+
+    /* small client that connects and sends one byte */
+    private class Client extends java.lang.Thread {
+        java.net.Socket sock;
+        public Client() throws Exception {
+            sock = new java.net.Socket("localhost", 6666);
+        }
+        public void run() {
+            try {
+                OutputStream ou = sock.getOutputStream();
+                ou.write('A');
+                ou.flush();
+                java.lang.Thread.sleep(10000);
+                ou.close();
+            } catch(Exception ex ) {
+                ex.printStackTrace();
+            }
+        }
+    }
+    
+    public static void main(String[] args) {
+        TestRunner.run(suite());
+    }
+    
+    public static Test suite()
+    {
+        TestSuite suite = new TestSuite( "Tomcat Native Server Socket" );
+        suite.addTest(new TestSuite(SocketServerTestSuite.class));
+        return suite;
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to