DatagramTestpublic class DatagramTest extends TestCase Implements some simple tests for datagrams. Not as excessive as the core
tests, but good enough for the harness. |
Methods Summary |
---|
static java.lang.String | stringFromPacket(java.net.DatagramPacket packet)Converts a given datagram packet's contents to a String.
return new String(packet.getData(), 0, packet.getLength());
| static void | stringToPacket(java.lang.String s, java.net.DatagramPacket packet)Converts a given String into a datagram packet.
byte[] bytes = s.getBytes();
System.arraycopy(bytes, 0, packet.getData(), 0, bytes.length);
packet.setLength(bytes.length);
| public void | testDatagram()Implements the main part of the Datagram test.
Reflector reflector = null;
DatagramSocket socket = null;
try {
// Setup the reflector, so we have a partner to send to
reflector = new Reflector(1234, InetAddress.getLocalHost());
reflector.start();
byte[] buffer = new byte[256];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket = new DatagramSocket(2345, InetAddress.getLocalHost());
// Send ten simple packets and check for the expected responses.
for (int i = 1; i <= 10; i++) {
String s = "Hello, Android world #" + i + "!";
stringToPacket(s, packet);
packet.setAddress(InetAddress.getLocalHost());
packet.setPort(1234);
socket.send(packet);
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
// Ignore.
}
packet.setLength(buffer.length);
socket.receive(packet);
String t = stringFromPacket(packet);
// System.out.println(t + " (from " + packet.getAddress() + ":" + packet.getPort() + ")");
assertEquals(s.toUpperCase(), t);
}
} finally {
if (reflector != null) {
reflector.alive = false;
}
if (socket != null) {
socket.close();
}
}
| public void | testDatagramSocketSetSOTimeout()
DatagramSocket sock = null;
int timeout = 5000;
long start = System.currentTimeMillis();
try {
sock = new DatagramSocket();
DatagramPacket pack = new DatagramPacket(new byte[100], 100);
sock.setSoTimeout(timeout);
sock.receive(pack);
} catch (SocketTimeoutException e) {
// expected
long delay = System.currentTimeMillis() - start;
if (Math.abs(delay - timeout) > 1000) {
fail("timeout was not accurate. expected: " + timeout
+ " actual: " + delay + " miliseconds.");
}
} finally {
if (sock != null) {
sock.close();
}
}
|
|