This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat-native.git
commit 7cfcb51ad0058692c53483d68c633e60e5a7afa0 Author: Mark Thomas <ma...@apache.org> AuthorDate: Wed Jun 15 10:37:01 2022 +0100 Remove tests that depend on removed API --- test/org/apache/tomcat/jni/AbstractJniTest.java | 46 ---- test/org/apache/tomcat/jni/TestFile.java | 67 ------ test/org/apache/tomcat/jni/TestSocketServer.java | 233 --------------------- .../jni/TestSocketServerAnyLocalAddress.java | 207 ------------------ 4 files changed, 553 deletions(-) diff --git a/test/org/apache/tomcat/jni/AbstractJniTest.java b/test/org/apache/tomcat/jni/AbstractJniTest.java deleted file mode 100644 index 84ed1ac29..000000000 --- a/test/org/apache/tomcat/jni/AbstractJniTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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 org.junit.After; -import org.junit.Assume; -import org.junit.Before; - -public abstract class AbstractJniTest { - - private boolean nativeLibraryPresent = false; - - @Before - public void initBase() throws Exception { - try { - Library.initialize(null); - nativeLibraryPresent = true; - } catch (LibraryNotFoundError lnfe) { - nativeLibraryPresent = false; - } - Assume.assumeTrue("APR Library not found", nativeLibraryPresent); - } - - - @After - public void destroyBase() { - if (nativeLibraryPresent) { - Library.terminate(); - } - } - -} diff --git a/test/org/apache/tomcat/jni/TestFile.java b/test/org/apache/tomcat/jni/TestFile.java deleted file mode 100644 index 433939f22..000000000 --- a/test/org/apache/tomcat/jni/TestFile.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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 org.junit.Assert; -import org.junit.Test; - - -public class TestFile extends AbstractJniTest { - - @Test - public void testInfoGet() throws Exception { - String testFile = "test/org/apache/tomcat/jni/TestFile.java"; - java.io.File file = new java.io.File(testFile); - Assert.assertTrue("File " + testFile + " does not exist!", file.exists()); - - Library.initialize(null); - long pool = Pool.create(0L); - int openFlags = File.APR_FOPEN_READ | File.APR_FOPEN_BUFFERED | File.APR_FOPEN_XTHREAD; - int openPermissions = File.APR_FPROT_OS_DEFAULT; - int statFlags = File.APR_FINFO_MIN; - long fd = File.open(testFile, openFlags, openPermissions, pool); - FileInfo fileInfo = new FileInfo(); - for (int i = 0; i < 100000; i++) { - org.apache.tomcat.jni.File.infoGet(fileInfo, statFlags, fd); - @SuppressWarnings("unused") - String info = inspectFileInfo(fileInfo); - } - } - - public static String inspectFileInfo(FileInfo fileInfo) { - String result = fileInfo.toString() + " : {" + - String.format("\n pool : %d", Long.valueOf(fileInfo.pool)) + - String.format("\n valid : %d", Integer.valueOf(fileInfo.valid)) + - String.format("\n protection : %d", Integer.valueOf(fileInfo.protection)) + - String.format("\n filetype : %d", Integer.valueOf(fileInfo.filetype)) + - String.format("\n user : %d", Integer.valueOf(fileInfo.user)) + - String.format("\n group : %d", Integer.valueOf(fileInfo.group)) + - String.format("\n inode : %d", Integer.valueOf(fileInfo.inode)) + - String.format("\n device : %d", Integer.valueOf(fileInfo.device)) + - String.format("\n nlink : %d", Integer.valueOf(fileInfo.nlink)) + - String.format("\n size : %d", Long.valueOf(fileInfo.size)) + - String.format("\n csize : %d", Long.valueOf(fileInfo.csize)) + - String.format("\n atime : %d", Long.valueOf(fileInfo.atime)) + - String.format("\n mtime : %d", Long.valueOf(fileInfo.mtime)) + - String.format("\n ctime : %d", Long.valueOf(fileInfo.ctime)) + - String.format("\n fname : %s", fileInfo.fname) + - String.format("\n name : %s", fileInfo.name) + - String.format("\n filehand : %d", Long.valueOf(fileInfo.filehand)) + - "\n}"; - return result; - } -} \ No newline at end of file diff --git a/test/org/apache/tomcat/jni/TestSocketServer.java b/test/org/apache/tomcat/jni/TestSocketServer.java deleted file mode 100644 index d1ea90d97..000000000 --- a/test/org/apache/tomcat/jni/TestSocketServer.java +++ /dev/null @@ -1,233 +0,0 @@ -/* - * 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 java.io.OutputStream; -import java.util.concurrent.CountDownLatch; - -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -/** - * Tests for server-side sockets. - */ -public class TestSocketServer extends AbstractJniTest { - - private static final String HOST = "localhost"; - private static final long ERROR_MARGIN; - - private int port = 0; - private long serverSocket = 0; - private long clientSocket = 0; - - // Determine the resolution of System.nanoTime() so an appropriate error - // margin can be used in tests that use nanoTime() - static { - long start = System.nanoTime(); - long end = System.nanoTime(); - while (end == start) { - end = System.nanoTime(); - } - ERROR_MARGIN = 2 * (end - start); - } - - - @Before - public void init() throws Exception { - long serverPool = Pool.create(0); - long inetAddress = Address.info(HOST, Socket.APR_INET, - 0, 0, serverPool); - serverSocket = Socket.create(Socket.APR_INET, Socket.SOCK_STREAM, - Socket.APR_PROTO_TCP, serverPool); - if (OS.IS_UNIX) { - Socket.optSet(serverSocket, Socket.APR_SO_REUSEADDR, 1); - } - int rc = Socket.bind(serverSocket, inetAddress); - Assert.assertEquals("Can't bind: " + Error.strerror(rc), 0, rc); - Socket.listen(serverSocket, 5); - if (!OS.IS_UNIX) { - Socket.optSet(serverSocket, Socket.APR_SO_REUSEADDR, 1); - } - - long localAddress = Address.get(Socket.APR_LOCAL, serverSocket); - port = Address.getInfo(localAddress).port; - } - - - @After - public void destroy() { - if (clientSocket != 0) { - Socket.close(clientSocket); - Socket.destroy(clientSocket); - } - if (serverSocket != 0) { - Socket.close(serverSocket); - Socket.destroy(serverSocket); - } - } - - - @Test - public void testPort() { - Assert.assertTrue(port > 0); - } - - - @Test - public void testBlockingReadFromClientWithTimeout() throws Exception { - /* Start the client that connects to the server */ - Client client = new Client(port); - client.start(); - - /* Accept the client connection */ - clientSocket = Socket.accept(serverSocket); - - /* Configure a 1s timeout for reading from client */ - Socket.timeoutSet(clientSocket, 1000000); - long timeout = Socket.timeoutGet(clientSocket); - Assert.assertEquals("Socket.timeoutGet clientSocket failed", 1000000, timeout); - - byte [] buf = new byte[1]; - long start = System.nanoTime(); - while (Socket.recv(clientSocket, buf, 0, 1) == 1) { - } - long wait = System.nanoTime() - start; - Assert.assertFalse("Socket.timeoutSet failed (<1s) [" + wait + "] +-[" + ERROR_MARGIN + "]", - wait < 1000000000 - ERROR_MARGIN); - Assert.assertFalse("Socket.timeoutSet failed (>2s) [" + wait + "] +-[" + ERROR_MARGIN + "]", - wait > 2000000000 + ERROR_MARGIN); - - client.countDown(); - client.join(); - } - - - @Test - public void testNonBlockingReadFromClient() throws Exception { - /* Start the client that connects to the server */ - Client client = new Client(port); - client.start(); - - /* Accept the client connection */ - clientSocket = Socket.accept(serverSocket); - - /* Configure the connection for non-blocking */ - Socket.optSet(clientSocket, Socket.APR_SO_NONBLOCK, 1); - int val = Socket.optGet(clientSocket, Socket.APR_SO_NONBLOCK); - Assert.assertEquals("Socket.optGet clientSocket failed", 1, val); - - byte [] buf = new byte[1]; - long start = System.nanoTime(); - while (Socket.recv(clientSocket, buf, 0, 1) == 1) { - } - long wait = System.nanoTime() - start; - Assert.assertFalse("non_blocking client Socket.APR_SO_NONBLOCK failed (>2ms) [" + wait + - "] +-[" + ERROR_MARGIN + "]", wait > 2000000 + ERROR_MARGIN); - - client.countDown(); - client.join(); - } - - - @Test - public void testNonBlockingReadThenBlockingReadFromClient() throws Exception { - /* Start the client that connects to the server */ - Client client = new Client(port); - client.start(); - - /* Accept the client connection */ - clientSocket = Socket.accept(serverSocket); - - /* Configure the connection for non-blocking */ - Socket.optSet(clientSocket, Socket.APR_SO_NONBLOCK, 1); - - byte [] buf = new byte[1]; - long start = System.nanoTime(); - while (Socket.recv(clientSocket, buf, 0, 1) == 1) { - } - long wait = System.nanoTime() - start; - Assert.assertFalse("non_blocking client Socket.APR_SO_NONBLOCK failed (>1ms) [" + wait + - "] +-[" + ERROR_MARGIN + "]", wait > 1000000 + ERROR_MARGIN); - - /* Configure for blocking */ - Socket.optSet(clientSocket, Socket.APR_SO_NONBLOCK, 0); - Socket.timeoutSet(clientSocket, 2000); - start = System.nanoTime(); - while (Socket.recv(clientSocket, buf, 0, 1) == 1) { - } - wait = System.nanoTime() - start; - Assert.assertFalse("non_blocking client Socket.APR_SO_NONBLOCK false failed (<1ms) [" + - wait + "] +-[" + ERROR_MARGIN + "]", wait < 1000000 - ERROR_MARGIN); - - client.countDown(); - client.join(); - } - - - @Test - public void testNonBlockingAcceptWithNoClient() throws Exception { - Socket.optSet(serverSocket, Socket.APR_SO_NONBLOCK, 1); - int val = Socket.optGet(serverSocket, Socket.APR_SO_NONBLOCK); - Assert.assertEquals("Socket.optGet serverSocket failed", 1, val); - - long start = System.nanoTime(); - boolean ok = false; - try { - Socket.accept(serverSocket); - } catch (Exception ex) { - ok = true; - } - long wait = System.nanoTime() - start; - Assert.assertTrue("Timeout failed", ok); - Assert.assertFalse("non_blocking accept Socket.APR_SO_NONBLOCK failed (>10ms) [" + wait + - "] +-[" + ERROR_MARGIN + "]", wait > 10000000 + ERROR_MARGIN); - } - - - /** - * Simple client that connects, sends a single byte then closes the - * connection. - */ - private static class Client extends java.lang.Thread { - - private final int port; - private final CountDownLatch complete = new CountDownLatch(1); - - public Client(int port) throws Exception { - this.port = port; - } - - public void countDown() { - complete.countDown(); - } - - @Override - public void run() { - - try (java.net.Socket sock = new java.net.Socket(TestSocketServer.HOST, port)) { - OutputStream os = sock.getOutputStream(); - os.write('A'); - os.flush(); - complete.await(); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - } -} diff --git a/test/org/apache/tomcat/jni/TestSocketServerAnyLocalAddress.java b/test/org/apache/tomcat/jni/TestSocketServerAnyLocalAddress.java deleted file mode 100644 index 866ba772c..000000000 --- a/test/org/apache/tomcat/jni/TestSocketServerAnyLocalAddress.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * 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 java.io.InputStream; -import java.io.OutputStream; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.net.NetworkInterface; -import java.util.Enumeration; - -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -/** - * Tests for server-side sockets using any local address (0.0.0.0 or ::). - */ -public class TestSocketServerAnyLocalAddress extends AbstractJniTest { - - // Excessive but allows for slow systems - private static final int TIMEOUT_MICROSECONDS = 10 * 1000 * 1000; - - private long serverSocket = 0; - private long clientSocket = 0; - - - @Before - public void init() throws Exception { - long serverPool = Pool.create(0); - long inetAddress = Address.info(null, Socket.APR_UNSPEC, - 0, 0, serverPool); - serverSocket = Socket.create(Address.getInfo(inetAddress).family, Socket.SOCK_STREAM, - Socket.APR_PROTO_TCP, serverPool); - if (OS.IS_UNIX) { - Socket.optSet(serverSocket, Socket.APR_SO_REUSEADDR, 1); - } - int rc = Socket.bind(serverSocket, inetAddress); - Assert.assertEquals("Can't bind: " + Error.strerror(rc), 0, rc); - Socket.listen(serverSocket, 5); - if (!OS.IS_UNIX) { - Socket.optSet(serverSocket, Socket.APR_SO_REUSEADDR, 1); - } - } - - - @After - public void destroy() { - if (clientSocket != 0) { - Socket.close(clientSocket); - Socket.destroy(clientSocket); - } - if (serverSocket != 0) { - Socket.close(serverSocket); - Socket.destroy(serverSocket); - } - } - - - @Test - public void testWithClient() throws Exception { - /* Start the client that connects to the server */ - Client client = new Client(serverSocket); - client.start(); - - boolean running = true; - while (running) { - /* Accept the client connection */ - clientSocket = Socket.accept(serverSocket); - - /* Configure a 10s timeout for reading from client */ - Socket.timeoutSet(clientSocket, TIMEOUT_MICROSECONDS); - - byte [] buf = new byte[1]; - while (Socket.recv(clientSocket, buf, 0, 1) == 1) { - // If 'A' was read, echo back 'Z' - if (buf[0] == 'A') { - buf[0] = 'Z'; - Socket.send(clientSocket, buf, 0, 1); - } - } - if (buf[0] == 'E') { - running = false; - } else if (buf[0] == 'Z') { - // NO-OP - connection closing - } else { - Assert.fail("Unexpected data [" + (char) buf[0] + "]"); - } - } - - client.join(); - } - - - /** - * Simple client that connects, sends a single byte then closes the - * connection. - */ - private static class Client extends java.lang.Thread { - - private final long serverSocket; - - public Client(long serverSocket) throws Exception { - this.serverSocket = serverSocket; - } - - @Override - public void run() { - - try { - InetSocketAddress connectAddress = getConnectAddress(serverSocket); - java.net.Socket sock = new java.net.Socket(); - sock.connect(connectAddress, TIMEOUT_MICROSECONDS); - sock.setSoTimeout(TIMEOUT_MICROSECONDS); - 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 [" + rep + "]"); - } - - sock = new java.net.Socket(); - sock.connect(connectAddress, TIMEOUT_MICROSECONDS); - sock.setSoTimeout(TIMEOUT_MICROSECONDS); - ou = sock.getOutputStream(); - ou.write('E'); - ou.flush(); - sock.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - - /* - * Assumes server is listening on any local address - */ - private static InetSocketAddress getConnectAddress(long serverSocket) throws Exception { - long sa = Address.get(Socket.APR_LOCAL, serverSocket); - Sockaddr addr = Address.getInfo(sa); - InetSocketAddress localAddress; - if (addr.family == Socket.APR_INET6) { - localAddress = new InetSocketAddress("::", addr.port); - } else { - localAddress = new InetSocketAddress("0.0.0.0", addr.port); - } - - // Need a local address of the same type (IPv4 or IPV6) as the - // configured bind address since the connector may be configured - // to not map between types. - InetAddress loopbackConnectAddress = null; - InetAddress linkLocalConnectAddress = null; - - Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces(); - while (networkInterfaces.hasMoreElements()) { - NetworkInterface networkInterface = networkInterfaces.nextElement(); - Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses(); - while (inetAddresses.hasMoreElements()) { - InetAddress inetAddress = inetAddresses.nextElement(); - if (localAddress.getAddress().getClass().isAssignableFrom(inetAddress.getClass())) { - if (inetAddress.isLoopbackAddress()) { - if (loopbackConnectAddress == null) { - loopbackConnectAddress = inetAddress; - } - } else if (inetAddress.isLinkLocalAddress()) { - if (linkLocalConnectAddress == null) { - linkLocalConnectAddress = inetAddress; - } - } else { - // Use a non-link local, non-loop back address by default - return new InetSocketAddress(inetAddress, localAddress.getPort()); - } - } - } - } - // Prefer loop back over link local since on some platforms (e.g. - // OSX) some link local addresses are not included when listening on - // all local addresses. - if (loopbackConnectAddress != null) { - return new InetSocketAddress(loopbackConnectAddress, localAddress.getPort()); - } - if (linkLocalConnectAddress != null) { - return new InetSocketAddress(linkLocalConnectAddress, localAddress.getPort()); - } - // Fallback - return new InetSocketAddress("localhost", localAddress.getPort()); - } - } -} --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org