diff options
Diffstat (limited to 'tests/stdlib/tnet.nim')
-rw-r--r-- | tests/stdlib/tnet.nim | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/tests/stdlib/tnet.nim b/tests/stdlib/tnet.nim new file mode 100644 index 000000000..27a6ac49c --- /dev/null +++ b/tests/stdlib/tnet.nim @@ -0,0 +1,130 @@ +discard """ +matrix: "--mm:refc; --mm:orc" +outputsub: "" +""" + +import net, nativesockets +import unittest +import std/assertions + +block: # isIpAddress tests + block: # 127.0.0.1 is valid + check isIpAddress("127.0.0.1") == true + + block: # ipv6 localhost is valid + check isIpAddress("::1") == true + + block: # fqdn is not an ip address + check isIpAddress("example.com") == false + + block: # random string is not an ipaddress + check isIpAddress("foo bar") == false + + block: # 5127.0.0.1 is invalid + check isIpAddress("5127.0.0.1") == false + + block: # ipv6 is valid + check isIpAddress("2001:cdba:0000:0000:0000:0000:3257:9652") == true + + block: # invalid ipv6 + check isIpAddress("gggg:cdba:0000:0000:0000:0000:3257:9652") == false + + +block: # parseIpAddress tests + block: # 127.0.0.1 is valid + discard parseIpAddress("127.0.0.1") + + block: # ipv6 localhost is valid + discard parseIpAddress("::1") + + block: # fqdn is not an ip address + expect(ValueError): + discard parseIpAddress("example.com") + + block: # random string is not an ipaddress + expect(ValueError): + discard parseIpAddress("foo bar") + + block: # ipv6 is valid + discard parseIpAddress("2001:cdba:0000:0000:0000:0000:3257:9652") + + block: # invalid ipv6 + expect(ValueError): + discard parseIpAddress("gggg:cdba:0000:0000:0000:0000:3257:9652") + + block: # ipv4-compatible ipv6 address (embedded ipv4 address) + check parseIpAddress("::ffff:10.0.0.23") == parseIpAddress("::ffff:0a00:0017") + + block: # octal number in ipv4 address + expect(ValueError): + discard parseIpAddress("010.8.8.8") + expect(ValueError): + discard parseIpAddress("8.010.8.8") + + block: # hexadecimal number in ipv4 address + expect(ValueError): + discard parseIpAddress("0xc0.168.0.1") + expect(ValueError): + discard parseIpAddress("192.0xa8.0.1") + + block: # less than 4 numbers in ipv4 address + expect(ValueError): + discard parseIpAddress("127.0.1") + + block: # octal number in embedded ipv4 address + expect(ValueError): + discard parseIpAddress("::ffff:010.8.8.8") + expect(ValueError): + discard parseIpAddress("::ffff:8.010.8.8") + + block: # hexadecimal number in embedded ipv4 address + expect(ValueError): + discard parseIpAddress("::ffff:0xc0.168.0.1") + expect(ValueError): + discard parseIpAddress("::ffff:192.0xa8.0.1") + + block: # less than 4 numbers in embedded ipv4 address + expect(ValueError): + discard parseIpAddress("::ffff:127.0.1") + +block: # "IpAddress/Sockaddr conversion" + proc test(ipaddrstr: string) = + var ipaddr_1 = parseIpAddress(ipaddrstr) + # echo ipaddrstr, " ", $ipaddr_1 + + doAssert($ipaddrstr == $ipaddr_1) + + var sockaddr: Sockaddr_storage + var socklen: SockLen + var ipaddr_2: IpAddress + var port_2: Port + + toSockAddr(ipaddr_1, Port(0), sockaddr, socklen) + fromSockAddr(sockaddr, socklen, ipaddr_2, port_2) + + doAssert(ipaddrstr == $ipaddr_1) + + doAssert(ipaddr_1 == ipaddr_2) + doAssert($ipaddr_1 == $ipaddr_2) + + if sockaddr.ss_family.cint == AF_INET.toInt: + var sockaddr4: Sockaddr_in + copyMem(addr sockaddr4, addr sockaddr, sizeof(sockaddr4)) + fromSockAddr(sockaddr4, socklen, ipaddr_2, port_2) + elif sockaddr.ss_family.cint == AF_INET6.toInt: + var sockaddr6: Sockaddr_in6 + copyMem(addr sockaddr6, addr sockaddr, sizeof(sockaddr6)) + fromSockAddr(sockaddr6, socklen, ipaddr_2, port_2) + + doAssert(ipaddr_1 == ipaddr_2) + doAssert($ipaddr_1 == $ipaddr_2) + + + # ipv6 address of example.com + test("2606:2800:220:1:248:1893:25c8:1946") + # ipv6 address of localhost + test("::1") + # ipv4 address of example.com + test("93.184.216.34") + # ipv4 address of localhost + test("127.0.0.1") |