ione 1.3.0.pre0 → 1.3.0.pre3
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 +5 -5
- data/lib/ione/byte_buffer.rb +31 -6
- data/lib/ione/future.rb +38 -26
- data/lib/ione/io/acceptor.rb +1 -0
- data/lib/ione/io/base_connection.rb +23 -10
- data/lib/ione/io/connection.rb +1 -0
- data/lib/ione/io/io_reactor.rb +27 -37
- data/lib/ione/io/ssl_connection.rb +1 -0
- data/lib/ione/version.rb +1 -1
- data/spec/integration/io_spec.rb +3 -3
- data/spec/integration/ssl_spec.rb +7 -2
- data/spec/ione/byte_buffer_spec.rb +91 -38
- data/spec/ione/future_spec.rb +64 -65
- data/spec/ione/heap_spec.rb +18 -18
- data/spec/ione/io/acceptor_spec.rb +5 -5
- data/spec/ione/io/connection_common.rb +2 -2
- data/spec/ione/io/io_reactor_spec.rb +43 -30
- data/spec/ione/io/ssl_acceptor_spec.rb +3 -3
- data/spec/ione/io/ssl_connection_spec.rb +3 -3
- data/spec/spec_helper.rb +4 -0
- data/spec/support/fake_server.rb +1 -0
- metadata +16 -18
@@ -90,7 +90,7 @@ module Ione
|
|
90
90
|
restarted_future.value
|
91
91
|
await { sequence.size >= 2 }
|
92
92
|
begin
|
93
|
-
sequence.should
|
93
|
+
sequence.should eq([:stopped, :restarted])
|
94
94
|
ensure
|
95
95
|
reactor.stop
|
96
96
|
barrier.push(nil) while reactor.running?
|
@@ -141,8 +141,6 @@ module Ione
|
|
141
141
|
|
142
142
|
context 'when already started' do
|
143
143
|
it 'is not started again' do
|
144
|
-
calls = 0
|
145
|
-
lock = Mutex.new
|
146
144
|
ticks = Queue.new
|
147
145
|
barrier = Queue.new
|
148
146
|
selector.handler do
|
@@ -184,18 +182,17 @@ module Ione
|
|
184
182
|
end
|
185
183
|
|
186
184
|
it 'keeps running until stop completes' do
|
187
|
-
|
188
|
-
stop_barrier = Queue.new
|
185
|
+
barrier = Queue.new
|
189
186
|
selector.handler do
|
190
|
-
|
191
|
-
stop_barrier.pop
|
187
|
+
barrier.pop
|
192
188
|
[[], [], []]
|
193
189
|
end
|
194
190
|
reactor.start.value
|
195
191
|
future = reactor.stop
|
196
|
-
|
192
|
+
barrier.push(nil)
|
197
193
|
reactor.should be_running
|
198
|
-
|
194
|
+
barrier.push(nil) until future.completed?
|
195
|
+
reactor.should_not be_running
|
199
196
|
end
|
200
197
|
|
201
198
|
it 'unblocks the reactor' do
|
@@ -215,7 +212,7 @@ module Ione
|
|
215
212
|
it 'drains all sockets' do
|
216
213
|
reactor.start.value
|
217
214
|
TCPServer.open(0) do |server|
|
218
|
-
|
215
|
+
Thread.start { server.accept }
|
219
216
|
connection = reactor.connect(server.addr[3], server.addr[1], 5).value
|
220
217
|
writable = false
|
221
218
|
connection.stub(:stub_writable?) { writable }
|
@@ -251,7 +248,7 @@ module Ione
|
|
251
248
|
end
|
252
249
|
reactor.start.value
|
253
250
|
TCPServer.open(0) do |server|
|
254
|
-
|
251
|
+
Thread.start { server.accept }
|
255
252
|
connection = reactor.connect(server.addr[3], server.addr[1], 5).value
|
256
253
|
stopped_future = nil
|
257
254
|
mutex.synchronize do
|
@@ -358,7 +355,7 @@ module Ione
|
|
358
355
|
reactor.on_error { |e| error = e }
|
359
356
|
reactor.start
|
360
357
|
await { error }
|
361
|
-
error.message.should
|
358
|
+
error.message.should eq('Blurgh')
|
362
359
|
end
|
363
360
|
|
364
361
|
it 'calls the listener immediately when the reactor has already crashed' do
|
@@ -389,16 +386,16 @@ module Ione
|
|
389
386
|
await { !reactor.running? }
|
390
387
|
await { calls.size >= 2 }
|
391
388
|
reactor.on_error { calls << :pre_restarted }
|
392
|
-
calls.should
|
389
|
+
calls.should eq([
|
393
390
|
:pre_started,
|
394
391
|
:post_started,
|
395
392
|
:pre_restarted,
|
396
|
-
]
|
393
|
+
])
|
397
394
|
reactor.start
|
398
395
|
reactor.on_error { calls << :post_restarted }
|
399
396
|
barrier.push(nil)
|
400
397
|
await { !reactor.running? }
|
401
|
-
calls.should
|
398
|
+
calls.should eq([
|
402
399
|
:pre_started,
|
403
400
|
:post_started,
|
404
401
|
:pre_restarted,
|
@@ -406,7 +403,7 @@ module Ione
|
|
406
403
|
:post_started,
|
407
404
|
:pre_restarted,
|
408
405
|
:post_restarted,
|
409
|
-
]
|
406
|
+
])
|
410
407
|
end
|
411
408
|
end
|
412
409
|
|
@@ -426,7 +423,7 @@ module Ione
|
|
426
423
|
with_server do |host, port|
|
427
424
|
reactor.start.value
|
428
425
|
x = reactor.connect(host, port, 5) { :foo }.value
|
429
|
-
x.should
|
426
|
+
x.should eq(:foo)
|
430
427
|
end
|
431
428
|
end
|
432
429
|
|
@@ -434,7 +431,7 @@ module Ione
|
|
434
431
|
with_server do |host, port|
|
435
432
|
reactor.start.value
|
436
433
|
connection = reactor.connect(host, port).value
|
437
|
-
connection.connection_timeout.should
|
434
|
+
connection.connection_timeout.should eq(5)
|
438
435
|
end
|
439
436
|
end
|
440
437
|
|
@@ -442,7 +439,7 @@ module Ione
|
|
442
439
|
with_server do |host, port|
|
443
440
|
reactor.start.value
|
444
441
|
connection = reactor.connect(host, port, timeout: 9).value
|
445
|
-
connection.connection_timeout.should
|
442
|
+
connection.connection_timeout.should eq(9)
|
446
443
|
end
|
447
444
|
end
|
448
445
|
|
@@ -519,19 +516,19 @@ module Ione
|
|
519
516
|
it 'returns a future that resolves to what the given block returns' do
|
520
517
|
reactor.start.value
|
521
518
|
x = reactor.bind(ENV['SERVER_HOST'], port, 5) { |acceptor| :foo }.value
|
522
|
-
x.should
|
519
|
+
x.should eq(:foo)
|
523
520
|
end
|
524
521
|
|
525
522
|
it 'defaults to a backlog of 5' do
|
526
523
|
reactor.start.value
|
527
524
|
acceptor = reactor.bind(ENV['SERVER_HOST'], port).value
|
528
|
-
acceptor.backlog.should
|
525
|
+
acceptor.backlog.should eq(5)
|
529
526
|
end
|
530
527
|
|
531
528
|
it 'takes the backlog from the :backlog option' do
|
532
529
|
reactor.start.value
|
533
530
|
acceptor = reactor.bind(ENV['SERVER_HOST'], port, backlog: 9).value
|
534
|
-
acceptor.backlog.should
|
531
|
+
acceptor.backlog.should eq(9)
|
535
532
|
end
|
536
533
|
|
537
534
|
it 'returns the acceptor when no block is given' do
|
@@ -584,10 +581,12 @@ module Ione
|
|
584
581
|
end
|
585
582
|
|
586
583
|
it 'returns a future that is resolved after the specified duration' do
|
584
|
+
start = Time.now
|
587
585
|
clock.stub(:now).and_return(1)
|
588
|
-
f = reactor.schedule_timer(
|
589
|
-
clock.stub(:now).and_return(
|
586
|
+
f = reactor.schedule_timer(8)
|
587
|
+
clock.stub(:now).and_return(10.1)
|
590
588
|
await { f.resolved? }
|
589
|
+
expect(Time.now - start).to be < 1
|
591
590
|
end
|
592
591
|
end
|
593
592
|
|
@@ -713,7 +712,11 @@ module Ione
|
|
713
712
|
|
714
713
|
describe IoLoopBody do
|
715
714
|
let :loop_body do
|
716
|
-
described_class.new(selector: selector, clock: clock)
|
715
|
+
described_class.new(unblocker, selector: selector, clock: clock)
|
716
|
+
end
|
717
|
+
|
718
|
+
let :unblocker do
|
719
|
+
double(:unblocker, connected?: true, connecting?: false, writable?: false, closed?: false)
|
717
720
|
end
|
718
721
|
|
719
722
|
let :selector do
|
@@ -728,14 +731,24 @@ module Ione
|
|
728
731
|
double(:socket, connected?: false, connecting?: false, writable?: false, closed?: false)
|
729
732
|
end
|
730
733
|
|
734
|
+
before do
|
735
|
+
unblocker.stub(:close) { unblocker.stub(:closed?).and_return(true) }
|
736
|
+
end
|
737
|
+
|
731
738
|
describe '#tick' do
|
732
739
|
before do
|
733
740
|
loop_body.add_socket(socket)
|
734
741
|
end
|
735
742
|
|
743
|
+
it 'passes the unblocker to the selector as the first readable' do
|
744
|
+
socket.stub(:connected?).and_return(true)
|
745
|
+
selector.should_receive(:select).with([unblocker, socket], anything, anything, anything).and_return([nil, nil, nil])
|
746
|
+
loop_body.tick
|
747
|
+
end
|
748
|
+
|
736
749
|
it 'passes connected sockets as readables to the selector' do
|
737
750
|
socket.stub(:connected?).and_return(true)
|
738
|
-
selector.should_receive(:select).with([socket], anything, anything, anything).and_return([nil, nil, nil])
|
751
|
+
selector.should_receive(:select).with([unblocker, socket], anything, anything, anything).and_return([nil, nil, nil])
|
739
752
|
loop_body.tick
|
740
753
|
end
|
741
754
|
|
@@ -748,7 +761,7 @@ module Ione
|
|
748
761
|
it 'passes writable sockets as both readable and writable to the selector' do
|
749
762
|
socket.stub(:connected?).and_return(true)
|
750
763
|
socket.stub(:writable?).and_return(true)
|
751
|
-
selector.should_receive(:select).with([socket], [socket], anything, anything).and_return([nil, nil, nil])
|
764
|
+
selector.should_receive(:select).with([unblocker, socket], [socket], anything, anything).and_return([nil, nil, nil])
|
752
765
|
loop_body.tick
|
753
766
|
end
|
754
767
|
|
@@ -761,7 +774,7 @@ module Ione
|
|
761
774
|
|
762
775
|
it 'filters out closed sockets' do
|
763
776
|
socket.stub(:closed?).and_return(true)
|
764
|
-
selector.should_receive(:select).with([], [], anything, anything).and_return([nil, nil, nil])
|
777
|
+
selector.should_receive(:select).with([unblocker], [], anything, anything).and_return([nil, nil, nil])
|
765
778
|
loop_body.tick
|
766
779
|
end
|
767
780
|
|
@@ -805,7 +818,7 @@ module Ione
|
|
805
818
|
end
|
806
819
|
|
807
820
|
it 'allows the caller to specify a custom timeout' do
|
808
|
-
loop_body = described_class.new(selector: selector, clock: clock, tick_resolution: 99)
|
821
|
+
loop_body = described_class.new(unblocker, selector: selector, clock: clock, tick_resolution: 99)
|
809
822
|
selector.should_receive(:select).with(anything, anything, anything, 99).and_return([[], [], []])
|
810
823
|
loop_body.tick
|
811
824
|
end
|
@@ -900,4 +913,4 @@ module IoReactorSpec
|
|
900
913
|
@body.call(*args)
|
901
914
|
end
|
902
915
|
end
|
903
|
-
end
|
916
|
+
end
|
@@ -7,7 +7,7 @@ module Ione
|
|
7
7
|
module Io
|
8
8
|
describe SslAcceptor do
|
9
9
|
let :acceptor do
|
10
|
-
described_class.new('example.com', 4321,
|
10
|
+
described_class.new('example.com', 4321, 3, unblocker, reactor, ssl_context, socket_impl, ssl_socket_impl)
|
11
11
|
end
|
12
12
|
|
13
13
|
let :unblocker do
|
@@ -80,8 +80,8 @@ module Ione
|
|
80
80
|
acceptor.bind
|
81
81
|
acceptor.read
|
82
82
|
accepted_handlers.should have(1).item
|
83
|
-
accepted_handlers.first.host.should
|
84
|
-
accepted_handlers.first.port.should
|
83
|
+
accepted_handlers.first.host.should eq('example.com')
|
84
|
+
accepted_handlers.first.port.should eq(3333)
|
85
85
|
end
|
86
86
|
|
87
87
|
it 'returns the raw socket from #to_io' do
|
@@ -124,7 +124,7 @@ module Ione
|
|
124
124
|
end
|
125
125
|
handler.connect
|
126
126
|
handler.read
|
127
|
-
read_sizes.drop(1).should
|
127
|
+
read_sizes.drop(1).should eq([read_sizes.first] * 3)
|
128
128
|
end
|
129
129
|
else
|
130
130
|
it 'reads and initial chunk of data' do
|
@@ -134,7 +134,7 @@ module Ione
|
|
134
134
|
ssl_socket.stub(:read_nonblock).and_return('fooo')
|
135
135
|
handler.connect
|
136
136
|
handler.read
|
137
|
-
data.should
|
137
|
+
data.should eq(['fooo'])
|
138
138
|
end
|
139
139
|
|
140
140
|
it 'reads once, and then again with the value of #pending, until #pending returns zero' do
|
@@ -149,7 +149,7 @@ module Ione
|
|
149
149
|
end
|
150
150
|
handler.connect
|
151
151
|
handler.read
|
152
|
-
read_sizes.drop(1).should
|
152
|
+
read_sizes.drop(1).should eq([3, 2, 1])
|
153
153
|
end
|
154
154
|
end
|
155
155
|
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/fake_server.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ione
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.0.
|
4
|
+
version: 1.3.0.pre3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Theo Hultberg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Reactive programming framework for Ruby, painless evented IO, futures
|
14
14
|
and an efficient byte buffer
|
@@ -53,7 +53,7 @@ files:
|
|
53
53
|
- spec/support/server_helper.rb
|
54
54
|
homepage: http://github.com/iconara/ione
|
55
55
|
licenses:
|
56
|
-
- Apache
|
56
|
+
- Apache-2.0
|
57
57
|
metadata: {}
|
58
58
|
post_install_message:
|
59
59
|
rdoc_options: []
|
@@ -70,27 +70,25 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: 1.3.1
|
72
72
|
requirements: []
|
73
|
-
|
74
|
-
rubygems_version: 2.2.2
|
73
|
+
rubygems_version: 3.0.3
|
75
74
|
signing_key:
|
76
75
|
specification_version: 4
|
77
76
|
summary: Reactive programming framework for Ruby
|
78
77
|
test_files:
|
79
|
-
- spec/
|
80
|
-
- spec/
|
81
|
-
- spec/ione/
|
82
|
-
- spec/ione/
|
83
|
-
- spec/ione/heap_spec.rb
|
78
|
+
- spec/spec_helper.rb
|
79
|
+
- spec/ione/io/ssl_acceptor_spec.rb
|
80
|
+
- spec/ione/io/server_connection_spec.rb
|
81
|
+
- spec/ione/io/ssl_server_connection_spec.rb
|
84
82
|
- spec/ione/io/acceptor_spec.rb
|
85
|
-
- spec/ione/io/connection_common.rb
|
86
83
|
- spec/ione/io/connection_spec.rb
|
87
|
-
- spec/ione/io/io_reactor_spec.rb
|
88
|
-
- spec/ione/io/server_connection_spec.rb
|
89
|
-
- spec/ione/io/ssl_acceptor_spec.rb
|
90
84
|
- spec/ione/io/ssl_connection_spec.rb
|
91
|
-
- spec/ione/io/
|
92
|
-
- spec/
|
85
|
+
- spec/ione/io/io_reactor_spec.rb
|
86
|
+
- spec/ione/io/connection_common.rb
|
87
|
+
- spec/ione/heap_spec.rb
|
88
|
+
- spec/ione/byte_buffer_spec.rb
|
89
|
+
- spec/ione/future_spec.rb
|
90
|
+
- spec/integration/ssl_spec.rb
|
91
|
+
- spec/integration/io_spec.rb
|
92
|
+
- spec/support/server_helper.rb
|
93
93
|
- spec/support/await_helper.rb
|
94
94
|
- spec/support/fake_server.rb
|
95
|
-
- spec/support/server_helper.rb
|
96
|
-
has_rdoc:
|