File tree 5 files changed +61
-5
lines changed
5 files changed +61
-5
lines changed Original file line number Diff line number Diff line change
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'async'
5
+ require 'async/http/internet'
6
+
7
+ def get_responses_using_fibers ( count )
8
+ puts ( "Getting #{ count } responses using fibers." )
9
+ url = "https://httpbin.org/delay/0.001"
10
+ responses = [ ]
11
+
12
+ Async do
13
+ puts ( "Starting Async block." )
14
+ begin
15
+ internet = Async ::HTTP ::Internet . new
16
+ response_count = 0
17
+ count . times do
18
+ Async do
19
+ begin
20
+ response = internet . get ( url )
21
+ response_count += 1
22
+ puts ( "Response count: #{ response_count } . Received response: #{ response . status } " )
23
+ responses << response . status
24
+ rescue => e
25
+ puts ( "Error during request: #{ e . message } " )
26
+ # ensure
27
+ # response&.finish
28
+ end
29
+ end
30
+ end
31
+ rescue => e
32
+ puts ( "Error during outer: #{ e . message } " )
33
+ ensure
34
+ internet &.close
35
+ end
36
+ end . wait
37
+
38
+ puts ( "Ending Async block." )
39
+ responses
40
+ end
41
+
42
+ count = ARGV . first ? ARGV . first . to_i : 129
43
+ get_responses_using_fibers ( count )
44
+ puts ( 'Done.' )
Original file line number Diff line number Diff line change @@ -501,15 +501,23 @@ module HTTP
501
501
with 'slow server' do
502
502
let ( :app ) do
503
503
::Protocol ::HTTP ::Middleware . for do |request |
504
+ $stderr. puts "Sleeping for #{ endpoint . timeout * 2 } seconds..."
504
505
sleep ( endpoint . timeout * 2 )
506
+ $stderr. puts "Sending response..."
505
507
::Protocol ::HTTP ::Response [ 200 , { } , [ ] ]
506
508
end
507
509
end
508
510
509
511
it "can't get /" do
510
512
expect do
511
- client . get ( "/" )
513
+ response = client . get ( "/" )
514
+ $stderr. puts "Response: #{ response . inspect } "
515
+ ensure
516
+ $stderr. puts "Closing response..."
517
+ response &.close
512
518
end . to raise_exception ( ::IO ::TimeoutError )
519
+
520
+ $stderr. puts "Test is done..."
513
521
end
514
522
end
515
523
Original file line number Diff line number Diff line change @@ -68,7 +68,8 @@ def each(task: Task.current)
68
68
stream = write_upgrade_body ( protocol )
69
69
70
70
# At this point, the request body is hijacked, so we don't want to call #finish below.
71
- request = response = nil
71
+ request = nil unless request . body
72
+ response = nil
72
73
73
74
body . call ( stream )
74
75
else
@@ -78,15 +79,17 @@ def each(task: Task.current)
78
79
stream = write_tunnel_body ( request . version )
79
80
80
81
# Same as above:
81
- request = response = nil
82
+ request = nil unless request . body
83
+ response = nil
82
84
83
85
body . call ( stream )
84
86
else
85
87
head = request . head?
86
88
version = request . version
87
89
88
90
# Same as above:
89
- request = response = nil
91
+ request = nil unless request . body
92
+ response = nil
90
93
91
94
write_body ( version , body , head , trailer )
92
95
end
Original file line number Diff line number Diff line change @@ -35,6 +35,7 @@ def call(request)
35
35
36
36
response = create_response
37
37
response . send_request ( request )
38
+ $stderr. puts "Waiting for response..."
38
39
response . wait
39
40
40
41
return response
Original file line number Diff line number Diff line change @@ -123,7 +123,7 @@ def closed(error)
123
123
124
124
@exception = error
125
125
126
- notify!
126
+ self . notify!
127
127
end
128
128
end
129
129
You can’t perform that action at this time.
0 commit comments