diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-12-07 18:11:13 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-12-07 18:11:13 +0900 |
| commit | 73ef548c6386a1101b5d95654bcb142ab83149c7 (patch) | |
| tree | 8b9a653db38f95ab8bc6858cfc62c9277e6362fb /mrbgems/mruby-socket/test | |
| parent | d75266dd1bade53255044460a9cd74596addaa84 (diff) | |
| parent | ab54185005ec87fe4f5b10df95ad29659884141b (diff) | |
| download | mruby-73ef548c6386a1101b5d95654bcb142ab83149c7.tar.gz mruby-73ef548c6386a1101b5d95654bcb142ab83149c7.zip | |
Add 'mrbgems/mruby-socket/' from commit 'ab54185005ec87fe4f5b10df95ad29659884141b'
git-subtree-dir: mrbgems/mruby-socket
git-subtree-mainline: d75266dd1bade53255044460a9cd74596addaa84
git-subtree-split: ab54185005ec87fe4f5b10df95ad29659884141b
Diffstat (limited to 'mrbgems/mruby-socket/test')
| -rw-r--r-- | mrbgems/mruby-socket/test/addrinfo.rb | 89 | ||||
| -rw-r--r-- | mrbgems/mruby-socket/test/basicsocket.rb | 17 | ||||
| -rw-r--r-- | mrbgems/mruby-socket/test/ipsocket.rb | 40 | ||||
| -rw-r--r-- | mrbgems/mruby-socket/test/socket.rb | 34 | ||||
| -rw-r--r-- | mrbgems/mruby-socket/test/sockettest.c | 16 | ||||
| -rw-r--r-- | mrbgems/mruby-socket/test/tcpsocket.rb | 4 | ||||
| -rw-r--r-- | mrbgems/mruby-socket/test/udpsocket.rb | 16 | ||||
| -rw-r--r-- | mrbgems/mruby-socket/test/unix.rb | 126 |
8 files changed, 342 insertions, 0 deletions
diff --git a/mrbgems/mruby-socket/test/addrinfo.rb b/mrbgems/mruby-socket/test/addrinfo.rb new file mode 100644 index 000000000..8720eb0ae --- /dev/null +++ b/mrbgems/mruby-socket/test/addrinfo.rb @@ -0,0 +1,89 @@ +assert('Addrinfo') do + assert_equal(Class, Addrinfo.class) +end + +assert('super class of Addrinfo') do + assert_equal(Object, Addrinfo.superclass) +end + +assert('Addrinfo.getaddrinfo') do + ary = Addrinfo.getaddrinfo("localhost", "domain", Socket::AF_INET, Socket::SOCK_STREAM) + assert_true(ary.size >= 1) + ai = ary[0] + assert_equal(ai.afamily, Socket::AF_INET) + assert_equal(ai.pfamily, Socket::PF_INET) + assert_equal(ai.socktype, Socket::SOCK_STREAM) + assert_equal(ai.ip_address, '127.0.0.1') + assert_equal(ai.ip_port, 53) +end + +assert('Addrinfo.foreach') do + # assume Addrinfo.getaddrinfo works well + a = Addrinfo.getaddrinfo("localhost", "domain") + b = [] + Addrinfo.foreach("localhost", "domain") { |ai| b << ai } + assert_equal(a.size, b.size) +end + +assert('Addrinfo.ip') do + ai = Addrinfo.ip('127.0.0.1') + assert_equal('127.0.0.1', ai.ip_address) + assert_equal(Socket::AF_INET, ai.afamily) + assert_equal(0, ai.ip_port) + assert_equal(0, ai.socktype) + assert_equal(0, ai.protocol) +end + +assert('Addrinfo.tcp') do + ai = Addrinfo.tcp('127.0.0.1', 'smtp') + assert_equal('127.0.0.1', ai.ip_address) + assert_equal(Socket::AF_INET, ai.afamily) + assert_equal(25, ai.ip_port) + assert_equal(Socket::SOCK_STREAM, ai.socktype) + assert_equal(Socket::IPPROTO_TCP, ai.protocol) +end + +assert('Addrinfo.udp') do + ai = Addrinfo.udp('127.0.0.1', 'domain') + assert_equal('127.0.0.1', ai.ip_address) + assert_equal(Socket::AF_INET, ai.afamily) + assert_equal(53, ai.ip_port) + assert_equal(Socket::SOCK_DGRAM, ai.socktype) + assert_equal(Socket::IPPROTO_UDP, ai.protocol) +end + +assert('Addrinfo.unix') do + a1 = Addrinfo.unix('/tmp/sock') + assert_true(a1.unix?) + assert_equal('/tmp/sock', a1.unix_path) + assert_equal(Socket::SOCK_STREAM, a1.socktype) + a2 = Addrinfo.unix('/tmp/sock', Socket::SOCK_DGRAM) + assert_equal(Socket::SOCK_DGRAM, a2.socktype) +end + +assert('Addrinfo#afamily') do + ai4 = Addrinfo.new(Socket.sockaddr_in(1, '127.0.0.1')) + ai6 = Addrinfo.new(Socket.sockaddr_in(1, '::1')) + aiu = Addrinfo.new(Socket.sockaddr_un('/tmp/sock')) + assert_equal(Socket::AF_INET, ai4.afamily) + assert_equal(Socket::AF_INET6, ai6.afamily) + assert_equal(Socket::AF_UNIX, aiu.afamily) +end + +# assert('Addrinfo#canonname') do + +# #getnameinfo +# assert('Addrinfo#inspect') do +# assert('Addrinfo#inspect_socket') do +# assert('Addrinfo#ip?') do +# assert('Addrinfo#ip_address') do +# assert('Addrinfo#ip_port') do +# assert('Addrinfo#ip_unpack') do +# assert('Addrinfo#ipv4?') do +# assert('Addrinfo#ipv6?') do +# assert('Addrinfo#pfamily') do +# assert('Addrinfo#protocol') do +# assert('Addrinfo#socktype') do +# assert('Addrinfo#to_sockaddr') do +# assert('Addrinfo#unix?') do +# #unix_path diff --git a/mrbgems/mruby-socket/test/basicsocket.rb b/mrbgems/mruby-socket/test/basicsocket.rb new file mode 100644 index 000000000..8fbfbdd5d --- /dev/null +++ b/mrbgems/mruby-socket/test/basicsocket.rb @@ -0,0 +1,17 @@ +assert('BasicSocket') do + assert_equal(Class, BasicSocket.class) +end + +assert('super class of BasicSocket') do + assert_equal(IO, BasicSocket.superclass) +end + +assert('BasicSocket.do_not_reverse_lookup') do + assert_equal(BasicSocket.do_not_reverse_lookup, true) +end + +assert('BasicSocket.do_not_reverse_lookup=') do + BasicSocket.do_not_reverse_lookup = false + assert_equal(BasicSocket.do_not_reverse_lookup, false) + BasicSocket.do_not_reverse_lookup = true +end diff --git a/mrbgems/mruby-socket/test/ipsocket.rb b/mrbgems/mruby-socket/test/ipsocket.rb new file mode 100644 index 000000000..2b9f7e1d7 --- /dev/null +++ b/mrbgems/mruby-socket/test/ipsocket.rb @@ -0,0 +1,40 @@ +# Note: most of tests below will fail if UDPSocket is broken. + +assert('IPSocket.getaddress') do + l = IPSocket.getaddress("localhost") + assert_true (l == "127.0.0.1" or l == "::1") +end + +assert('IPSocket.addr') do + localhost = "127.0.0.1" + s = UDPSocket.new + s.bind(localhost, 0) + port = Addrinfo.new(s.getsockname).ip_port + + a = s.addr + assert_equal "AF_INET", a[0] + assert_equal port, a[1] + assert_equal localhost, a[2] + assert_equal localhost, a[3] + s.close + true +end + +assert('IPSocket.peeraddr') do + localhost = "127.0.0.1" + server = UDPSocket.new + server.bind(localhost, 0) + port = server.local_address.ip_port + + client = UDPSocket.new + client.connect(localhost, port) + + a = client.peeraddr + assert_equal "AF_INET", a[0] + assert_equal port, a[1] + assert_equal localhost, a[2] + assert_equal localhost, a[3] + client.close + server.close + true +end diff --git a/mrbgems/mruby-socket/test/socket.rb b/mrbgems/mruby-socket/test/socket.rb new file mode 100644 index 000000000..517f5a00c --- /dev/null +++ b/mrbgems/mruby-socket/test/socket.rb @@ -0,0 +1,34 @@ +assert('Socket.gethostname') do + assert_true(Socket.gethostname.is_a? String) +end + +assert('Socket::getaddrinfo') do + ret = Socket.getaddrinfo("localhost", "domain", Socket::AF_INET, Socket::SOCK_DGRAM) + assert_true ret.size >= 1 + a = ret[0] + assert_equal "AF_INET", a[0] + assert_equal 53, a[1] + # documents says it's a hostname but CRuby returns an address + #assert_equal "127.0.0.1", a[2] + assert_equal "127.0.0.1", a[3] + assert_equal Socket::AF_INET, a[4] + assert_equal Socket::SOCK_DGRAM, a[5] + assert_equal Socket::IPPROTO_UDP, a[6] +end + +assert('Socket#recvfrom') do + begin + sstr = "abcdefg" + s = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0) + c = Socket.new(Socket::AF_INET, Socket::SOCK_DGRAM, 0) + s.bind(Socket.sockaddr_in(0, "127.0.0.1")) + c.send sstr, 0, s.getsockname + rstr, ai = s.recvfrom sstr.size + + assert_equal sstr, rstr + assert_true "127.0.0.1", ai.ip_address + ensure + s.close rescue nil + c.close rescue nil + end +end diff --git a/mrbgems/mruby-socket/test/sockettest.c b/mrbgems/mruby-socket/test/sockettest.c new file mode 100644 index 000000000..9161bc3f3 --- /dev/null +++ b/mrbgems/mruby-socket/test/sockettest.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +#include "mruby.h" + +mrb_value +mrb_sockettest_tmppath(mrb_state *mrb, mrb_value klass) +{ + return mrb_str_new_cstr(mrb, tempnam(NULL, "mruby-socket")); +} + +void +mrb_mruby_socket_gem_test(mrb_state* mrb) +{ + struct RClass *c = mrb_define_module(mrb, "SocketTest"); + mrb_define_class_method(mrb, c, "tmppath", mrb_sockettest_tmppath, MRB_ARGS_NONE()); +} diff --git a/mrbgems/mruby-socket/test/tcpsocket.rb b/mrbgems/mruby-socket/test/tcpsocket.rb new file mode 100644 index 000000000..7056ec164 --- /dev/null +++ b/mrbgems/mruby-socket/test/tcpsocket.rb @@ -0,0 +1,4 @@ +#assert('TCPSocket.gethostbyname') do +#assert('TCPSocket.new') do +#assert('TCPSocket#close') do +#assert('TCPSocket#write') do diff --git a/mrbgems/mruby-socket/test/udpsocket.rb b/mrbgems/mruby-socket/test/udpsocket.rb new file mode 100644 index 000000000..bb57ed011 --- /dev/null +++ b/mrbgems/mruby-socket/test/udpsocket.rb @@ -0,0 +1,16 @@ +assert('UDPSocket.new') do + s = UDPSocket.new + assert_true(s.is_a? UDPSocket) + s.close + s = UDPSocket.new(Socket::AF_INET6) + assert_true(s.is_a? UDPSocket) + s.close + true +end + +#assert('UDPSocket#connect') do +#assert('UDPSocket#send') do +#assert('UDPSocket#recv') do + +#assert('UDPSocket#bind') do +#assert('UDPSocket#recvfrom_nonblock') do diff --git a/mrbgems/mruby-socket/test/unix.rb b/mrbgems/mruby-socket/test/unix.rb new file mode 100644 index 000000000..88ad17101 --- /dev/null +++ b/mrbgems/mruby-socket/test/unix.rb @@ -0,0 +1,126 @@ +def unixserver_test_block + path = SocketTest.tmppath + File.unlink path rescue nil + begin + result = yield path + ensure + File.unlink path rescue nil + end + result +end + +def with_unix_server + unixserver_test_block do |path| + UNIXServer.open(path) { |server| + yield path, server + } + end +end + +def with_unix_client + with_unix_server do |path, server| + UNIXSocket.open(path) do |csock| + ssock = server.accept + begin + yield path, server, ssock, csock + ensure + ssock.close unless ssock.closed? rescue nil + end + end + end +end + +assert('UNIXServer.new') do + unixserver_test_block do |path| + server = UNIXServer.new(path) + assert_true server.is_a? UNIXServer + server.close + File.unlink path + + s2 = nil + result = UNIXServer.open(path) { |s1| + assert_true s1.is_a? UNIXServer + s2 = s1 + 1234 + } + assert_equal 1234, result + assert_true s2.is_a? UNIXServer + assert_true s2.closed? + end +end + +# assert('UNIXServer#accept_nonblock') - would block if fails + +assert('UNIXServer#addr') do + with_unix_server do |path, server| + assert_equal [ "AF_UNIX", path], server.addr + end +end + +assert('UNIXServer#path') do + with_unix_server do |path, server| + assert_equal path, server.path + end +end + +# assert('UNIXServer#peeraddr') - will raise a runtime exception + +assert('UNIXServer#listen') do + with_unix_server do |path, server| + assert_equal 0, server.listen(1) + end +end + +assert('UNIXServer#sysaccept') do + with_unix_server do |path, server| + UNIXSocket.open(path) do |csock| + begin + fd = server.sysaccept + assert_true fd.kind_of? Integer + ensure + IO._sysclose(fd) rescue nil + end + end + end +end + +assert('UNIXSocket.new') do + with_unix_server do |path, server| + c = UNIXSocket.new(path) + assert_true c.is_a? UNIXSocket + c.close + true + end +end + +assert('UNIXSocket#addr') do + with_unix_client do |path, server, ssock, csock| + assert_equal [ "AF_UNIX", path ], ssock.addr + assert_equal [ "AF_UNIX", "" ], csock.addr + end +end + +assert('UNIXSocket#path') do + with_unix_client do |path, server, ssock, csock| + assert_equal path, ssock.path + assert_equal "", csock.path + end +end + +assert('UNIXSocket#peeraddr') do + with_unix_client do |path, server, ssock, csock| + assert_equal [ "AF_UNIX", "" ], ssock.peeraddr + assert_equal [ "AF_UNIX", path ], csock.peeraddr + end +end + +assert('UNIXSocket#recvfrom') do + with_unix_client do |path, server, ssock, csock| + str = "0123456789" + ssock.send str, 0 + a = csock.recvfrom(8) + assert_equal str[0, 8], a[0] + assert_equal "AF_UNIX", a[1][0] + # a[1][1] would be "" or something + end +end |
