summaryrefslogtreecommitdiff
path: root/jni/ruby/test/socket/test_tcp.rb
diff options
context:
space:
mode:
authorJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-16 18:49:26 +0900
committerJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-30 00:39:06 +0900
commitfcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch)
tree64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/test/socket/test_tcp.rb
Fresh start
Diffstat (limited to 'jni/ruby/test/socket/test_tcp.rb')
-rw-r--r--jni/ruby/test/socket/test_tcp.rb79
1 files changed, 79 insertions, 0 deletions
diff --git a/jni/ruby/test/socket/test_tcp.rb b/jni/ruby/test/socket/test_tcp.rb
new file mode 100644
index 0000000..7328897
--- /dev/null
+++ b/jni/ruby/test/socket/test_tcp.rb
@@ -0,0 +1,79 @@
+begin
+ require "socket"
+ require "test/unit"
+rescue LoadError
+end
+
+
+class TestSocket_TCPSocket < Test::Unit::TestCase
+ def test_initialize_failure
+ # These addresses are chosen from TEST-NET-1, TEST-NET-2, and TEST-NET-3.
+ # [RFC 5737]
+ # They are choosen because probably they are not used as a host address.
+ # Anyway the addresses are used for bind() and should be failed.
+ # So no packets should be generated.
+ test_ip_addresses = [
+ '192.0.2.1', '192.0.2.42', # TEST-NET-1
+ '198.51.100.1', '198.51.100.42', # TEST-NET-2
+ '203.0.113.1', '203.0.113.42', # TEST-NET-3
+ ]
+ begin
+ list = Socket.ip_address_list
+ rescue NotImplementedError
+ return
+ end
+ test_ip_addresses -= list.reject {|ai| !ai.ipv4? }.map {|ai| ai.ip_address }
+ if test_ip_addresses.empty?
+ return
+ end
+ client_addr = test_ip_addresses.first
+ client_port = 8000
+
+ server_addr = '127.0.0.1'
+ server_port = 80
+
+ begin
+ # Since client_addr is not an IP address of this host,
+ # bind() in TCPSocket.new should fail as EADDRNOTAVAIL.
+ t = TCPSocket.new(server_addr, server_port, client_addr, client_port)
+ flunk "expected SystemCallError"
+ rescue SystemCallError => e
+ assert_match "for \"#{client_addr}\" port #{client_port}", e.message
+ end
+ ensure
+ t.close if t && !t.closed?
+ end
+
+ def test_recvfrom
+ TCPServer.open("localhost", 0) {|svr|
+ th = Thread.new {
+ c = svr.accept
+ c.write "foo"
+ c.close
+ }
+ addr = svr.addr
+ TCPSocket.open(addr[3], addr[1]) {|sock|
+ assert_equal(["foo", nil], sock.recvfrom(0x10000))
+ }
+ th.join
+ }
+ end
+
+ def test_encoding
+ TCPServer.open("localhost", 0) {|svr|
+ th = Thread.new {
+ c = svr.accept
+ c.write "foo\r\n"
+ c.close
+ }
+ addr = svr.addr
+ TCPSocket.open(addr[3], addr[1]) {|sock|
+ assert_equal(true, sock.binmode?)
+ s = sock.gets
+ assert_equal("foo\r\n", s)
+ assert_equal(Encoding.find("ASCII-8BIT"), s.encoding)
+ }
+ th.join
+ }
+ end
+end if defined?(TCPSocket)