Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8648171

Browse files
authored
Fix *SslEngineTest to not throw ClassCastException and pass in all cases (#9588)
Motivation: Due some bug we did endup with ClassCastExceptions in some cases. Beside this we also did not correctly handle the case when ReferenceCountedOpenSslEngineTest did produce tasks to run in on test. Modifications: - Correctly unwrap the engine before to fix ClassCastExceptions - Run delegated tasks when needed. Result: All tests pass with different OpenSSL implementations (OpenSSL, BoringSSL etc)
1 parent aebe206 commit 8648171

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

handler/src/test/java/io/netty/handler/ssl/OpenSslEngineTest.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import javax.crypto.spec.SecretKeySpec;
3737
import javax.net.ssl.SSLEngine;
3838
import javax.net.ssl.SSLEngineResult;
39+
import javax.net.ssl.SSLEngineResult.HandshakeStatus;
3940
import javax.net.ssl.SSLException;
4041
import javax.net.ssl.SSLParameters;
4142
import java.nio.ByteBuffer;
@@ -61,6 +62,7 @@
6162
import static org.junit.Assert.assertArrayEquals;
6263
import static org.junit.Assert.assertEquals;
6364
import static org.junit.Assert.assertFalse;
65+
import static org.junit.Assert.assertNotEquals;
6466
import static org.junit.Assert.assertNull;
6567
import static org.junit.Assert.assertSame;
6668
import static org.junit.Assert.assertTrue;
@@ -1131,6 +1133,19 @@ public boolean permits(
11311133
}
11321134
}
11331135

1136+
private static void runTasksIfNeeded(SSLEngine engine) {
1137+
if (engine.getHandshakeStatus() == HandshakeStatus.NEED_TASK) {
1138+
for (;;) {
1139+
Runnable task = engine.getDelegatedTask();
1140+
if (task == null) {
1141+
assertNotEquals(HandshakeStatus.NEED_TASK, engine.getHandshakeStatus());
1142+
break;
1143+
}
1144+
task.run();
1145+
}
1146+
}
1147+
}
1148+
11341149
@Test
11351150
public void testExtractMasterkeyWorksCorrectly() throws Exception {
11361151
SelfSignedCertificate cert = new SelfSignedCertificate();
@@ -1199,17 +1214,23 @@ public void testExtractMasterkeyWorksCorrectly() throws Exception {
11991214
cTOs.flip();
12001215
sTOc.flip();
12011216

1217+
runTasksIfNeeded(clientEngine);
1218+
runTasksIfNeeded(serverEngine);
1219+
12021220
clientEngine.unwrap(sTOc, clientIn);
12031221
serverEngine.unwrap(cTOs, serverIn);
12041222

1223+
runTasksIfNeeded(clientEngine);
1224+
runTasksIfNeeded(serverEngine);
1225+
12051226
// check when the application data has fully been consumed and sent
12061227
// for both the client and server
12071228
if ((clientOut.limit() == serverIn.position()) &&
12081229
(serverOut.limit() == clientIn.position())) {
1209-
byte[] serverRandom = SSL.getServerRandom(((OpenSslEngine) serverEngine).sslPointer());
1210-
byte[] clientRandom = SSL.getClientRandom(((OpenSslEngine) clientEngine).sslPointer());
1211-
byte[] serverMasterKey = SSL.getMasterKey(((OpenSslEngine) serverEngine).sslPointer());
1212-
byte[] clientMasterKey = SSL.getMasterKey(((OpenSslEngine) clientEngine).sslPointer());
1230+
byte[] serverRandom = SSL.getServerRandom(unwrapEngine(serverEngine).sslPointer());
1231+
byte[] clientRandom = SSL.getClientRandom(unwrapEngine(clientEngine).sslPointer());
1232+
byte[] serverMasterKey = SSL.getMasterKey(unwrapEngine(serverEngine).sslPointer());
1233+
byte[] clientMasterKey = SSL.getMasterKey(unwrapEngine(clientEngine).sslPointer());
12131234

12141235
asserted = true;
12151236
assertArrayEquals(serverMasterKey, clientMasterKey);
@@ -1318,7 +1339,9 @@ ReferenceCountedOpenSslEngine unwrapEngine(SSLEngine engine) {
13181339

13191340
@Override
13201341
protected SslContext wrapContext(SslContext context) {
1321-
((OpenSslContext) context).setUseTasks(useTasks);
1342+
if (context instanceof OpenSslContext) {
1343+
((OpenSslContext) context).setUseTasks(useTasks);
1344+
}
13221345
return context;
13231346
}
13241347
}

handler/src/test/java/io/netty/handler/ssl/ReferenceCountedOpenSslEngineTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ public void testNotLeakOnException() throws Exception {
7272

7373
@Override
7474
protected SslContext wrapContext(SslContext context) {
75-
((ReferenceCountedOpenSslContext) context).setUseTasks(useTasks);
75+
if (context instanceof ReferenceCountedOpenSslContext) {
76+
((ReferenceCountedOpenSslContext) context).setUseTasks(useTasks);
77+
}
7678
return context;
7779
}
7880
}

0 commit comments

Comments
 (0)