| 1 | module net |
| 2 | |
| 3 | fn test_ip_port() { |
| 4 | assert new_ip(1234, addr_ip_any).port()! == 1234 |
| 5 | assert new_ip6(1234, addr_ip6_any).port()! == 1234 |
| 6 | } |
| 7 | |
| 8 | fn test_wildcard_constructors_set_sockaddr_len_on_bsd() { |
| 9 | $if macos || freebsd || openbsd || netbsd || dragonfly { |
| 10 | assert new_ip(1234, addr_ip_any).len == u8(sizeof(C.sockaddr_in)) |
| 11 | assert new_ip6(1234, addr_ip6_any).len == u8(sizeof(C.sockaddr_in6)) |
| 12 | } |
| 13 | } |
| 14 | |
| 15 | fn test_diagnostics() { |
| 16 | dump(aoffset) |
| 17 | eprintln('--------') |
| 18 | in6 := C.sockaddr_in6{} |
| 19 | our_ip6 := Ip6{} |
| 20 | $if macos { |
| 21 | dump(__offsetof(C.sockaddr_in6, sin6_len)) |
| 22 | } |
| 23 | dump(__offsetof(C.sockaddr_in6, sin6_family)) |
| 24 | dump(__offsetof(C.sockaddr_in6, sin6_port)) |
| 25 | dump(__offsetof(C.sockaddr_in6, sin6_addr)) |
| 26 | $if macos { |
| 27 | dump(sizeof(in6.sin6_len)) |
| 28 | } |
| 29 | dump(sizeof(in6.sin6_family)) |
| 30 | dump(sizeof(in6.sin6_port)) |
| 31 | dump(sizeof(in6.sin6_addr)) |
| 32 | dump(sizeof(in6)) |
| 33 | eprintln('') |
| 34 | dump(__offsetof(Ip6, port)) |
| 35 | dump(__offsetof(Ip6, addr)) |
| 36 | dump(sizeof(our_ip6.port)) |
| 37 | dump(sizeof(our_ip6.addr)) |
| 38 | dump(sizeof(our_ip6)) |
| 39 | eprintln('--------') |
| 40 | in4 := C.sockaddr_in{} |
| 41 | our_ip4 := Ip{} |
| 42 | $if macos { |
| 43 | dump(__offsetof(C.sockaddr_in, sin_len)) |
| 44 | } |
| 45 | dump(__offsetof(C.sockaddr_in, sin_family)) |
| 46 | dump(__offsetof(C.sockaddr_in, sin_port)) |
| 47 | dump(__offsetof(C.sockaddr_in, sin_addr)) |
| 48 | $if macos { |
| 49 | dump(sizeof(in4.sin_len)) |
| 50 | } |
| 51 | dump(sizeof(in4.sin_family)) |
| 52 | dump(sizeof(in4.sin_port)) |
| 53 | dump(sizeof(in4.sin_addr)) |
| 54 | dump(sizeof(in4)) |
| 55 | eprintln('') |
| 56 | dump(__offsetof(Ip, port)) |
| 57 | dump(__offsetof(Ip, addr)) |
| 58 | dump(sizeof(our_ip4.port)) |
| 59 | dump(sizeof(our_ip4.addr)) |
| 60 | dump(sizeof(our_ip4)) |
| 61 | eprintln('--------') |
| 62 | dump(__offsetof(C.sockaddr_un, sun_path)) |
| 63 | dump(__offsetof(Unix, path)) |
| 64 | eprintln('--------') |
| 65 | } |
| 66 | |
| 67 | fn test_sizes_unix_sun_path() { |
| 68 | x1 := C.sockaddr_un{} |
| 69 | x2 := Unix{} |
| 70 | assert sizeof(x1.sun_path) == sizeof(x2.path) |
| 71 | } |
| 72 | |
| 73 | fn test_offsets_ipv6() { |
| 74 | assert __offsetof(C.sockaddr_in6, sin6_addr) == __offsetof(Ip6, addr) + aoffset |
| 75 | assert __offsetof(C.sockaddr_in6, sin6_port) == __offsetof(Ip6, port) + aoffset |
| 76 | } |
| 77 | |
| 78 | fn test_offsets_ipv4() { |
| 79 | assert __offsetof(C.sockaddr_in, sin_addr) == __offsetof(Ip, addr) + aoffset |
| 80 | assert __offsetof(C.sockaddr_in, sin_port) == __offsetof(Ip, port) + aoffset |
| 81 | } |
| 82 | |
| 83 | fn test_offsets_unix() { |
| 84 | assert __offsetof(C.sockaddr_un, sun_path) == __offsetof(Unix, path) + aoffset |
| 85 | } |
| 86 | |
| 87 | fn test_sizes_ipv6() { |
| 88 | assert sizeof(C.sockaddr_in6) == sizeof(Ip6) + aoffset |
| 89 | } |
| 90 | |
| 91 | fn test_sizes_ipv4() { |
| 92 | assert sizeof(C.sockaddr_in) == sizeof(Ip) + aoffset |
| 93 | } |
| 94 | |
| 95 | fn test_sizes_unix() { |
| 96 | assert sizeof(C.sockaddr_un) == sizeof(Unix) + aoffset |
| 97 | } |
| 98 | |
| 99 | fn test_ip_str() { |
| 100 | ip1 := new_ip(1337, addr_ip_any).str() |
| 101 | expected1 := '0.0.0.0:1337' |
| 102 | assert ip1.len == expected1.len |
| 103 | assert ip1 == expected1 |
| 104 | |
| 105 | addr := [u8(2), 0, 2, 2]! |
| 106 | ip2 := new_ip(2202, addr).str() |
| 107 | expected2 := '2.0.2.2:2202' |
| 108 | assert ip2.len == expected2.len |
| 109 | assert ip2 == expected2 |
| 110 | } |
| 111 | |
| 112 | fn test_ip6_str() { |
| 113 | ip1 := new_ip6(1337, addr_ip6_any).str() |
| 114 | expected1 := '[::]:1337' |
| 115 | assert ip1.len == expected1.len |
| 116 | assert ip1 == expected1 |
| 117 | |
| 118 | addr := [u8(2), 0, 2, 2, 2, 0, 1, 1, 2, 3, 2, 1, 2, 3, 5, 2]! |
| 119 | ip2 := new_ip6(2022, addr).str() |
| 120 | println(ip2) |
| 121 | expected2 := '[200:202:200:101:203:201:203:502]:2022' |
| 122 | assert ip2.len == expected2.len |
| 123 | assert ip2 == expected2 |
| 124 | } |
| 125 | |