Skip to content

Commit cafe8b6

Browse files
committed
ensure h2 requests include :scheme
1 parent fd57e55 commit cafe8b6

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

lib/async/websocket/client.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,14 @@ def close
9090
end
9191
end
9292

93-
def connect(authority, path, headers: nil, handler: Connection, extensions: ::Protocol::WebSocket::Extensions::Client.default, **options, &block)
93+
def connect(authority, path, scheme: @delegate.scheme, headers: nil, handler: Connection, extensions: ::Protocol::WebSocket::Extensions::Client.default, **options, &block)
9494
headers = ::Protocol::HTTP::Headers[headers]
9595

9696
extensions&.offer do |extension|
9797
headers.add(SEC_WEBSOCKET_EXTENSIONS, extension.join("; "))
9898
end
9999

100-
request = Request.new(nil, authority, path, headers, **options)
100+
request = Request.new(scheme, authority, path, headers, **options)
101101

102102
pool = @delegate.pool
103103
connection = pool.acquire

test/async/websocket/client.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# Copyright, 2023, by Samuel Williams.
55

66
require 'async/websocket/client'
7+
require 'async/websocket/adapters/http'
78

89
require 'sus/fixtures/async/http/server_context'
910

@@ -89,6 +90,30 @@
8990
end
9091
end
9192

93+
with '#connect' do
94+
let(:app) do
95+
Protocol::HTTP::Middleware.for do |request|
96+
Async::WebSocket::Adapters::HTTP.open(request) do |connection|
97+
connection.send_text("authority: #{request.authority}")
98+
connection.send_text("path: #{request.path}")
99+
connection.send_text("protocol: #{Array(request.protocol).inspect}")
100+
connection.send_text("scheme: #{request.scheme}")
101+
connection.close
102+
end or Protocol::HTTP::Response[404, {}, []]
103+
end
104+
end
105+
106+
it "fully populates the request" do
107+
connection = Async::WebSocket::Client.connect(client_endpoint)
108+
expect(connection.read.to_str).to be =~ /authority: localhost:\d+/
109+
expect(connection.read.to_str).to be == 'path: /'
110+
expect(connection.read.to_str).to be == 'protocol: ["websocket"]'
111+
expect(connection.read.to_str).to be == 'scheme: http'
112+
ensure
113+
connection&.close
114+
end
115+
end
116+
92117
with 'missing support for websockets' do
93118
let(:app) do
94119
Protocol::HTTP::Middleware.for do |request|

0 commit comments

Comments
 (0)