Author: jfclere Date: Thu Aug 21 06:19:15 2008 New Revision: 687745 URL: http://svn.apache.org/viewvc?rev=687745&view=rev Log: Add a test related to PR#43327.
Added: tomcat/connectors/trunk/jni/test/org/apache/tomcat/jni/SocketServerTestBind.java Modified: tomcat/connectors/trunk/jni/test/org/apache/tomcat/jni/SocketServerTestSuite.java Added: tomcat/connectors/trunk/jni/test/org/apache/tomcat/jni/SocketServerTestBind.java URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jni/test/org/apache/tomcat/jni/SocketServerTestBind.java?rev=687745&view=auto ============================================================================== --- tomcat/connectors/trunk/jni/test/org/apache/tomcat/jni/SocketServerTestBind.java (added) +++ tomcat/connectors/trunk/jni/test/org/apache/tomcat/jni/SocketServerTestBind.java Thu Aug 21 06:19:15 2008 @@ -0,0 +1,133 @@ +/* + * 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; +import java.net.NetworkInterface; +import java.net.InetAddress; +import java.util.*; + +/** + * 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 SocketServerTestBind extends TestCase { + + private long serverSock = 0; + private int port=6666; + private String host=null; + + public static long serverPool = 0; + + public void testSocketServerTestBind() throws Exception { + + System.out.println("Starting: testSocketServerTestBind"); + /* Load APR library */ + Library.initialize(null); + + /* Create the server socket and listen on it */ + serverPool = Pool.create(0); + long inetAddress = Address.info(host, Socket.APR_UNSPEC, + port, 0, serverPool); + serverSock = Socket.create(Address.getInfo(inetAddress).family, + 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); + + boolean running = true; + while (running) { + /* Accept it */ + long clientSock = Socket.accept(serverSock); + byte [] buf = new byte[1]; + while (Socket.recv(clientSock, buf, 0, 1) == 1) { + } + if (buf[0] != 'A') + break; + } + client.join(); + Library.terminate(); + System.out.println("Done: testSocketServerTestBind"); + } + + /* small client that connects and sends one byte */ + private class Client extends java.lang.Thread { + public void run() { + try { + Enumeration nets = NetworkInterface.getNetworkInterfaces(); + while (nets.hasMoreElements()) { + NetworkInterface net = (NetworkInterface) nets.nextElement(); + + Enumeration addrs = net.getInetAddresses(); + + while (addrs.hasMoreElements()) { + InetAddress ia = (InetAddress)addrs.nextElement(); + System.out.println("Trying: " + ia.getHostAddress()); + java.net.Socket sock = new java.net.Socket(ia, port); + OutputStream ou = sock.getOutputStream(); + ou.write('A'); + ou.flush(); + java.lang.Thread.sleep(10000); + ou.close(); + } + } + } catch(Exception ex ) { + ex.printStackTrace(); + } + + /* Now use localhost to write 'E' */ + try { + java.net.Socket sock = new java.net.Socket("localhost", port); + OutputStream ou = sock.getOutputStream(); + ou.write('E'); + 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; + } +} Modified: 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=687745&r1=687744&r2=687745&view=diff ============================================================================== --- tomcat/connectors/trunk/jni/test/org/apache/tomcat/jni/SocketServerTestSuite.java (original) +++ tomcat/connectors/trunk/jni/test/org/apache/tomcat/jni/SocketServerTestSuite.java Thu Aug 21 06:19:15 2008 @@ -111,6 +111,7 @@ wait = System.currentTimeMillis() - start; if (wait > 1 && ! ok) throw new Exception("non_blocking accept Socket.APR_SO_NONBLOCK failed"); + client.join(); /* Try the same on client socket */ client = new Client(); @@ -136,6 +137,9 @@ wait = System.currentTimeMillis() - start; if (wait < 1) throw new Exception("non_blocking client Socket.APR_SO_NONBLOCK false failed"); + + client.join(); + Library.terminate(); } /* small client that connects and sends one byte */ @@ -165,6 +169,7 @@ { TestSuite suite = new TestSuite( "Tomcat Native Server Socket" ); suite.addTest(new TestSuite(SocketServerTestSuite.class)); + suite.addTest(new TestSuite(SocketServerTestBind.class)); return suite; } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]