summary refs log tree commit diff
path: root/src/libstd/io
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2013-12-27 17:50:16 -0800
committerAlex Crichton <alex@alexcrichton.com>2013-12-27 23:09:31 -0800
commit2a4f9d69afd19603ed3354fa8e64ab0e67c6a915 (patch)
tree411a20151bace8706b50d0e19aa682cfee652ee3 /src/libstd/io
parent1763f36c9d47550838793e129f2297ecfc8bebd1 (diff)
downloadrust-2a4f9d69afd19603ed3354fa8e64ab0e67c6a915.tar.gz
rust-2a4f9d69afd19603ed3354fa8e64ab0e67c6a915.zip
Implement native TCP I/O
Diffstat (limited to 'src/libstd/io')
-rw-r--r--src/libstd/io/net/tcp.rs105
-rw-r--r--src/libstd/io/test.rs11
2 files changed, 46 insertions, 70 deletions
diff --git a/src/libstd/io/net/tcp.rs b/src/libstd/io/net/tcp.rs
index c963057acde..52cca7f622b 100644
--- a/src/libstd/io/net/tcp.rs
+++ b/src/libstd/io/net/tcp.rs
@@ -138,8 +138,7 @@ mod test {
     use io::*;
     use prelude::*;
 
-    #[test] #[ignore]
-    fn bind_error() {
+    iotest!(fn bind_error() {
         let mut called = false;
         io_error::cond.trap(|e| {
             assert!(e.kind == PermissionDenied);
@@ -150,19 +149,12 @@ mod test {
             assert!(listener.is_none());
         });
         assert!(called);
-    }
+    } #[ignore(cfg(windows))])
 
-    #[test]
-    fn connect_error() {
+    iotest!(fn connect_error() {
         let mut called = false;
         io_error::cond.trap(|e| {
-            let expected_error = if cfg!(unix) {
-                ConnectionRefused
-            } else {
-                // On Win32, opening port 1 gives WSAEADDRNOTAVAIL error.
-                OtherIoError
-            };
-            assert_eq!(e.kind, expected_error);
+            assert_eq!(e.kind, ConnectionRefused);
             called = true;
         }).inside(|| {
             let addr = SocketAddr { ip: Ipv4Addr(0, 0, 0, 0), port: 1 };
@@ -170,10 +162,9 @@ mod test {
             assert!(stream.is_none());
         });
         assert!(called);
-    }
+    })
 
-    #[test]
-    fn smoke_test_ip4() {
+    iotest!(fn smoke_test_ip4() {
         let addr = next_test_ip4();
         let (port, chan) = Chan::new();
 
@@ -189,10 +180,9 @@ mod test {
         let mut buf = [0];
         stream.read(buf);
         assert!(buf[0] == 99);
-    }
+    })
 
-    #[test]
-    fn smoke_test_ip6() {
+    iotest!(fn smoke_test_ip6() {
         let addr = next_test_ip6();
         let (port, chan) = Chan::new();
 
@@ -208,10 +198,9 @@ mod test {
         let mut buf = [0];
         stream.read(buf);
         assert!(buf[0] == 99);
-    }
+    })
 
-    #[test]
-    fn read_eof_ip4() {
+    iotest!(fn read_eof_ip4() {
         let addr = next_test_ip4();
         let (port, chan) = Chan::new();
 
@@ -227,10 +216,9 @@ mod test {
         let mut buf = [0];
         let nread = stream.read(buf);
         assert!(nread.is_none());
-    }
+    })
 
-    #[test]
-    fn read_eof_ip6() {
+    iotest!(fn read_eof_ip6() {
         let addr = next_test_ip6();
         let (port, chan) = Chan::new();
 
@@ -246,10 +234,9 @@ mod test {
         let mut buf = [0];
         let nread = stream.read(buf);
         assert!(nread.is_none());
-    }
+    })
 
-    #[test]
-    fn read_eof_twice_ip4() {
+    iotest!(fn read_eof_twice_ip4() {
         let addr = next_test_ip4();
         let (port, chan) = Chan::new();
 
@@ -275,10 +262,9 @@ mod test {
             let nread = stream.read(buf);
             assert!(nread.is_none());
         })
-    }
+    })
 
-    #[test]
-    fn read_eof_twice_ip6() {
+    iotest!(fn read_eof_twice_ip6() {
         let addr = next_test_ip6();
         let (port, chan) = Chan::new();
 
@@ -304,10 +290,9 @@ mod test {
             let nread = stream.read(buf);
             assert!(nread.is_none());
         })
-    }
+    })
 
-    #[test]
-    fn write_close_ip4() {
+    iotest!(fn write_close_ip4() {
         let addr = next_test_ip4();
         let (port, chan) = Chan::new();
 
@@ -336,10 +321,9 @@ mod test {
             });
             if stop { break }
         }
-    }
+    })
 
-    #[test]
-    fn write_close_ip6() {
+    iotest!(fn write_close_ip6() {
         let addr = next_test_ip6();
         let (port, chan) = Chan::new();
 
@@ -368,10 +352,9 @@ mod test {
             });
             if stop { break }
         }
-    }
+    })
 
-    #[test]
-    fn multiple_connect_serial_ip4() {
+    iotest!(fn multiple_connect_serial_ip4() {
         let addr = next_test_ip4();
         let max = 10;
         let (port, chan) = Chan::new();
@@ -391,10 +374,9 @@ mod test {
             stream.read(buf);
             assert_eq!(buf[0], 99);
         }
-    }
+    })
 
-    #[test]
-    fn multiple_connect_serial_ip6() {
+    iotest!(fn multiple_connect_serial_ip6() {
         let addr = next_test_ip6();
         let max = 10;
         let (port, chan) = Chan::new();
@@ -414,10 +396,9 @@ mod test {
             stream.read(buf);
             assert_eq!(buf[0], 99);
         }
-    }
+    })
 
-    #[test]
-    fn multiple_connect_interleaved_greedy_schedule_ip4() {
+    iotest!(fn multiple_connect_interleaved_greedy_schedule_ip4() {
         let addr = next_test_ip4();
         static MAX: int = 10;
         let (port, chan) = Chan::new();
@@ -452,10 +433,9 @@ mod test {
                 stream.write([i as u8]);
             }
         }
-    }
+    })
 
-    #[test]
-    fn multiple_connect_interleaved_greedy_schedule_ip6() {
+    iotest!(fn multiple_connect_interleaved_greedy_schedule_ip6() {
         let addr = next_test_ip6();
         static MAX: int = 10;
         let (port, chan) = Chan::<()>::new();
@@ -490,10 +470,9 @@ mod test {
                 stream.write([i as u8]);
             }
         }
-    }
+    })
 
-    #[test]
-    fn multiple_connect_interleaved_lazy_schedule_ip4() {
+    iotest!(fn multiple_connect_interleaved_lazy_schedule_ip4() {
         let addr = next_test_ip4();
         static MAX: int = 10;
         let (port, chan) = Chan::new();
@@ -528,9 +507,9 @@ mod test {
                 stream.write([99]);
             }
         }
-    }
-    #[test]
-    fn multiple_connect_interleaved_lazy_schedule_ip6() {
+    })
+
+    iotest!(fn multiple_connect_interleaved_lazy_schedule_ip6() {
         let addr = next_test_ip6();
         static MAX: int = 10;
         let (port, chan) = Chan::new();
@@ -565,10 +544,9 @@ mod test {
                 stream.write([99]);
             }
         }
-    }
+    })
 
-    #[cfg(test)]
-    fn socket_name(addr: SocketAddr) {
+    pub fn socket_name(addr: SocketAddr) {
         let mut listener = TcpListener::bind(addr).unwrap();
 
         // Make sure socket_name gives
@@ -578,8 +556,7 @@ mod test {
         assert_eq!(addr, so_name.unwrap());
     }
 
-    #[cfg(test)]
-    fn peer_name(addr: SocketAddr) {
+    pub fn peer_name(addr: SocketAddr) {
         let (port, chan) = Chan::new();
 
         do spawn {
@@ -602,16 +579,14 @@ mod test {
         assert_eq!(addr, peer_name.unwrap());
     }
 
-    #[test]
-    fn socket_and_peer_name_ip4() {
+    iotest!(fn socket_and_peer_name_ip4() {
         peer_name(next_test_ip4());
         socket_name(next_test_ip4());
-    }
+    })
 
-    #[test]
-    fn socket_and_peer_name_ip6() {
+    iotest!(fn socket_and_peer_name_ip6() {
         // XXX: peer name is not consistent
         //peer_name(next_test_ip6());
         socket_name(next_test_ip6());
-    }
+    })
 }
diff --git a/src/libstd/io/test.rs b/src/libstd/io/test.rs
index c189bd47b06..92b2cfa8be2 100644
--- a/src/libstd/io/test.rs
+++ b/src/libstd/io/test.rs
@@ -18,7 +18,7 @@ use std::io::net::ip::*;
 use sync::atomics::{AtomicUint, INIT_ATOMIC_UINT, Relaxed};
 
 macro_rules! iotest (
-    { fn $name:ident() $b:block } => (
+    { fn $name:ident() $b:block $($a:attr)* } => (
         mod $name {
             #[allow(unused_imports)];
 
@@ -28,6 +28,7 @@ macro_rules! iotest (
             use prelude::*;
             use io::*;
             use io::fs::*;
+            use io::test::*;
             use io::net::tcp::*;
             use io::net::ip::*;
             use io::net::udp::*;
@@ -39,8 +40,8 @@ macro_rules! iotest (
 
             fn f() $b
 
-            #[test] fn green() { f() }
-            #[test] fn native() {
+            $($a)* #[test] fn green() { f() }
+            $($a)* #[test] fn native() {
                 use native;
                 let (p, c) = Chan::new();
                 do native::task::spawn { c.send(f()) }
@@ -91,9 +92,9 @@ fn base_port() -> u16 {
 
     let bases = [
         ("32-opt", base + range * 1),
-        ("32-noopt", base + range * 2),
+        ("32-nopt", base + range * 2),
         ("64-opt", base + range * 3),
-        ("64-noopt", base + range * 4),
+        ("64-nopt", base + range * 4),
         ("64-opt-vg", base + range * 5),
         ("all-opt", base + range * 6),
         ("snap3", base + range * 7),