1 use test_programs::p3::wasi::sockets::types::{ErrorCode, IpAddressFamily, UdpSocket};
2
3 struct Component;
4
5 test_programs::p3::export!(Component);
6
test_udp_sockopt_defaults(family: IpAddressFamily)7 fn test_udp_sockopt_defaults(family: IpAddressFamily) {
8 let sock = UdpSocket::create(family).unwrap();
9
10 assert_eq!(sock.get_address_family(), family);
11
12 assert!(sock.get_unicast_hop_limit().unwrap() > 0);
13 assert!(sock.get_receive_buffer_size().unwrap() > 0);
14 assert!(sock.get_send_buffer_size().unwrap() > 0);
15 }
16
test_udp_sockopt_input_ranges(family: IpAddressFamily)17 fn test_udp_sockopt_input_ranges(family: IpAddressFamily) {
18 let sock = UdpSocket::create(family).unwrap();
19
20 assert!(matches!(
21 sock.set_unicast_hop_limit(0),
22 Err(ErrorCode::InvalidArgument)
23 ));
24 assert!(matches!(sock.set_unicast_hop_limit(1), Ok(_)));
25 assert!(matches!(sock.set_unicast_hop_limit(u8::MAX), Ok(_)));
26
27 assert!(matches!(
28 sock.set_receive_buffer_size(0),
29 Err(ErrorCode::InvalidArgument)
30 ));
31 assert!(matches!(sock.set_receive_buffer_size(1), Ok(_))); // Unsupported sizes should be silently capped.
32 assert!(matches!(sock.set_receive_buffer_size(u64::MAX), Ok(_))); // Unsupported sizes should be silently capped.
33 assert!(matches!(
34 sock.set_send_buffer_size(0),
35 Err(ErrorCode::InvalidArgument)
36 ));
37 assert!(matches!(sock.set_send_buffer_size(1), Ok(_))); // Unsupported sizes should be silently capped.
38 assert!(matches!(sock.set_send_buffer_size(u64::MAX), Ok(_))); // Unsupported sizes should be silently capped.
39 }
40
test_udp_sockopt_readback(family: IpAddressFamily)41 fn test_udp_sockopt_readback(family: IpAddressFamily) {
42 let sock = UdpSocket::create(family).unwrap();
43
44 sock.set_unicast_hop_limit(42).unwrap();
45 assert_eq!(sock.get_unicast_hop_limit().unwrap(), 42);
46
47 sock.set_receive_buffer_size(0x10000).unwrap();
48 assert_eq!(sock.get_receive_buffer_size().unwrap(), 0x10000);
49
50 sock.set_send_buffer_size(0x10000).unwrap();
51 assert_eq!(sock.get_send_buffer_size().unwrap(), 0x10000);
52 }
53
54 impl test_programs::p3::exports::wasi::cli::run::Guest for Component {
run() -> Result<(), ()>55 async fn run() -> Result<(), ()> {
56 test_udp_sockopt_defaults(IpAddressFamily::Ipv4);
57 test_udp_sockopt_defaults(IpAddressFamily::Ipv6);
58
59 test_udp_sockopt_input_ranges(IpAddressFamily::Ipv4);
60 test_udp_sockopt_input_ranges(IpAddressFamily::Ipv6);
61
62 test_udp_sockopt_readback(IpAddressFamily::Ipv4);
63 test_udp_sockopt_readback(IpAddressFamily::Ipv6);
64 Ok(())
65 }
66 }
67
main()68 fn main() {}
69