More strict testing of handshake behaviour

Motiviation:

We should ensure we not need any extra wrap / unwrap calls during handshake once the handshake was signaled as finished

Modifications:

More strict testing

Result:

Better testing of handshake behaviour
This commit is contained in:
Norman Maurer 2017-02-02 16:24:54 +01:00
parent d688e35e70
commit 1a05463c56

View File

@ -916,59 +916,65 @@ public abstract class SSLEngineTest {
int cTOsPos = cTOs.position(); int cTOsPos = cTOs.position();
int sTOcPos = sTOc.position(); int sTOcPos = sTOc.position();
clientResult = clientEngine.wrap(empty, cTOs); if (!clientHandshakeFinished) {
runDelegatedTasks(clientResult, clientEngine); clientResult = clientEngine.wrap(empty, cTOs);
serverResult = serverEngine.wrap(empty, sTOc); runDelegatedTasks(clientResult, clientEngine);
runDelegatedTasks(serverResult, serverEngine); assertEquals(empty.remaining(), clientResult.bytesConsumed());
assertEquals(cTOs.position() - cTOsPos, clientResult.bytesProduced());
// Verify that the consumed and produced number match what is in the buffers now. if (isHandshakeFinished(clientResult)) {
assertEquals(empty.remaining(), clientResult.bytesConsumed()); clientHandshakeFinished = true;
assertEquals(empty.remaining(), serverResult.bytesConsumed()); }
assertEquals(cTOs.position() - cTOsPos, clientResult.bytesProduced()); }
assertEquals(sTOc.position() - sTOcPos, serverResult.bytesProduced());
if (!serverHandshakeFinished) {
serverResult = serverEngine.wrap(empty, sTOc);
runDelegatedTasks(serverResult, serverEngine);
assertEquals(empty.remaining(), serverResult.bytesConsumed());
assertEquals(sTOc.position() - sTOcPos, serverResult.bytesProduced());
if (isHandshakeFinished(serverResult)) {
serverHandshakeFinished = true;
}
}
cTOs.flip(); cTOs.flip();
sTOc.flip(); sTOc.flip();
// Verify that we only had one SSLEngineResult.HandshakeStatus.FINISHED
if (isHandshakeFinished(clientResult)) {
assertFalse(clientHandshakeFinished);
clientHandshakeFinished = true;
}
if (isHandshakeFinished(serverResult)) {
assertFalse(serverHandshakeFinished);
serverHandshakeFinished = true;
}
cTOsPos = cTOs.position(); cTOsPos = cTOs.position();
sTOcPos = sTOc.position(); sTOcPos = sTOc.position();
int clientAppReadBufferPos = clientAppReadBuffer.position(); if (!clientHandshakeFinished) {
int serverAppReadBufferPos = serverAppReadBuffer.position(); int clientAppReadBufferPos = clientAppReadBuffer.position();
clientResult = clientEngine.unwrap(sTOc, clientAppReadBuffer);
clientResult = clientEngine.unwrap(sTOc, clientAppReadBuffer); runDelegatedTasks(clientResult, clientEngine);
runDelegatedTasks(clientResult, clientEngine); assertEquals(sTOc.position() - sTOcPos, clientResult.bytesConsumed());
serverResult = serverEngine.unwrap(cTOs, serverAppReadBuffer); assertEquals(clientAppReadBuffer.position() - clientAppReadBufferPos, clientResult.bytesProduced());
runDelegatedTasks(serverResult, serverEngine);
// Verify that the consumed and produced number match what is in the buffers now. if (isHandshakeFinished(clientResult)) {
assertEquals(sTOc.position() - sTOcPos, clientResult.bytesConsumed()); clientHandshakeFinished = true;
assertEquals(cTOs.position() - cTOsPos, serverResult.bytesConsumed()); }
assertEquals(clientAppReadBuffer.position() - clientAppReadBufferPos, clientResult.bytesProduced()); } else {
assertEquals(serverAppReadBuffer.position() - serverAppReadBufferPos, serverResult.bytesProduced()); assertFalse(sTOc.hasRemaining());
}
if (!serverHandshakeFinished) {
int serverAppReadBufferPos = serverAppReadBuffer.position();
serverResult = serverEngine.unwrap(cTOs, serverAppReadBuffer);
runDelegatedTasks(serverResult, serverEngine);
assertEquals(cTOs.position() - cTOsPos, serverResult.bytesConsumed());
assertEquals(serverAppReadBuffer.position() - serverAppReadBufferPos, serverResult.bytesProduced());
if (isHandshakeFinished(serverResult)) {
serverHandshakeFinished = true;
}
} else {
assertFalse(cTOs.hasRemaining());
}
cTOs.compact();
sTOc.compact(); sTOc.compact();
cTOs.compact();
// Verify that we only had one SSLEngineResult.HandshakeStatus.FINISHED
if (isHandshakeFinished(clientResult)) {
assertFalse(clientHandshakeFinished);
clientHandshakeFinished = true;
}
if (isHandshakeFinished(serverResult)) {
assertFalse(serverHandshakeFinished);
serverHandshakeFinished = true;
}
} while (!clientHandshakeFinished || !serverHandshakeFinished); } while (!clientHandshakeFinished || !serverHandshakeFinished);
} }