/**
* TLS-Attacker - A Modular Penetration Testing Framework for TLS
*
* Copyright 2014-2016 Ruhr University Bochum / Hackmanit GmbH
*
* Licensed under Apache License 2.0
* http://www.apache.org/licenses/LICENSE-2.0
*/
package de.rub.nds.tlsattacker.tls.protocol.heartbeat;
import de.rub.nds.tlsattacker.tls.protocol.heartbeat.HeartbeatHandler;
import de.rub.nds.tlsattacker.tls.constants.ProtocolVersion;
import de.rub.nds.tlsattacker.tls.workflow.TlsContext;
import de.rub.nds.tlsattacker.tls.constants.CipherSuite;
import de.rub.nds.tlsattacker.tls.constants.HeartbeatMessageType;
import de.rub.nds.tlsattacker.util.ArrayConverter;
import java.util.Arrays;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author Juraj Somorovsky - juraj.somorovsky@rub.de
* @author Florian Pfützenreuter <florian.pfuetzenreuter@rub.de>
*/
public class HeartbeatHandlerTest {
HeartbeatHandler heartbeatHandler;
public HeartbeatHandlerTest() {
TlsContext context = new TlsContext();
context.setSelectedCipherSuite(CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA);
context.setProtocolVersion(ProtocolVersion.TLS12);
heartbeatHandler = new HeartbeatHandler(context);
}
/**
* Test of prepareMessageAction method, of class HeartbeatHandler.
*/
@Test
public void testPrepareMessageAction() {
heartbeatHandler.initializeProtocolMessage();
byte[] result = heartbeatHandler.prepareMessageAction();
int payload_length = ArrayConverter.bytesToInt(Arrays.copyOfRange(result, 1, 3));
assertNotNull("Confirm prepareMessageAction didn't return 'NULL'.", result);
assertEquals("Confirm message is a request.", HeartbeatMessageType.HEARTBEAT_REQUEST.getValue(), result[0]);
assertTrue("Confirm message is not bigger than the max. message size"
+ "according to the limits set by HeartbeatHandler class.",
result.length <= HeartbeatHandler.MAX_PADDING_LENGTH + HeartbeatHandler.MAX_PAYLOAD_LENGTH + 3);
assertTrue("Confirm message meets the minimum message size according "
+ "to the limits set by HeatbeatHandler class.",
result.length >= HeartbeatHandler.MIN_PADDING_LENGTH + 3);
assertTrue("Confirm payload length is at least 0 byte.", payload_length >= 0);
assertTrue("Confirm payload length meets the limit set by HeatbeatHandler class",
payload_length <= HeartbeatHandler.MAX_PAYLOAD_LENGTH);
assertTrue("Confirm padding meets the minumum padding length set by " + "HeatbeatHandler class", result.length
- (payload_length + 3) >= HeartbeatHandler.MIN_PADDING_LENGTH);
assertTrue("Confirm padding length doesn't exceed it's max. length "
+ "according to the limits set by HeatbeatHandler class",
result.length - (payload_length + 3) <= HeartbeatHandler.MAX_PADDING_LENGTH);
}
/**
* Test of parseMessageAction method, of class HeartbeatHandler.
*/
@Test
public void testParseMessageAction() {
heartbeatHandler.initializeProtocolMessage();
byte[] result = heartbeatHandler.prepareMessageAction();
int pointer = heartbeatHandler.parseMessage(result, 0);
assertEquals(result.length, pointer);
assertEquals((Byte) HeartbeatMessageType.HEARTBEAT_REQUEST.getValue(), heartbeatHandler.getProtocolMessage()
.getHeartbeatMessageType().getValue());
}
}