Skip to content

Commit

Permalink
Get back jni test classes for native trunk.
Browse files Browse the repository at this point in the history
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
Show file tree
Hide file tree
Showing 3 changed files with 379 additions and 0 deletions.
43 changes: 43 additions & 0 deletions test/org/apache/tomcat/jni/FileTestSuite.java
@@ -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;
}
}
132 changes: 132 additions & 0 deletions test/org/apache/tomcat/jni/SocketServerTestBind.java
@@ -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();
}
}
}
}
204 changes: 204 additions & 0 deletions test/org/apache/tomcat/jni/SocketServerTestSuite.java
@@ -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;
}
}

0 comments on commit 0128653

Please sign in to comment.