summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-socket/test
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-12-07 18:11:13 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-12-07 18:11:13 +0900
commit73ef548c6386a1101b5d95654bcb142ab83149c7 (patch)
tree8b9a653db38f95ab8bc6858cfc62c9277e6362fb /mrbgems/mruby-socket/test
parentd75266dd1bade53255044460a9cd74596addaa84 (diff)
parentab54185005ec87fe4f5b10df95ad29659884141b (diff)
downloadmruby-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.rb89
-rw-r--r--mrbgems/mruby-socket/test/basicsocket.rb17
-rw-r--r--mrbgems/mruby-socket/test/ipsocket.rb40
-rw-r--r--mrbgems/mruby-socket/test/socket.rb34
-rw-r--r--mrbgems/mruby-socket/test/sockettest.c16
-rw-r--r--mrbgems/mruby-socket/test/tcpsocket.rb4
-rw-r--r--mrbgems/mruby-socket/test/udpsocket.rb16
-rw-r--r--mrbgems/mruby-socket/test/unix.rb126
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