1#[test] 2fn encode_decode() { 3 #[cfg(unix)] 4 use rustix::net::SocketAddrUnix; 5 use rustix::net::{ 6 Ipv4Addr, Ipv6Addr, SocketAddrAny, SocketAddrStorage, SocketAddrV4, SocketAddrV6, 7 }; 8 9 unsafe { 10 let orig = SocketAddrV4::new(Ipv4Addr::new(2, 3, 5, 6), 33); 11 let mut encoded = std::mem::MaybeUninit::<SocketAddrStorage>::uninit(); 12 let len = SocketAddrAny::V4(orig).write(encoded.as_mut_ptr()); 13 let decoded = SocketAddrAny::read(encoded.as_ptr(), len).unwrap(); 14 assert_eq!(decoded, SocketAddrAny::V4(orig)); 15 16 let orig = SocketAddrV6::new(Ipv6Addr::new(2, 3, 5, 6, 8, 9, 11, 12), 33, 34, 36); 17 let mut encoded = std::mem::MaybeUninit::<SocketAddrStorage>::uninit(); 18 let len = SocketAddrAny::V6(orig).write(encoded.as_mut_ptr()); 19 let decoded = SocketAddrAny::read(encoded.as_ptr(), len).unwrap(); 20 assert_eq!(decoded, SocketAddrAny::V6(orig)); 21 22 #[cfg(not(windows))] 23 { 24 let orig = SocketAddrUnix::new("/path/to/socket").unwrap(); 25 let mut encoded = std::mem::MaybeUninit::<SocketAddrStorage>::uninit(); 26 let len = SocketAddrAny::Unix(orig.clone()).write(encoded.as_mut_ptr()); 27 let decoded = SocketAddrAny::read(encoded.as_ptr(), len).unwrap(); 28 assert_eq!(decoded, SocketAddrAny::Unix(orig)); 29 } 30 } 31} 32 33#[cfg(not(windows))] 34#[test] 35fn test_unix_addr() { 36 use rustix::cstr; 37 use rustix::net::SocketAddrUnix; 38 39 assert_eq!( 40 SocketAddrUnix::new("/").unwrap().path().unwrap(), 41 cstr!("/") 42 ); 43 assert_eq!( 44 SocketAddrUnix::new("//").unwrap().path().unwrap(), 45 cstr!("//") 46 ); 47 assert_eq!( 48 SocketAddrUnix::new("/foo/bar").unwrap().path().unwrap(), 49 cstr!("/foo/bar") 50 ); 51 assert_eq!( 52 SocketAddrUnix::new("foo").unwrap().path().unwrap(), 53 cstr!("foo") 54 ); 55 SocketAddrUnix::new("/foo\0/bar").unwrap_err(); 56 assert!(SocketAddrUnix::new("").unwrap().path().is_none()); 57 58 #[cfg(any(target_os = "android", target_os = "linux"))] 59 { 60 assert!(SocketAddrUnix::new("foo") 61 .unwrap() 62 .abstract_name() 63 .is_none()); 64 65 assert_eq!( 66 SocketAddrUnix::new_abstract_name(b"test") 67 .unwrap() 68 .abstract_name() 69 .unwrap(), 70 b"test" 71 ); 72 assert_eq!( 73 SocketAddrUnix::new_abstract_name(b"") 74 .unwrap() 75 .abstract_name() 76 .unwrap(), 77 b"" 78 ); 79 assert_eq!( 80 SocketAddrUnix::new_abstract_name(b"this\0that") 81 .unwrap() 82 .abstract_name() 83 .unwrap(), 84 b"this\0that" 85 ); 86 SocketAddrUnix::new_abstract_name(&[b'a'; 500]).unwrap_err(); 87 assert!(SocketAddrUnix::new_abstract_name(b"test") 88 .unwrap() 89 .path() 90 .is_none()); 91 } 92} 93