Java client BECN implementation (#155)

This commit is contained in:
Jan Chaloupecky
2019-06-01 20:52:13 +01:00
committed by Jason Watkins
parent 90ccec0d07
commit c018d6c3be
14 changed files with 379 additions and 4 deletions

View File

@@ -0,0 +1,73 @@
package gov.nasa.xpc.test;
import static org.junit.Assert.*;
import gov.nasa.xpc.discovery.Beacon;
import gov.nasa.xpc.discovery.BeaconParser;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.net.DatagramPacket;
public class XPlaneDiscoveryTests {
private BeaconParser parser;
private DatagramPacket packet;
@Before
public void setup() {
parser = new BeaconParser();
byte[] bytes = HexHelper.decodeHexString("4245434E0071BFFC2B0000312E332D72632E310000000000000000");
packet = new DatagramPacket(bytes, 0, bytes.length);
}
@Test
public void readBeaconParsesPort() throws IOException {
Beacon beacon = parser.readBCN(packet);
assertEquals(beacon.getPluginPort(), 49009);
}
@Test
public void readBeaconParsesXplaneVersion() throws IOException {
Beacon beacon = parser.readBCN(packet);
assertEquals(beacon.getXplaneVersion(), "112.60");
}
@Test
public void readBeaconParsesPluginVersion() throws IOException {
Beacon beacon = parser.readBCN(packet);
assertEquals(beacon.getPluginVersion(), "1.3-rc.1");
}
}
class HexHelper {
static byte[] decodeHexString(String hexString) {
if (hexString.length() % 2 == 1) {
throw new IllegalArgumentException("Invalid hexadecimal String supplied.");
}
byte[] bytes = new byte[hexString.length() / 2];
for (int i = 0; i < hexString.length(); i += 2) {
bytes[i / 2] = hexToByte(hexString.substring(i, i + 2));
}
return bytes;
}
private static byte hexToByte(String hexString) {
int firstDigit = toDigit(hexString.charAt(0));
int secondDigit = toDigit(hexString.charAt(1));
return (byte) ((firstDigit << 4) + secondDigit);
}
private static int toDigit(char hexChar) {
int digit = Character.digit(hexChar, 16);
if (digit == -1) {
throw new IllegalArgumentException(
"Invalid Hexadecimal Character: " + hexChar);
}
return digit;
}
}