mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-10-15 00:00:39 -04:00
91 lines
2.6 KiB
Ruby
91 lines
2.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "tempfile"
|
|
require_relative "../test_helper"
|
|
|
|
class UnixTest < Minitest::Test
|
|
include HTTPHelpers
|
|
|
|
using HTTPX::URIExtensions
|
|
|
|
unless RUBY_ENGINE == "jruby"
|
|
def test_unix_session
|
|
on_unix_server(__method__) do |path|
|
|
HTTPX.with(transport: "unix", addresses: [path]).wrap do |http|
|
|
http.get("http://unix.com/ping", "http://unix.com/ping").each do |response|
|
|
verify_status(response, 200)
|
|
assert response.to_s == "pong", "unexpected body (#{response})"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_unix_session_no_path
|
|
response = HTTPX.get("http://does-not-matter", transport: "unix", addresses: "blabla.sock")
|
|
verify_error_response(response, /No such file or directory/)
|
|
end
|
|
|
|
def test_unix_session_io
|
|
on_unix_server(__method__) do |path|
|
|
io = UNIXSocket.new(path)
|
|
HTTPX.with(transport: "unix", io: io).wrap do |http|
|
|
response = http.get("http://unix.com/ping")
|
|
verify_status(response, 200)
|
|
assert response.to_s == "pong", "unexpected body (#{response})"
|
|
end
|
|
assert io.eof?, "io should have been used and closed (by the server)"
|
|
io.close
|
|
end
|
|
end
|
|
|
|
def test_unix_session_io_hash
|
|
on_unix_server(__method__) do |path|
|
|
io = UNIXSocket.new(path)
|
|
uri = URI("http://unix.com/ping")
|
|
HTTPX.with(transport: "unix", io: { uri.authority => io }).wrap do |http|
|
|
response = http.get(uri)
|
|
verify_status(response, 200)
|
|
assert response.to_s == "pong", "unexpected body (#{response})"
|
|
end
|
|
assert io.eof?, "io should have been used and closed (by the server)"
|
|
io.close
|
|
end
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
RESPONSE_HEADER = <<-HTTP.lines.map(&:strip).map(&:chomp).join("\r\n") << ("\r\n" * 2)
|
|
HTTP/1.1 200 OK
|
|
Date: Mon, 27 Jul 2009 12:28:53 GMT
|
|
Content-Length: 4
|
|
Content-Type: text/plain
|
|
Connection: close
|
|
HTTP
|
|
|
|
def on_unix_server(sockname)
|
|
path = File.join(Dir.tmpdir, "httpx-unix-#{sockname}.sock")
|
|
server = UNIXServer.new(path)
|
|
begin
|
|
th = Thread.start do
|
|
loop do
|
|
begin
|
|
socket = server.accept
|
|
socket.readpartial(4096) # drain the socket for the request
|
|
socket.write(RESPONSE_HEADER)
|
|
socket.write("pong")
|
|
socket.close
|
|
rescue IOError
|
|
break
|
|
end
|
|
end
|
|
end
|
|
yield server.path
|
|
ensure
|
|
server.close
|
|
File.unlink(path)
|
|
th.terminate
|
|
end
|
|
end
|
|
end
|