You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.1 KiB
102 lines
3.1 KiB
package network;
|
|
|
|
import network.Exceptions.InvalidMessageException;
|
|
import network.MessageDecoders.XMLMessageDecoder;
|
|
import network.MessageDecoders.XMLMessageDecoderTest;
|
|
import network.MessageEncoders.RaceVisionByteEncoder;
|
|
import network.Messages.AC35Data;
|
|
import network.Messages.Enums.MessageType;
|
|
import network.Messages.Enums.XMLMessageType;
|
|
import network.Messages.XMLMessage;
|
|
import org.junit.Assert;
|
|
import org.junit.Test;
|
|
import shared.dataInput.XMLReader;
|
|
import shared.exceptions.XMLReaderException;
|
|
|
|
import javax.xml.transform.TransformerException;
|
|
import java.io.BufferedReader;
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
import java.nio.charset.StandardCharsets;
|
|
|
|
import static org.junit.Assert.fail;
|
|
|
|
/**
|
|
* Tests the binary message decoder and encoder for a variety of messages.
|
|
*/
|
|
public class BinaryMessageDecoderTest {
|
|
|
|
|
|
/**
|
|
* Tests if an XMLMessage can be encoded and decoded correctly.
|
|
* @throws Exception if test fails.
|
|
*/
|
|
@Test
|
|
public void xmlMessageTest() throws Exception {
|
|
|
|
try {
|
|
|
|
String filePath = "network/raceXML/Regatta.xml";
|
|
XMLMessageType messageType = XMLMessageType.REGATTA;
|
|
|
|
String xmlString = XMLReader.readXMLFileToString(filePath, StandardCharsets.UTF_8);
|
|
|
|
long time = System.currentTimeMillis();
|
|
|
|
XMLMessage xmlMessage = new XMLMessage(
|
|
(byte)1,
|
|
1,
|
|
time,
|
|
messageType,
|
|
(short)1,
|
|
xmlString );
|
|
|
|
byte[] encodedMessage = RaceVisionByteEncoder.encode(xmlMessage);
|
|
|
|
|
|
BinaryMessageEncoder encoder = new BinaryMessageEncoder(
|
|
xmlMessage.getType(),
|
|
time,
|
|
1,
|
|
(short)encodedMessage.length,
|
|
encodedMessage );
|
|
|
|
BinaryMessageDecoder decoder = new BinaryMessageDecoder(encoder.getFullMessage());
|
|
|
|
|
|
AC35Data message = null;
|
|
try {
|
|
message = decoder.decode();
|
|
}
|
|
catch (InvalidMessageException e) {
|
|
Assert.assertFalse(e.getMessage(), true);
|
|
}
|
|
|
|
if (!(message instanceof XMLMessage)){
|
|
Assert.assertFalse(true);
|
|
}
|
|
XMLMessage xmlMessageDecoded = (XMLMessage) message;
|
|
|
|
|
|
//message length
|
|
Assert.assertEquals((short) encodedMessage.length, decoder.getMessageBodyLength());
|
|
//time stamp
|
|
Assert.assertEquals(time, decoder.getHeaderTimeStamp());
|
|
//source ID
|
|
Assert.assertEquals((short) 1, decoder.getHeaderSourceID());
|
|
//message type
|
|
Assert.assertEquals(MessageType.XMLMESSAGE.getValue(), decoder.getHeaderMessageType());
|
|
|
|
|
|
XMLMessageDecoderTest.compareXMLMessages(xmlMessage, xmlMessageDecoded);
|
|
|
|
|
|
} catch (XMLReaderException | TransformerException e){
|
|
fail("couldn't read file" + e.getMessage());
|
|
}
|
|
}
|
|
|
|
//TODO add some tests for more messages types.
|
|
|
|
}
|