specify posix.sys.socket:
- before:
sock = require "posix.sys.socket"
bind, setsockopt, socket = sock.bind, sock.setsockopt, sock.socket
recvfrom, sendto = sock.recvfrom, sock.sendto
AF_INET, AF_INET6, AF_UNIX, AF_NETLINK =
sock.AF_INET, sock.AF_INET6, sock.AF_UNIX, sock.AF_NETLINK
IPPROTO_TCP, SOCK_DGRAM = sock.IPPROTO_TCP, sock.SOCK_DGRAM
SOL_SOCKET, SO_RCVTIMEO = sock.SOL_SOCKET, sock.SO_RCVTIMEO
- describe socket:
- context with bad arguments:
badargs.diagnose (sock.socket, "(int, int, int)")
- describe socketpair:
- context with bad arguments:
badargs.diagnose (sock.socketpair, "(int, int, int)")
- describe getaddrinfo:
- before:
getaddrinfo, typeerrors = init (sock, "getaddrinfo")
- context with bad arguments: |
badargs.diagnose (getaddrinfo, "(?string, ?string|int, ?table)")
examples {
["it diagnoses unspecified host and service"] = function ()
expect (getaddrinfo ()).to_raise.
any_of (typeerrors (2, "string or int"))
end
}
examples {
["it diagnoses invalid hints fields"] = function ()
expect (getaddrinfo ("localhost", nil, {
protacol=IPPROTO_TCP
})).to_raise.any_of (typeerrors (3, nil, "protacol"))
expect (getaddrinfo ("localhost", nil, {
family=AF_INET, sacktype=SOCK_DGRAM, protocol=IPPROTO_TCP,
})).to_raise.any_of (typeerrors (3, nil, "sacktype"))
end
}
examples {
["it diagnoses wrong hints field types"] = function ()
expect (getaddrinfo ("localhost", nil, {
family=false,
})).to_raise.any_of (typeerrors (3, "int", "family", "boolean"))
expect (getaddrinfo ("localhost", nil, {
family=AF_INET, socktype=false,
})).to_raise.any_of (typeerrors (3, "int", "socktype", "boolean"))
expect (getaddrinfo ("localhost", nil, {
family=AF_INET, socktype=SOCK_DGRAM, protocol=false,
})).to_raise.any_of (typeerrors (3, "int", "protocol", "boolean"))
expect (getaddrinfo ("localhost", nil, {
family=AF_INET, socktype=SOCK_DGRAM, protocol=IPPROTO_TCP, flags=false,
})).to_raise.any_of (typeerrors (3, "int", "flags", "boolean"))
end
}
- describe connect:
- before:
connect, typeerrors = init (sock, "connect")
- context with bad arguments: |
badargs.diagnose (connect, "(int, table)")
examples {
["it diagnoses wrong family types"] = function ()
expect (connect (42, {family=false})).
to_raise.any_of (typeerrors (2, "int", "family", "boolean"))
expect (connect (42, {family=-1})).to_raise.any_of {
"bad argument #2 to 'connect' (unsupported family type -1)",
"bad argument #2 to '?' (unsupported family type -1)",
}
end
}
examples {
["it diagnoses wrong AF_INET field types"] = function ()
expect (connect (42, {family=AF_INET, port=false})).
to_raise.any_of (typeerrors (2, "int", "port", "boolean"))
expect (connect (42, {family=AF_INET, port=9999, addr=false})).
to_raise.any_of (typeerrors (2, "string", "addr", "boolean"))
end
}
examples {
["it diagnoses invalid AF_INET fields"] = function ()
expect (connect (42, {
family=AF_INET, port=9999, addr="127.0.0.1", flags=false
})).to_raise.any_of (typeerrors (2, nil, "flags"))
end
}
examples {
["it diagnoses wrong AF_INET6 field types"] = function ()
expect (connect (42, {family = AF_INET6, port = false})).
to_raise.any_of (typeerrors (2, "int", "port", "boolean"))
expect (connect (42, {family = AF_INET6, port = 9999, addr = false})).
to_raise.any_of (typeerrors (2, "string", "addr", "boolean"))
end
}
examples {
["it diagnoses invalid AF_INET6 fields"] = function ()
expect (connect (42, {
family=AF_INET6, port=9999, addr="::", flags=false
})).to_raise.any_of (typeerrors (2, nil, "flags"))
end
}
examples {
["it diagnoses wrong AF_UNIX field types"] = function ()
expect (connect (42, {family = AF_UNIX, path = false})).
to_raise.any_of (typeerrors (2, "string", "path", "boolean"))
end
}
examples {
["it diagnoses invalid AF_UNIX fields"] = function ()
expect (connect (42, {family=AF_UNIX, path="/tmp/afunix", port=9999})).
to_raise.any_of (typeerrors (2, nil, "port"))
end
}
if AF_NETLINK then
examples {
["it diagnoses wrong AF_NETLINK field types"] = function ()
expect (connect (42, {family = AF_NETLINK, pid = false})).
to_raise.any_of (typeerrors (2, "int", "pid", "boolean"))
expect (connect (42, {family = AF_NETLINK, pid = 9999, groups = false})).
to_raise.any_of (typeerrors (2, "int", "groups", "boolean"))
end
}
examples {
["it diagnoses invalid AF_NETLINK fields"] = function ()
expect (connect (42, {family=AF_NETLINK, pid=9999, groups=9999, port=9999})).
to_raise.any_of (typeerrors (2, nil, "port"))
end
}
end
- describe bind:
- before:
bind, typeerrors = init (sock, "bind")
- context with bad arguments: |
badargs.diagnose (bind, "(int, table)")
examples {
["it diagnoses wrong family types"] = function ()
expect (bind (42, {family=false})).
to_raise.any_of (typeerrors (2, "int", "family", "boolean"))
expect (bind (42, {family=-1})).to_raise.any_of {
"bad argument #2 to '?' (unsupported family type -1)",
"bad argument #2 to 'bind' (unsupported family type -1)",
}
end
}
examples {
["it diagnoses wrong AF_INET field types"] = function ()
expect (bind (42, {family=AF_INET, port=false})).
to_raise.any_of (typeerrors (2, "int", "port", "boolean"))
expect (bind (42, {family=AF_INET, port=9999, addr=false})).
to_raise.any_of (typeerrors (2, "string", "addr", "boolean"))
end
}
examples {
["it diagnoses invalid AF_INET fields"] = function ()
expect (bind (42, {
family=AF_INET, port=9999, addr="127.0.0.1", flags=false
})).to_raise.any_of (typeerrors (2, nil, "flags"))
end
}
examples {
["it diagnoses wrong AF_INET6 field types"] = function ()
expect (bind (42, {family = AF_INET6, port = false})).
to_raise.any_of (typeerrors (2, "int", "port", "boolean"))
expect (bind (42, {family = AF_INET6, port = 9999, addr = false})).
to_raise.any_of (typeerrors (2, "string", "addr", "boolean"))
end
}
examples {
["it diagnoses invalid AF_INET6 fields"] = function ()
expect (bind (42, {
family=AF_INET6, port=9999, addr="::", flags=false
})).to_raise.any_of (typeerrors (2, nil, "flags"))
end
}
examples {
["it diagnoses wrong AF_UNIX field types"] = function ()
expect (bind (42, {family = AF_UNIX, path = false})).
to_raise.any_of (typeerrors (2, "string", "path", "boolean"))
end
}
examples {
["it diagnoses invalid AF_UNIX fields"] = function ()
expect (bind (42, {family=AF_UNIX, path="/tmp/afunix", port=9999})).
to_raise.any_of (typeerrors (2, nil, "port"))
end
}
if AF_NETLINK then
examples {
["it diagnoses wrong AF_NETLINK field types"] = function ()
expect (bind (42, {family = AF_NETLINK, pid = false})).
to_raise.any_of (typeerrors (2, "int", "pid", "boolean"))
expect (bind (42, {family = AF_NETLINK, pid = 9999, groups = false})).
to_raise.any_of (typeerrors (2, "int", "groups", "boolean"))
end
}
examples {
["it diagnoses invalid AF_NETLINK fields"] = function ()
expect (bind (42, {family=AF_NETLINK, pid=9999, groups=9999, port=9999})).
to_raise.any_of (typeerrors (2, nil, "port"))
end
}
end
- describe listen:
- context with bad arguments:
badargs.diagnose (sock.listen, "(int, int)")
- describe accept:
- context with bad arguments:
badargs.diagnose (sock.accept, "(int)")
- describe recv:
- context with bad arguments:
badargs.diagnose (sock.recv, "(int, int)")
- describe recvfrom:
- context with bad arguments:
badargs.diagnose (sock.recvfrom, "(int, int)")
- describe send:
- context with bad arguments:
badargs.diagnose (sock.send, "(int, string)")
- describe sendto:
- before:
sendto, typeerrors = init (sock, "sendto")
- context with bad arguments: |
badargs.diagnose (sendto, "(int, string, table)")
examples {
["it diagnoses wrong family types"] = function ()
expect (sendto (42, "msg", {family=false})).
to_raise.any_of (typeerrors (3, "int", "family", "boolean"))
expect (sendto (42, "msg", {family=-1})).to_raise.any_of {
"bad argument #3 to '?' (unsupported family type -1)",
"bad argument #3 to 'sendto' (unsupported family type -1)",
}
end
}
examples {
["it diagnoses wrong AF_INET field types"] = function ()
expect (sendto (42, "msg", {family=AF_INET, port=false})).
to_raise.any_of (typeerrors (3, "int", "port", "boolean"))
expect (sendto (42, "msg", {family=AF_INET, port=9999, addr=false})).
to_raise.any_of (typeerrors (3, "string", "addr", "boolean"))
end
}
examples {
["it diagnoses invalid AF_INET fields"] = function ()
expect (sendto (42, "msg", {
family=AF_INET, port=9999, addr="127.0.0.1", flags=false
})).to_raise.any_of (typeerrors (3, nil, "flags"))
end
}
examples {
["it diagnoses wrong AF_INET6 field types"] = function ()
expect (sendto (42, "msg", {family = AF_INET6, port = false})).
to_raise.any_of (typeerrors (3, "int", "port", "boolean"))
expect (sendto (42, "msg", {family = AF_INET6, port = 9999, addr = false})).
to_raise.any_of (typeerrors (3, "string", "addr", "boolean"))
end
}
examples {
["it diagnoses invalid AF_INET6 fields"] = function ()
expect (sendto (42, "msg", {
family=AF_INET6, port=9999, addr="::", flags=false
})).to_raise.any_of (typeerrors (3, nil, "flags"))
end
}
examples {
["it diagnoses wrong AF_UNIX field types"] = function ()
expect (sendto (42, "msg", {family = AF_UNIX, path = false})).
to_raise.any_of (typeerrors (3, "string", "path", "boolean"))
end
}
examples {
["it diagnoses invalid AF_UNIX fields"] = function ()
expect (sendto (42, "msg", {family=AF_UNIX, path="/tmp/afunix", port=9999})).
to_raise.any_of (typeerrors (3, nil, "port"))
end
}
if AF_NETLINK then
examples {
["it diagnoses wrong AF_NETLINK field types"] = function ()
expect (sendto (42, "msg", {family = AF_NETLINK, pid = false})).
to_raise.any_of (typeerrors (3, "int", "pid", "boolean"))
expect (sendto (42, "msg", {family = AF_NETLINK, pid = 9999, groups = false})).
to_raise.any_of (typeerrors (3, "int", "groups", "boolean"))
end
}
examples {
["it diagnoses invalid AF_NETLINK fields"] = function ()
expect (sendto (42, "msg", {family=AF_NETLINK, pid=9999, groups=9999, port=9999})).
to_raise.any_of (typeerrors (3, nil, "port"))
end
}
end
- describe shutdown:
- context with bad arguments:
badargs.diagnose (sock.shutdown, "(int, int)")
- describe getsockname:
- context with bad arguments:
badargs.diagnose (sock.getsockname, "(int)")
- describe setsockopt:
- before:
SOL_SOCKET, SO_LINGER, IPPROTO_TCP =
sock.SOL_SOCKET, sock.SO_LINGER, sock.IPPROTO_TCP
setsockopt, typeerrors = init (sock, "setsockopt")
- context with bad arguments:
- 'it diagnoses missing argument #1':
expect (setsockopt ()).to_raise.any_of (typeerrors (1, "int"))
- 'it diagnoses argument #1 type not int':
expect (setsockopt (false)).to_raise.any_of (typeerrors (1, "int", "boolean"))
- 'it diagnoses missing argument #2':
expect (setsockopt (1)).to_raise.any_of (typeerrors (2, "int"))
- 'it diagnoses argument #2 type not int':
expect (setsockopt (1, false)).to_raise.any_of (typeerrors (2, "int", "boolean"))
- 'it diagnoses missing argument #3':
expect (setsockopt (1, 2)).to_raise.any_of (typeerrors (3, "int"))
- 'it diagnoses argument #3 type not int':
expect (setsockopt (1, 2, false)).to_raise.any_of (typeerrors (3, "int", "boolean"))
- 'it diagnoses missing argument #4':
expect (setsockopt (1, SOL_SOCKET, SO_LINGER)).
to_raise.any_of (typeerrors (4, "int"))
- 'it diagnoses argument #4 type not int':
expect (setsockopt (1, SOL_SOCKET, SO_LINGER, false)).
to_raise.any_of (typeerrors (4, "int", "boolean"))
- 'it diagnoses missing argument #5':
expect (setsockopt (1, SOL_SOCKET, SO_LINGER, 4)).
to_raise.any_of (typeerrors (5, "int"))
- 'it diagnoses argument #5 type not int':
expect (setsockopt (1, SOL_SOCKET, SO_LINGER, 4, false)).
to_raise.any_of (typeerrors (5, "int", "boolean"))
- it diagnoses too many arguments:
expect (setsockopt (1, SOL_SOCKET, IPPROTO_TCP, 4, false)).
to_raise.any_of (typeerrors (5))
expect (setsockopt (1, SOL_SOCKET, SO_LINGER, 4, 5, false)).
to_raise.any_of (typeerrors (6))
- it communicates with IPV4 and IPV6 over loopback: |
fd = socket (AF_INET6, SOCK_DGRAM, 0)
expect (type (fd)).to_be "number"
expect (fd >= 0).to_be (true)
expect (setsockopt (fd, SOL_SOCKET, SO_RCVTIMEO, 1, 0)).to_be (0)
expect (bind (fd, { family = AF_INET6, addr = "::", port = 9999 })).
to_be (0)
pending "issue #92"
sockt = { family = AF_INET, addr = "127.0.0.1", port = 59999 }
expect (sendto (fd, "Test ipv4", sockt)).to_be (9)
data, so = recvfrom (fd, 1024)
expect (data).to_be "Test ipv4"