1 use test_programs::wasi::sockets::network::{ErrorCode, IpAddressFamily};
2 use test_programs::wasi::sockets::udp::UdpSocket;
3 
test_udp_sockopt_defaults(family: IpAddressFamily)4 fn test_udp_sockopt_defaults(family: IpAddressFamily) {
5     let sock = UdpSocket::new(family).unwrap();
6 
7     assert_eq!(sock.address_family(), family);
8 
9     assert!(sock.unicast_hop_limit().unwrap() > 0);
10     assert!(sock.receive_buffer_size().unwrap() > 0);
11     assert!(sock.send_buffer_size().unwrap() > 0);
12 }
13 
test_udp_sockopt_input_ranges(family: IpAddressFamily)14 fn test_udp_sockopt_input_ranges(family: IpAddressFamily) {
15     let sock = UdpSocket::new(family).unwrap();
16 
17     assert!(matches!(
18         sock.set_unicast_hop_limit(0),
19         Err(ErrorCode::InvalidArgument)
20     ));
21     assert!(matches!(sock.set_unicast_hop_limit(1), Ok(_)));
22     assert!(matches!(sock.set_unicast_hop_limit(u8::MAX), Ok(_)));
23 
24     assert!(matches!(
25         sock.set_receive_buffer_size(0),
26         Err(ErrorCode::InvalidArgument)
27     ));
28     assert!(matches!(sock.set_receive_buffer_size(1), Ok(_))); // Unsupported sizes should be silently capped.
29     assert!(matches!(sock.set_receive_buffer_size(u64::MAX), Ok(_))); // Unsupported sizes should be silently capped.
30     assert!(matches!(
31         sock.set_send_buffer_size(0),
32         Err(ErrorCode::InvalidArgument)
33     ));
34     assert!(matches!(sock.set_send_buffer_size(1), Ok(_))); // Unsupported sizes should be silently capped.
35     assert!(matches!(sock.set_send_buffer_size(u64::MAX), Ok(_))); // Unsupported sizes should be silently capped.
36 }
37 
test_udp_sockopt_readback(family: IpAddressFamily)38 fn test_udp_sockopt_readback(family: IpAddressFamily) {
39     let sock = UdpSocket::new(family).unwrap();
40 
41     sock.set_unicast_hop_limit(42).unwrap();
42     assert_eq!(sock.unicast_hop_limit().unwrap(), 42);
43 
44     sock.set_receive_buffer_size(0x10000).unwrap();
45     assert_eq!(sock.receive_buffer_size().unwrap(), 0x10000);
46 
47     sock.set_send_buffer_size(0x10000).unwrap();
48     assert_eq!(sock.send_buffer_size().unwrap(), 0x10000);
49 }
50 
main()51 fn main() {
52     test_udp_sockopt_defaults(IpAddressFamily::Ipv4);
53     test_udp_sockopt_defaults(IpAddressFamily::Ipv6);
54 
55     test_udp_sockopt_input_ranges(IpAddressFamily::Ipv4);
56     test_udp_sockopt_input_ranges(IpAddressFamily::Ipv6);
57 
58     test_udp_sockopt_readback(IpAddressFamily::Ipv4);
59     test_udp_sockopt_readback(IpAddressFamily::Ipv6);
60 }
61