uv-rays 1.3.8 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +14 -15
- data/lib/faraday/adapter/libuv.rb +80 -0
- data/lib/uv-rays.rb +8 -6
- data/lib/uv-rays/abstract_tokenizer.rb +7 -5
- data/lib/uv-rays/buffered_tokenizer.rb +24 -14
- data/lib/uv-rays/connection.rb +14 -14
- data/lib/uv-rays/http/encoding.rb +4 -2
- data/lib/uv-rays/http/parser.rb +14 -2
- data/lib/uv-rays/http/request.rb +4 -3
- data/lib/uv-rays/http_endpoint.rb +17 -14
- data/lib/uv-rays/scheduler.rb +26 -22
- data/lib/uv-rays/scheduler/cron.rb +2 -0
- data/lib/uv-rays/scheduler/time.rb +3 -1
- data/lib/uv-rays/tcp_server.rb +3 -2
- data/lib/uv-rays/version.rb +3 -1
- data/spec/connection_spec.rb +16 -41
- data/spec/http_endpoint_spec.rb +41 -120
- data/spec/scheduler_spec.rb +21 -45
- data/uv-rays.gemspec +15 -13
- metadata +52 -52
data/lib/uv-rays/http/request.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true, encoding: ASCII-8BIT
|
2
|
+
|
1
3
|
require 'uri'
|
2
4
|
require 'cgi'
|
3
5
|
require 'rubyntlm'
|
@@ -130,10 +132,9 @@ module UV
|
|
130
132
|
transport.write(request_header).catch @error
|
131
133
|
|
132
134
|
# Send file
|
133
|
-
fileRef = @endpoint.
|
134
|
-
fileRef.progress do
|
135
|
+
fileRef = @endpoint.reactor.file file, File::RDONLY do
|
135
136
|
# File is open and available for reading
|
136
|
-
pSend = fileRef.send_file(transport, :raw)
|
137
|
+
pSend = fileRef.send_file(transport, using: :raw, wait: :promise)
|
137
138
|
pSend.catch @error
|
138
139
|
pSend.finally do
|
139
140
|
fileRef.close
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'uri'
|
2
4
|
|
3
5
|
module UV
|
@@ -40,7 +42,7 @@ module UV
|
|
40
42
|
use_tls(client.tls_options) if tls
|
41
43
|
end
|
42
44
|
|
43
|
-
attr_accessor :request
|
45
|
+
attr_accessor :request, :reason
|
44
46
|
|
45
47
|
def on_read(data, *args) # user to define
|
46
48
|
@client.data_received(data)
|
@@ -56,7 +58,7 @@ module UV
|
|
56
58
|
def on_close # user to define
|
57
59
|
req = @request
|
58
60
|
@request = nil
|
59
|
-
@client.connection_closed(req)
|
61
|
+
@client.connection_closed(req, @reason)
|
60
62
|
end
|
61
63
|
|
62
64
|
def close_connection(request = nil)
|
@@ -79,7 +81,7 @@ module UV
|
|
79
81
|
def initialize(host, options = {})
|
80
82
|
@queue = []
|
81
83
|
@parser = Http::Parser.new
|
82
|
-
@thread =
|
84
|
+
@thread = reactor
|
83
85
|
@connection = nil
|
84
86
|
|
85
87
|
@options = @@defaults.merge(options)
|
@@ -106,16 +108,16 @@ module UV
|
|
106
108
|
attr_reader :cookiejar, :middleware
|
107
109
|
|
108
110
|
|
109
|
-
def get
|
110
|
-
def head
|
111
|
-
def delete
|
112
|
-
def put
|
113
|
-
def post
|
114
|
-
def patch
|
115
|
-
def options
|
111
|
+
def get(options = {}); request(:get, options); end
|
112
|
+
def head(options = {}); request(:head, options); end
|
113
|
+
def delete(options = {}); request(:delete, options); end
|
114
|
+
def put(options = {}); request(:put, options); end
|
115
|
+
def post(options = {}); request(:post, options); end
|
116
|
+
def patch(options = {}); request(:patch, options); end
|
117
|
+
def options(options = {}); request(:options, options); end
|
116
118
|
|
117
119
|
|
118
|
-
def request(method, options = {}
|
120
|
+
def request(method, options = {})
|
119
121
|
options = @options.merge(options)
|
120
122
|
options[:method] = method
|
121
123
|
|
@@ -154,7 +156,7 @@ module UV
|
|
154
156
|
end
|
155
157
|
end
|
156
158
|
|
157
|
-
def connection_closed(request)
|
159
|
+
def connection_closed(request, reason)
|
158
160
|
# We may have closed a previous connection
|
159
161
|
if @parser.request && (request.nil? || request == @parser.request)
|
160
162
|
@connection = nil
|
@@ -163,7 +165,7 @@ module UV
|
|
163
165
|
@parser.eof
|
164
166
|
elsif request.nil? && @parser.request.nil? && @queue.length > 0
|
165
167
|
req = @queue.pop
|
166
|
-
req.reject :connection_failure
|
168
|
+
req.reject(reason || :connection_failure)
|
167
169
|
end
|
168
170
|
end
|
169
171
|
|
@@ -233,7 +235,8 @@ module UV
|
|
233
235
|
end
|
234
236
|
|
235
237
|
def idle_timeout
|
236
|
-
@parser.reason = :timeout
|
238
|
+
@parser.reason = :timeout if @parser.request
|
239
|
+
@connection.reason = :timeout
|
237
240
|
close_connection
|
238
241
|
end
|
239
242
|
end
|
data/lib/uv-rays/scheduler.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
module UV
|
3
4
|
|
@@ -13,22 +14,25 @@ module UV
|
|
13
14
|
|
14
15
|
def initialize(scheduler)
|
15
16
|
# Create a dummy deferrable
|
16
|
-
|
17
|
-
defer =
|
17
|
+
reactor = scheduler.reactor
|
18
|
+
defer = reactor.defer
|
19
|
+
|
20
|
+
# Record a backtrace of where the schedule was created
|
21
|
+
@trace = caller
|
18
22
|
|
19
23
|
# Setup common event variables
|
20
24
|
@scheduler = scheduler
|
21
|
-
@created =
|
25
|
+
@created = reactor.now
|
22
26
|
@last_scheduled = @created
|
23
27
|
@trigger_count = 0
|
24
28
|
|
25
29
|
# init the promise
|
26
|
-
super(
|
30
|
+
super(reactor, defer)
|
27
31
|
end
|
28
32
|
|
29
33
|
# Provide relevant inspect information
|
30
34
|
def inspect
|
31
|
-
insp = "#<#{self.class}:0x#{self.__id__.to_s(16)} "
|
35
|
+
insp = String.new("#<#{self.class}:0x#{self.__id__.to_s(16)} ")
|
32
36
|
insp << "trigger_count=#{@trigger_count} "
|
33
37
|
insp << "config=#{info} " if self.respond_to?(:info, true)
|
34
38
|
insp << "next_scheduled=#{@next_scheduled} "
|
@@ -51,7 +55,7 @@ module UV
|
|
51
55
|
# notify listeners of the event
|
52
56
|
def trigger
|
53
57
|
@trigger_count += 1
|
54
|
-
@defer.notify(@
|
58
|
+
@defer.notify(@reactor.now, self)
|
55
59
|
end
|
56
60
|
end
|
57
61
|
|
@@ -64,7 +68,7 @@ module UV
|
|
64
68
|
|
65
69
|
# Updates the scheduled time
|
66
70
|
def update(time)
|
67
|
-
@last_scheduled = @
|
71
|
+
@last_scheduled = @reactor.now
|
68
72
|
|
69
73
|
parsed_time = Scheduler.parse_in(time, :quiet)
|
70
74
|
if parsed_time.nil?
|
@@ -114,14 +118,14 @@ module UV
|
|
114
118
|
# can be used to reset a repeating timer
|
115
119
|
def resume
|
116
120
|
@paused = false
|
117
|
-
@last_scheduled = @
|
121
|
+
@last_scheduled = @reactor.now
|
118
122
|
reschedule
|
119
123
|
end
|
120
124
|
|
121
125
|
# Runs the event and reschedules
|
122
126
|
def trigger
|
123
127
|
super()
|
124
|
-
@
|
128
|
+
@reactor.next_tick do
|
125
129
|
# Do this next tick to avoid needless scheduling
|
126
130
|
# if the event is stopped in the callback
|
127
131
|
reschedule
|
@@ -133,7 +137,7 @@ module UV
|
|
133
137
|
|
134
138
|
|
135
139
|
def next_time
|
136
|
-
@last_scheduled = @
|
140
|
+
@last_scheduled = @reactor.now
|
137
141
|
if @every.is_a? Fixnum
|
138
142
|
@next_scheduled = @last_scheduled + @every
|
139
143
|
else
|
@@ -156,13 +160,13 @@ module UV
|
|
156
160
|
|
157
161
|
|
158
162
|
class Scheduler
|
159
|
-
attr_reader :
|
163
|
+
attr_reader :reactor
|
160
164
|
attr_reader :time_diff
|
161
165
|
attr_reader :next
|
162
166
|
|
163
167
|
|
164
|
-
def initialize(
|
165
|
-
@
|
168
|
+
def initialize(reactor)
|
169
|
+
@reactor = reactor
|
166
170
|
@schedules = Set.new
|
167
171
|
@scheduled = []
|
168
172
|
@next = nil # Next schedule time
|
@@ -174,8 +178,8 @@ module UV
|
|
174
178
|
|
175
179
|
# as the libuv time is taken from an arbitrary point in time we
|
176
180
|
# need to roughly synchronize between it and ruby's Time.now
|
177
|
-
@
|
178
|
-
@time_diff = (Time.now.to_f * 1000).to_i - @
|
181
|
+
@reactor.update_time
|
182
|
+
@time_diff = (Time.now.to_f * 1000).to_i - @reactor.now
|
179
183
|
end
|
180
184
|
|
181
185
|
|
@@ -203,7 +207,7 @@ module UV
|
|
203
207
|
# @return [::UV::OneShot]
|
204
208
|
def in(time, callback = nil, &block)
|
205
209
|
callback ||= block
|
206
|
-
ms = @
|
210
|
+
ms = @reactor.now + Scheduler.parse_in(time)
|
207
211
|
event = OneShot.new(self, ms)
|
208
212
|
|
209
213
|
if callback.respond_to? :call
|
@@ -315,7 +319,7 @@ module UV
|
|
315
319
|
# Ensures the current timer, if any, is still
|
316
320
|
# accurate by checking the head of the schedule
|
317
321
|
def check_timer
|
318
|
-
@
|
322
|
+
@reactor.update_time
|
319
323
|
|
320
324
|
existing = @next
|
321
325
|
schedule = @scheduled.first
|
@@ -330,7 +334,7 @@ module UV
|
|
330
334
|
end
|
331
335
|
|
332
336
|
if not @next.nil?
|
333
|
-
in_time = @next - @
|
337
|
+
in_time = @next - @reactor.now
|
334
338
|
|
335
339
|
# Ensure there are never negative start times
|
336
340
|
if in_time > 3
|
@@ -352,7 +356,7 @@ module UV
|
|
352
356
|
|
353
357
|
# execute schedules that are within 3ms of this event
|
354
358
|
# Basic timer coalescing..
|
355
|
-
now = @
|
359
|
+
now = @reactor.now + 3
|
356
360
|
while @scheduled.first && @scheduled.first.next_scheduled <= now
|
357
361
|
schedule = @scheduled.shift
|
358
362
|
@schedules.delete(schedule)
|
@@ -364,7 +368,7 @@ module UV
|
|
364
368
|
|
365
369
|
# Provide some assurances on timer failure
|
366
370
|
def new_timer
|
367
|
-
@timer = @
|
371
|
+
@timer = @reactor.timer @timer_callback
|
368
372
|
@timer.finally do
|
369
373
|
new_timer
|
370
374
|
unless @next.nil?
|
@@ -376,9 +380,9 @@ module UV
|
|
376
380
|
end
|
377
381
|
|
378
382
|
module Libuv
|
379
|
-
class
|
383
|
+
class Reactor
|
380
384
|
def scheduler
|
381
|
-
@scheduler ||= UV::Scheduler.new(@
|
385
|
+
@scheduler ||= UV::Scheduler.new(@reactor)
|
382
386
|
@scheduler
|
383
387
|
end
|
384
388
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
#--
|
2
4
|
# Copyright (c) 2006-2013, John Mettraux, jmettraux@gmail.com
|
3
5
|
#
|
@@ -198,7 +200,7 @@ module UV
|
|
198
200
|
|
199
201
|
return (options[:drop_seconds] ? '0m' : '0s') if h.empty?
|
200
202
|
|
201
|
-
s = DU_KEYS.inject(
|
203
|
+
s = DU_KEYS.inject(String.new) { |r, key|
|
202
204
|
count = h[key]
|
203
205
|
count = nil if count == 0
|
204
206
|
r << "#{count}#{key}" if count
|
data/lib/uv-rays/tcp_server.rb
CHANGED
data/lib/uv-rays/version.rb
CHANGED
data/spec/connection_spec.rb
CHANGED
@@ -12,13 +12,13 @@ module TestConnect
|
|
12
12
|
|
13
13
|
def on_close
|
14
14
|
@disconnected = true
|
15
|
-
@
|
15
|
+
@reactor.stop
|
16
16
|
end
|
17
17
|
|
18
18
|
def on_read(data, connection, port = nil, udp_test = nil)
|
19
19
|
@received = data
|
20
20
|
close_connection(:after_writing)
|
21
|
-
@
|
21
|
+
@reactor.stop if udp_test # misc is set when test connect is a UDP connection
|
22
22
|
end
|
23
23
|
|
24
24
|
def check
|
@@ -48,10 +48,17 @@ end
|
|
48
48
|
|
49
49
|
describe UV::Connection do
|
50
50
|
before :each do
|
51
|
-
@
|
51
|
+
@reactor = Libuv::Reactor.new
|
52
|
+
@reactor.notifier do |error, context|
|
53
|
+
begin
|
54
|
+
@general_failure << "Log called: #{context}\n#{error.message}\n#{error.backtrace.join("\n") if error.backtrace}\n"
|
55
|
+
rescue Exception
|
56
|
+
@general_failure << "error in logger #{e.inspect}"
|
57
|
+
end
|
58
|
+
end
|
52
59
|
@general_failure = []
|
53
|
-
@timeout = @
|
54
|
-
@
|
60
|
+
@timeout = @reactor.timer do
|
61
|
+
@reactor.stop
|
55
62
|
@general_failure << "test timed out"
|
56
63
|
end
|
57
64
|
@timeout.start(5000)
|
@@ -74,15 +81,7 @@ describe UV::Connection do
|
|
74
81
|
|
75
82
|
describe 'basic tcp client server' do
|
76
83
|
it "should send some data and shutdown the socket" do
|
77
|
-
@
|
78
|
-
logger.progress do |level, errorid, error|
|
79
|
-
begin
|
80
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
81
|
-
rescue Exception
|
82
|
-
@general_failure << 'error in logger'
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
84
|
+
@reactor.run { |reactor|
|
86
85
|
UV.start_server '127.0.0.1', 3210, TestServer
|
87
86
|
@klass = UV.connect '127.0.0.1', 3210, TestConnect
|
88
87
|
}
|
@@ -95,15 +94,7 @@ describe UV::Connection do
|
|
95
94
|
end
|
96
95
|
|
97
96
|
it "should not call connect on connection failure" do
|
98
|
-
@
|
99
|
-
logger.progress do |level, errorid, error|
|
100
|
-
begin
|
101
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
102
|
-
rescue Exception
|
103
|
-
@general_failure << 'error in logger'
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
97
|
+
@reactor.run { |reactor|
|
107
98
|
@klass = UV.connect '127.0.0.1', 8123, TestConnect
|
108
99
|
}
|
109
100
|
|
@@ -117,15 +108,7 @@ describe UV::Connection do
|
|
117
108
|
|
118
109
|
describe 'basic tcp client server with tls' do
|
119
110
|
it "should send some data and shutdown the socket" do
|
120
|
-
@
|
121
|
-
logger.progress do |level, errorid, error|
|
122
|
-
begin
|
123
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
124
|
-
rescue Exception
|
125
|
-
@general_failure << 'error in logger'
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
111
|
+
@reactor.run { |reactor|
|
129
112
|
UV.start_server '127.0.0.1', 3212, TestServer, :use_tls
|
130
113
|
@klass = UV.connect '127.0.0.1', 3212, TestConnect
|
131
114
|
@klass.use_tls
|
@@ -141,15 +124,7 @@ describe UV::Connection do
|
|
141
124
|
|
142
125
|
describe 'basic udp client server' do
|
143
126
|
it "should send some data and close the socket" do
|
144
|
-
@
|
145
|
-
logger.progress do |level, errorid, error|
|
146
|
-
begin
|
147
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
148
|
-
rescue Exception
|
149
|
-
@general_failure << 'error in logger'
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
127
|
+
@reactor.run { |reactor|
|
153
128
|
UV.open_datagram_socket TestServer, '127.0.0.1', 3210
|
154
129
|
@klass = UV.open_datagram_socket TestConnect, '127.0.0.1', 3211
|
155
130
|
@klass.send_datagram('hello', '127.0.0.1', 3210)
|
data/spec/http_endpoint_spec.rb
CHANGED
@@ -171,31 +171,32 @@ end
|
|
171
171
|
|
172
172
|
describe UV::HttpEndpoint do
|
173
173
|
before :each do
|
174
|
-
@loop = Libuv::Loop.new
|
175
174
|
@general_failure = []
|
176
|
-
|
177
|
-
|
175
|
+
|
176
|
+
@reactor = Libuv::Reactor.new
|
177
|
+
@reactor.notifier do |error, context|
|
178
|
+
begin
|
179
|
+
@general_failure << "Log called: #{context}\n#{error.message}\n#{error.backtrace.join("\n") if error.backtrace}\n"
|
180
|
+
rescue Exception
|
181
|
+
@general_failure << "error in logger #{e.inspect}"
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
@timeout = @reactor.timer do
|
186
|
+
@reactor.stop
|
178
187
|
@general_failure << "test timed out"
|
179
188
|
end
|
180
189
|
@timeout.start(5000)
|
181
190
|
|
182
191
|
@request_failure = proc { |err|
|
183
192
|
@general_failure << err
|
184
|
-
@
|
193
|
+
@reactor.stop
|
185
194
|
}
|
186
195
|
end
|
187
196
|
|
188
197
|
describe 'basic http request' do
|
189
198
|
it "should send a request then receive a response" do
|
190
|
-
@
|
191
|
-
logger.progress do |level, errorid, error|
|
192
|
-
begin
|
193
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
194
|
-
rescue Exception
|
195
|
-
@general_failure << 'error in logger'
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
+
@reactor.run { |reactor|
|
199
200
|
tcp = UV.start_server '127.0.0.1', 3250, HttpServer
|
200
201
|
server = UV::HttpEndpoint.new 'http://127.0.0.1:3250'
|
201
202
|
|
@@ -203,7 +204,7 @@ describe UV::HttpEndpoint do
|
|
203
204
|
request.then(proc { |response|
|
204
205
|
@response = response
|
205
206
|
tcp.close
|
206
|
-
@
|
207
|
+
@reactor.stop
|
207
208
|
}, @request_failure)
|
208
209
|
}
|
209
210
|
|
@@ -219,15 +220,7 @@ describe UV::HttpEndpoint do
|
|
219
220
|
|
220
221
|
it "should return the response when no length is given and the connection is closed" do
|
221
222
|
# I've seen IoT devices do this (projector screen controllers etc)
|
222
|
-
@
|
223
|
-
logger.progress do |level, errorid, error|
|
224
|
-
begin
|
225
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
226
|
-
rescue Exception
|
227
|
-
@general_failure << 'error in logger'
|
228
|
-
end
|
229
|
-
end
|
230
|
-
|
223
|
+
@reactor.run { |reactor|
|
231
224
|
tcp = UV.start_server '127.0.0.1', 3250, WeirdServer
|
232
225
|
server = UV::HttpEndpoint.new 'http://127.0.0.1:3250'
|
233
226
|
|
@@ -235,7 +228,7 @@ describe UV::HttpEndpoint do
|
|
235
228
|
request.then(proc { |response|
|
236
229
|
@response = response
|
237
230
|
tcp.close
|
238
|
-
@
|
231
|
+
@reactor.stop
|
239
232
|
}, @request_failure)
|
240
233
|
}
|
241
234
|
|
@@ -250,29 +243,21 @@ describe UV::HttpEndpoint do
|
|
250
243
|
end
|
251
244
|
|
252
245
|
it "should send multiple requests on the same connection" do
|
253
|
-
@
|
254
|
-
logger.progress do |level, errorid, error|
|
255
|
-
begin
|
256
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
257
|
-
rescue Exception
|
258
|
-
@general_failure << 'error in logger'
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
246
|
+
@reactor.run { |reactor|
|
262
247
|
tcp = UV.start_server '127.0.0.1', 3250, HttpServer
|
263
248
|
server = UV::HttpEndpoint.new 'http://127.0.0.1:3250'
|
264
249
|
|
265
250
|
request = server.get(path: '/whatwhat', req: 1)
|
266
251
|
request.then(proc { |response|
|
267
252
|
@response = response
|
268
|
-
#@
|
253
|
+
#@reactor.stop
|
269
254
|
}, @request_failure)
|
270
255
|
|
271
256
|
request2 = server.get(path: '/', req: 2)
|
272
257
|
request2.then(proc { |response|
|
273
258
|
@response2 = response
|
274
259
|
tcp.close
|
275
|
-
@
|
260
|
+
@reactor.stop
|
276
261
|
}, @request_failure)
|
277
262
|
}
|
278
263
|
|
@@ -293,15 +278,7 @@ describe UV::HttpEndpoint do
|
|
293
278
|
|
294
279
|
describe 'old http request' do
|
295
280
|
it "should send a request then receive a response" do
|
296
|
-
@
|
297
|
-
logger.progress do |level, errorid, error|
|
298
|
-
begin
|
299
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
300
|
-
rescue Exception
|
301
|
-
@general_failure << 'error in logger'
|
302
|
-
end
|
303
|
-
end
|
304
|
-
|
281
|
+
@reactor.run { |reactor|
|
305
282
|
tcp = UV.start_server '127.0.0.1', 3250, OldServer
|
306
283
|
server = UV::HttpEndpoint.new 'http://127.0.0.1:3250'
|
307
284
|
|
@@ -309,7 +286,7 @@ describe UV::HttpEndpoint do
|
|
309
286
|
request.then(proc { |response|
|
310
287
|
@response = response
|
311
288
|
tcp.close
|
312
|
-
@
|
289
|
+
@reactor.stop
|
313
290
|
}, @request_failure)
|
314
291
|
}
|
315
292
|
|
@@ -322,29 +299,21 @@ describe UV::HttpEndpoint do
|
|
322
299
|
end
|
323
300
|
|
324
301
|
it "should send multiple requests" do
|
325
|
-
@
|
326
|
-
logger.progress do |level, errorid, error|
|
327
|
-
begin
|
328
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
329
|
-
rescue Exception
|
330
|
-
@general_failure << 'error in logger'
|
331
|
-
end
|
332
|
-
end
|
333
|
-
|
302
|
+
@reactor.run { |reactor|
|
334
303
|
tcp = UV.start_server '127.0.0.1', 3251, OldServer
|
335
304
|
server = UV::HttpEndpoint.new 'http://127.0.0.1:3251'
|
336
305
|
|
337
306
|
request = server.get(:path => '/')
|
338
307
|
request.then(proc { |response|
|
339
308
|
@response = response
|
340
|
-
#@
|
309
|
+
#@reactor.stop
|
341
310
|
}, @request_failure)
|
342
311
|
|
343
312
|
request2 = server.get(:path => '/')
|
344
313
|
request2.then(proc { |response|
|
345
314
|
@response2 = response
|
346
315
|
tcp.close
|
347
|
-
@
|
316
|
+
@reactor.stop
|
348
317
|
}, @request_failure)
|
349
318
|
}
|
350
319
|
|
@@ -365,15 +334,7 @@ describe UV::HttpEndpoint do
|
|
365
334
|
|
366
335
|
describe 'Auth support' do
|
367
336
|
it "should perform NTLM auth transparently" do
|
368
|
-
@
|
369
|
-
logger.progress do |level, errorid, error|
|
370
|
-
begin
|
371
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
372
|
-
rescue Exception
|
373
|
-
@general_failure << 'error in logger'
|
374
|
-
end
|
375
|
-
end
|
376
|
-
|
337
|
+
@reactor.run { |reactor|
|
377
338
|
tcp = UV.start_server '127.0.0.1', 3252, NTLMServer
|
378
339
|
server = UV::HttpEndpoint.new 'http://127.0.0.1:3252', ntlm: {
|
379
340
|
user: 'username',
|
@@ -385,7 +346,7 @@ describe UV::HttpEndpoint do
|
|
385
346
|
request.then(proc { |response|
|
386
347
|
@response = response
|
387
348
|
tcp.close
|
388
|
-
@
|
349
|
+
@reactor.stop
|
389
350
|
}, @request_failure)
|
390
351
|
}
|
391
352
|
|
@@ -399,15 +360,7 @@ describe UV::HttpEndpoint do
|
|
399
360
|
end
|
400
361
|
|
401
362
|
it "should perform Digest auth transparently" do
|
402
|
-
@
|
403
|
-
logger.progress do |level, errorid, error|
|
404
|
-
begin
|
405
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
406
|
-
rescue Exception
|
407
|
-
@general_failure << 'error in logger'
|
408
|
-
end
|
409
|
-
end
|
410
|
-
|
363
|
+
@reactor.run { |reactor|
|
411
364
|
tcp = UV.start_server '127.0.0.1', 3252, DigestServer
|
412
365
|
server = UV::HttpEndpoint.new 'http://127.0.0.1:3252', digest: {
|
413
366
|
user: 'Mufasa',
|
@@ -418,7 +371,7 @@ describe UV::HttpEndpoint do
|
|
418
371
|
request.then(proc { |response|
|
419
372
|
@response = response
|
420
373
|
tcp.close
|
421
|
-
@
|
374
|
+
@reactor.stop
|
422
375
|
}, @request_failure)
|
423
376
|
}
|
424
377
|
|
@@ -434,15 +387,7 @@ describe UV::HttpEndpoint do
|
|
434
387
|
|
435
388
|
describe 'cookies' do
|
436
389
|
it "should accept cookies and send them on subsequent requests" do
|
437
|
-
@
|
438
|
-
logger.progress do |level, errorid, error|
|
439
|
-
begin
|
440
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
441
|
-
rescue Exception
|
442
|
-
@general_failure << 'error in logger'
|
443
|
-
end
|
444
|
-
end
|
445
|
-
|
390
|
+
@reactor.run { |reactor|
|
446
391
|
tcp = UV.start_server '127.0.0.1', 3250, HttpServer
|
447
392
|
@server = UV::HttpEndpoint.new 'http://127.0.0.1:3250'
|
448
393
|
|
@@ -451,7 +396,7 @@ describe UV::HttpEndpoint do
|
|
451
396
|
|
452
397
|
request.then(proc { |response|
|
453
398
|
tcp.close
|
454
|
-
@
|
399
|
+
@reactor.stop
|
455
400
|
}, @request_failure)
|
456
401
|
}
|
457
402
|
|
@@ -463,15 +408,7 @@ describe UV::HttpEndpoint do
|
|
463
408
|
|
464
409
|
describe 'when things go wrong' do
|
465
410
|
it "should reconnect after connection dropped and continue sending requests" do
|
466
|
-
@
|
467
|
-
logger.progress do |level, errorid, error|
|
468
|
-
begin
|
469
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
470
|
-
rescue Exception
|
471
|
-
@general_failure << 'error in logger'
|
472
|
-
end
|
473
|
-
end
|
474
|
-
|
411
|
+
@reactor.run { |reactor|
|
475
412
|
tcp = UV.start_server '127.0.0.1', 6353, BrokenServer
|
476
413
|
server = UV::HttpEndpoint.new 'http://127.0.0.1:6353'
|
477
414
|
|
@@ -479,7 +416,7 @@ describe UV::HttpEndpoint do
|
|
479
416
|
request = server.get(:path => '/')
|
480
417
|
request.then(proc { |response|
|
481
418
|
@response = response
|
482
|
-
#@
|
419
|
+
#@reactor.stop
|
483
420
|
}, proc { |error|
|
484
421
|
@error = error
|
485
422
|
})
|
@@ -488,7 +425,7 @@ describe UV::HttpEndpoint do
|
|
488
425
|
request2.then(proc { |response|
|
489
426
|
@response2 = response
|
490
427
|
tcp.close
|
491
|
-
@
|
428
|
+
@reactor.stop
|
492
429
|
}, @request_failure)
|
493
430
|
}
|
494
431
|
|
@@ -505,15 +442,7 @@ describe UV::HttpEndpoint do
|
|
505
442
|
end
|
506
443
|
|
507
444
|
it "should reconnect after timeout and continue sending requests" do
|
508
|
-
@
|
509
|
-
logger.progress do |level, errorid, error|
|
510
|
-
begin
|
511
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
512
|
-
rescue Exception
|
513
|
-
@general_failure << 'error in logger'
|
514
|
-
end
|
515
|
-
end
|
516
|
-
|
445
|
+
@reactor.run { |reactor|
|
517
446
|
tcp = UV.start_server '127.0.0.1', 6363, SlowServer
|
518
447
|
server = UV::HttpEndpoint.new 'http://127.0.0.1:6363', inactivity_timeout: 500
|
519
448
|
|
@@ -521,7 +450,7 @@ describe UV::HttpEndpoint do
|
|
521
450
|
request = server.get(:path => '/')
|
522
451
|
request.then(proc { |response|
|
523
452
|
@response = response
|
524
|
-
#@
|
453
|
+
#@reactor.stop
|
525
454
|
}, proc { |error|
|
526
455
|
@error = error
|
527
456
|
})
|
@@ -530,7 +459,7 @@ describe UV::HttpEndpoint do
|
|
530
459
|
request2.then(proc { |response|
|
531
460
|
@response2 = response
|
532
461
|
tcp.close
|
533
|
-
@
|
462
|
+
@reactor.stop
|
534
463
|
}, @request_failure)
|
535
464
|
}
|
536
465
|
|
@@ -547,15 +476,7 @@ describe UV::HttpEndpoint do
|
|
547
476
|
end
|
548
477
|
|
549
478
|
it "should fail if the server is not available" do
|
550
|
-
@
|
551
|
-
logger.progress do |level, errorid, error|
|
552
|
-
begin
|
553
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
554
|
-
rescue Exception
|
555
|
-
@general_failure << 'error in logger'
|
556
|
-
end
|
557
|
-
end
|
558
|
-
|
479
|
+
@reactor.run { |reactor|
|
559
480
|
server = UV::HttpEndpoint.new 'http://127.0.0.1:6666', inactivity_timeout: 500
|
560
481
|
|
561
482
|
@response = nil
|
@@ -564,7 +485,7 @@ describe UV::HttpEndpoint do
|
|
564
485
|
request = server.get(:path => '/')
|
565
486
|
request.then(proc { |response|
|
566
487
|
@response = response
|
567
|
-
#@
|
488
|
+
#@reactor.stop
|
568
489
|
}, proc { |error|
|
569
490
|
@error = error
|
570
491
|
})
|
@@ -572,10 +493,10 @@ describe UV::HttpEndpoint do
|
|
572
493
|
request2 = server.get(:path => '/')
|
573
494
|
request2.then(proc { |response|
|
574
495
|
@response2 = response
|
575
|
-
@
|
496
|
+
@reactor.stop
|
576
497
|
}, proc { |error|
|
577
498
|
@error2 = error
|
578
|
-
@
|
499
|
+
@reactor.stop
|
579
500
|
})
|
580
501
|
}
|
581
502
|
|