diff options
author | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-09-20 20:18:52 +0000 |
---|---|---|
committer | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-09-20 20:18:52 +0000 |
commit | 1d15d5f08032acf1b7bceacbb450d617ff6e0931 (patch) | |
tree | a3785a79899302bc149e4a6e72f624ac27dc1f10 /spec/ruby/library/socket/fixtures | |
parent | 75bfc6440d595bf339007f4fb280fd4d743e89c1 (diff) |
Move spec/rubyspec to spec/ruby for consistency
* Other ruby implementations use the spec/ruby directory.
[Misc #13792] [ruby-core:82287]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec/ruby/library/socket/fixtures')
-rw-r--r-- | spec/ruby/library/socket/fixtures/classes.rb | 93 | ||||
-rw-r--r-- | spec/ruby/library/socket/fixtures/send_io.txt | 1 |
2 files changed, 94 insertions, 0 deletions
diff --git a/spec/ruby/library/socket/fixtures/classes.rb b/spec/ruby/library/socket/fixtures/classes.rb new file mode 100644 index 0000000000..b8e5d2a38d --- /dev/null +++ b/spec/ruby/library/socket/fixtures/classes.rb @@ -0,0 +1,93 @@ +require 'socket' + +module SocketSpecs + # helper to get the hostname associated to 127.0.0.1 + def self.hostname + # Calculate each time, without caching, since the result might + # depend on things like do_not_reverse_lookup mode, which is + # changing from test to test + Socket.getaddrinfo("127.0.0.1", nil)[0][2] + end + + def self.hostnamev6 + Socket.getaddrinfo("::1", nil)[0][2] + end + + def self.addr(which=:ipv4) + case which + when :ipv4 + host = "127.0.0.1" + when :ipv6 + host = "::1" + end + Socket.getaddrinfo(host, nil)[0][3] + end + + def self.reserved_unused_port + # https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers + 0 + end + + def self.sockaddr_in(port, host) + Socket::SockAddr_In.new(Socket.sockaddr_in(port, host)) + end + + def self.socket_path + path = tmp("unix.sock", false) + # Check for too long unix socket path (max 108 bytes including \0 => 107) + # Note that Linux accepts not null-terminated paths but the man page advises against it. + if path.bytesize > 107 + path = "/tmp/unix_server_spec.socket" + end + rm_socket(path) + path + end + + def self.rm_socket(path) + File.delete(path) if File.exist?(path) + end + + # TCPServer echo server accepting one connection + class SpecTCPServer + attr_reader :hostname, :port + + def initialize + @hostname = SocketSpecs.hostname + @server = TCPServer.new @hostname, 0 + @port = @server.addr[1] + + log "SpecTCPServer starting on #{@hostname}:#{@port}" + + @thread = Thread.new do + socket = @server.accept + log "SpecTCPServer accepted connection: #{socket}" + service socket + end + end + + def service(socket) + begin + data = socket.recv(1024) + + return if data.empty? + log "SpecTCPServer received: #{data.inspect}" + + return if data == "QUIT" + + socket.send data, 0 + ensure + socket.close + end + end + + def shutdown + log "SpecTCPServer shutting down" + @thread.join + @server.close + end + + def log(message) + @logger.puts message if @logger + end + end +end diff --git a/spec/ruby/library/socket/fixtures/send_io.txt b/spec/ruby/library/socket/fixtures/send_io.txt new file mode 100644 index 0000000000..eaaa1eb3ec --- /dev/null +++ b/spec/ruby/library/socket/fixtures/send_io.txt @@ -0,0 +1 @@ +This data is magic. |