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