26
26
27
27
RSpec . describe Async ::HTTP ::Faraday ::Adapter do
28
28
include_context Async ::RSpec ::Reactor
29
-
29
+
30
30
let ( :endpoint ) {
31
31
Async ::HTTP ::Endpoint . parse ( 'http://127.0.0.1:9294' )
32
32
}
33
-
33
+
34
34
def run_server ( response = Protocol ::HTTP ::Response [ 204 ] , response_delay : nil )
35
35
Async do |task |
36
36
begin
37
37
server_task = task . async do
38
38
app = Proc . new do
39
- task . sleep ( response_delay ) if response_delay
39
+ if response_delay
40
+ task . sleep ( response_delay )
41
+ end
42
+
40
43
response
41
44
end
45
+
42
46
Async ::HTTP ::Server . new ( app , endpoint ) . run
43
47
end
44
-
48
+
45
49
yield
46
50
ensure
47
51
server_task . stop
48
52
end
49
53
end . wait
50
54
end
51
-
55
+
52
56
def get_response ( url = endpoint . url , path = '/index' , adapter_options : { } )
53
57
connection = Faraday . new ( url : url ) do |faraday |
54
58
faraday . response :logger
55
59
faraday . adapter :async_http , adapter_options
56
60
end
57
-
61
+
58
62
connection . get ( path )
59
63
60
64
ensure
61
65
connection &.close
62
66
end
63
-
67
+
64
68
it "client can get resource" do
65
69
run_server ( Protocol ::HTTP ::Response [ 200 , { } , [ 'Hello World' ] ] ) do
66
70
expect ( get_response . body ) . to eq 'Hello World'
@@ -74,42 +78,43 @@ def get_response(url = endpoint.url, path = '/index', adapter_options: {})
74
78
expect ( response ) . to be_success
75
79
end
76
80
end
77
-
81
+
78
82
it 'properly handles chunked responses' do
79
83
large_response_size = 65536
80
-
84
+
81
85
run_server ( Protocol ::HTTP ::Response [ 200 , { } , [ '.' * large_response_size ] ] ) do
82
86
expect ( get_response . body . size ) . to eq large_response_size
83
87
end
84
88
end
85
-
89
+
86
90
it 'properly handles no content responses' do
87
91
run_server ( Protocol ::HTTP ::Response [ 204 ] ) do
88
92
expect ( get_response . body ) . to be_nil
89
93
end
90
94
end
91
-
95
+
92
96
it 'closes connection automatically if persistent option is set to false' do
93
97
run_server do
94
98
expect do
95
99
get_response ( adapter_options : { persistent : false } )
96
100
end . not_to raise_error
97
101
end
98
102
end
99
-
103
+
100
104
it 'raises an exception if request times out' do
101
- delay = 0.01
102
-
105
+ delay = 0.1
106
+
103
107
run_server ( response_delay : delay ) do
104
108
expect do
105
- get_response ( adapter_options : { timeout : delay / 2 } )
109
+ get_response ( adapter_options : { timeout : delay / 2 } )
106
110
end . to raise_error ( Faraday ::TimeoutError )
111
+
107
112
expect do
108
- get_response ( adapter_options : { timeout : delay * 2 } )
113
+ get_response ( adapter_options : { timeout : delay * 2 } )
109
114
end . not_to raise_error
110
115
end
111
116
end
112
-
117
+
113
118
it 'wraps underlying exceptions into Faraday analogs' do
114
119
expect { get_response ( endpoint . url , '/index' ) } . to raise_error ( Faraday ::ConnectionFailed )
115
120
end
0 commit comments