+
+ /// Send some valid and not-valid packets to the server and check the result.
+ pub fn start_tests(address: &str, port: u16) {
+ let execute = |f: &mut |&mut Client| -> bool| -> bool {
+ match Client::new(address, port) {
+ Ok(ref mut client) => (*f)(client),
+ Err(e) => {
+ println!("Unable to create a client. Error: {}", e);
+ false
+ }
+ }
+ };
+
+ let mut tests = vec!(
+ |client: &mut Client| -> bool {
+ println!("Send a valid packet...");
+ match client.end_point.send_with_result(Command(Packet::random_packet_data([42]))) {
+ Ok(Ok(packet@Packet { t: Answer(..), .. })) =>
+ true,
+ other => {
+ println!("Error: {}", other);
+ false
+ }
+ }
+ },
+
+ |client: &mut Client| -> bool {
+ println!("Send a packet with an unknown type...");
+ client.end_point.current_timestamp += 1;
+ let mut m = MemWriter::new();
+ match (Packet { t: Command(Packet::random_packet_data([42])), timestamp: client.end_point.current_timestamp }).write(&mut m) {
+ Err(e) => {
+ println!("Error: {}", e)
+ false
+ },
+ _ => {
+ let mut raw_packet = m.unwrap();
+ raw_packet[2] = 0xEE; // Alter the type.
+
+ match client.end_point.send_raw_with_result(raw_packet.as_slice()) {
+ Ok(Err(packet::IOReadError( IoError { kind: TimedOut, .. }))) => true, // The server should not send a packet.
+ other => {
+ println!("Error: {}", other);
+ false
+ }
+ }
+ }
+ }
+ }
+ );
+
+ for (i, test) in range(0, tests.len()).zip(tests.iter_mut()) {
+ println!("===== Test case #{}:", i)
+ if execute(test) {
+ println!("===== Test passed");
+ } else {
+ println!("===== Test failed");
+ break;
+ }
+ }
+
+ // Send a packet with a wrong timestamp.
+ // Send a packet with a maximum timestamp.
+ // Send a packet with altered encrypted data.
+ }