This is an automated email from the ASF dual-hosted git repository.
andor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zookeeper.git
The following commit(s) were added to refs/heads/master by this push:
new 6b6ff1d ZOOKEEPER-3455: fix UnifiedServerSocketTest on jdk 13
6b6ff1d is described below
commit 6b6ff1d11009d1301eb48d7801175d6af7dbf3fe
Author: Mate Szalay-Beko <[email protected]>
AuthorDate: Fri Aug 2 13:55:01 2019 +0200
ZOOKEEPER-3455: fix UnifiedServerSocketTest on jdk 13
The `UnifiedServerSocketTest.testConnectWithoutSSLToStrictServer` fails on
OpenJDK 13 because in the new default socket implementation
(https://openjdk.java.net/jeps/353) the `NioSocketImpl.getInputStream.read()`
behaves differently than the old `SocketInputStream.read()`.
A workaround could be to execute the tests using the
`-Djdk.net.usePlainSocketImpl` system property (hardcoding it in the maven /
ant configs), which enforces the usage of the old socket implementation in JDK
13. But I preferred instead to make the test compatible with both older and
newer JDK, so it should succeed even if someone is executing it outside of our
build environment.
Author: Mate Szalay-Beko <[email protected]>
Reviewers: [email protected]
Closes #1029 from symat/master
---
.../server/quorum/UnifiedServerSocketTest.java | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/UnifiedServerSocketTest.java
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/UnifiedServerSocketTest.java
index ddc05dc..b74fcda 100644
---
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/UnifiedServerSocketTest.java
+++
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/UnifiedServerSocketTest.java
@@ -212,6 +212,10 @@ public class UnifiedServerSocketTest extends
BaseX509ParameterizedTestCase {
synchronized byte[] getDataFromClient(int index) {
return dataFromClients.get(index);
}
+
+ synchronized boolean receivedAnyDataFromClient() {
+ return !dataFromClients.isEmpty();
+ }
}
private SSLSocket connectWithSSL() throws IOException, X509Exception,
InterruptedException {
@@ -405,13 +409,23 @@ public class UnifiedServerSocketTest extends
BaseX509ParameterizedTestCase {
socket.getOutputStream().flush();
byte[] buf = new byte[DATA_TO_CLIENT.length];
try {
- socket.getInputStream().read(buf, 0, buf.length);
+ int bytesRead = socket.getInputStream().read(buf, 0, buf.length);
+ if(bytesRead == -1) {
+ // Using the NioSocketImpl after JDK 13, the expected
behaviour on the client side
+ // is to reach the end of the stream (bytesRead == -1),
without a socket exception.
+ return;
+ }
} catch (SocketException e) {
- // We expect the other end to hang up the connection
+ // Using the old PlainSocketImpl (prior to JDK 13) we expect to
get Socket Exception
return;
} finally {
forceClose(socket);
serverThread.shutdown(TIMEOUT);
+
+ // independently of the client socket implementation details, we
always make sure the
+ // server didn't receive any data during the test
+ Assert.assertFalse("The strict server accepted connection without
SSL.",
+ serverThread.receivedAnyDataFromClient());
}
Assert.fail("Expected server to hang up the connection. Read from
server succeeded unexpectedly.");
}