Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Get back jni test classes for native trunk.
Copy over from tc5.5 connectors. git-svn-id: https://svn.apache.org/repos/asf/tomcat/native/trunk@815949 13f79535-47bb-0310-9956-ffa450edef68
- Loading branch information
Rainer Jung
committed
Sep 16, 2009
1 parent
90f66a8
commit 0128653
Showing
3 changed files
with
379 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,43 @@ | |||
/* | |||
* 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; | |||
|
|||
/** | |||
* A basic test suite that tests File IO. | |||
* | |||
* @author Mladen Turk | |||
* @version $Revision$, $Date$ | |||
* @see org.apache.tomcat.jni | |||
*/ | |||
public class FileTestSuite | |||
{ | |||
|
|||
public static void main(String[] args) { | |||
TestRunner.run(suite()); | |||
} | |||
|
|||
public static Test suite() | |||
{ | |||
TestSuite suite = new TestSuite( "Tomcat Native File IO" ); | |||
return suite; | |||
} | |||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,132 @@ | |||
/* | |||
* 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.io.InputStream; | |||
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); | |||
Socket.timeoutSet(clientSock, 10000); | |||
byte [] buf = new byte[1]; | |||
while (Socket.recv(clientSock, buf, 0, 1) == 1) { | |||
if (buf[0] == 'A') { | |||
buf[0] = 'Z'; | |||
Socket.send(clientSock, buf, 0, 1); | |||
} | |||
} | |||
Socket.close(clientSock); | |||
if (buf[0] != 'Z') | |||
running = false; | |||
} | |||
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); | |||
sock.setSoTimeout(10000); | |||
OutputStream ou = sock.getOutputStream(); | |||
InputStream in = sock.getInputStream(); | |||
ou.write('A'); | |||
ou.flush(); | |||
int rep = in.read(); | |||
sock.close(); | |||
if (rep != 'Z') | |||
throw new Exception("Read wrong data"); | |||
} | |||
} | |||
} 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(); | |||
sock.close(); | |||
} catch(Exception ex ) { | |||
ex.printStackTrace(); | |||
} | |||
} | |||
} | |||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,204 @@ | |||
/* | |||
* 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; | |||
private int port=6666; | |||
private String host="localhost"; | |||
|
|||
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(host, Socket.APR_INET, | |||
port, 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) { | |||
Socket.close(serverSock); | |||
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) { | |||
Socket.close(clientSock); | |||
Socket.close(serverSock); | |||
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) { | |||
Socket.close(clientSock); | |||
Socket.close(serverSock); | |||
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) { | |||
Socket.close(serverSock); | |||
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) { | |||
Socket.close(clientSock); | |||
Socket.close(serverSock); | |||
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) { | |||
Socket.close(serverSock); | |||
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) { | |||
Socket.close(clientSock); | |||
Socket.close(serverSock); | |||
throw new Exception("non_blocking accept Socket.APR_SO_NONBLOCK failed"); | |||
} | |||
client.join(); | |||
Socket.close(clientSock); | |||
|
|||
/* 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) { | |||
Socket.close(clientSock); | |||
Socket.close(serverSock); | |||
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) { | |||
Socket.close(clientSock); | |||
Socket.close(serverSock); | |||
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) { | |||
Socket.close(clientSock); | |||
Socket.close(serverSock); | |||
throw new Exception("non_blocking client Socket.APR_SO_NONBLOCK false failed"); | |||
} | |||
|
|||
client.join(); | |||
Socket.close(clientSock); | |||
Socket.close(serverSock); | |||
Library.terminate(); | |||
} | |||
|
|||
/* 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(host, port); | |||
} | |||
public void run() { | |||
try { | |||
OutputStream ou = sock.getOutputStream(); | |||
ou.write('A'); | |||
ou.flush(); | |||
java.lang.Thread.sleep(10000); | |||
sock.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)); | |||
suite.addTest(new TestSuite(SocketServerTestBind.class)); | |||
return suite; | |||
} | |||
} |