uringmachine 0.28.3 → 0.29.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.
data/test/test_fiber.rb CHANGED
@@ -109,6 +109,34 @@ class FiberJoinTest < UMBaseTest
109
109
  assert_equal [:foo, :bar, :baz], res
110
110
  end
111
111
 
112
+ def test_join_array
113
+ f1 = machine.spin do
114
+ :foo
115
+ end
116
+
117
+ f2 = machine.spin do
118
+ machine.sleep(0.001)
119
+ :bar
120
+ end
121
+
122
+ f3 = machine.spin do
123
+ :baz
124
+ end
125
+
126
+ res = machine.join([f1, f2, f3])
127
+ assert_equal [:foo, :bar, :baz], res
128
+ end
129
+
130
+ def test_join_procs
131
+ res = machine.join(
132
+ ->(_) { machine.snooze; :f1 },
133
+ ->(_) { machine.sleep(0.01); :f2 },
134
+ ->(_) { machine.sleep(0.02); :f3 }
135
+ )
136
+ assert_equal [:f1, :f2, :f3], res
137
+ assert machine.fiber_set.empty?
138
+ end
139
+
112
140
  def test_join_cross_thread
113
141
  q = UM::Queue.new
114
142
 
@@ -142,7 +170,7 @@ class FiberJoinTest < UMBaseTest
142
170
  end
143
171
 
144
172
  class WaitFibersTest < UMBaseTest
145
- def test_await_fibers
173
+ def test_await
146
174
  q = UM::Queue.new
147
175
  x = nil
148
176
 
@@ -163,19 +191,40 @@ class WaitFibersTest < UMBaseTest
163
191
  machine.push q, 2
164
192
  end
165
193
 
166
- res = machine.await_fibers([f])
194
+ res = machine.await([f])
167
195
  assert_equal 0, x
168
196
  assert_equal 3, machine.shift(q)
169
197
  assert_equal 1, res
170
198
 
171
199
  done = nil
172
200
  f = machine.spin { machine.snooze; done = true }
173
- res = machine.await_fibers(f)
201
+ res = machine.await(f)
174
202
  assert done
175
203
  assert_equal 1, res
176
204
  end
177
205
 
178
- def test_await_fibers_multiple
206
+ def test_await_multiple
207
+ f1 = machine.spin do
208
+ :foo
209
+ end
210
+
211
+ f2 = machine.spin do
212
+ machine.sleep(0.001)
213
+ :bar
214
+ end
215
+
216
+ f3 = machine.spin do
217
+ :baz
218
+ end
219
+
220
+ res = machine.await([f1, f2, f3])
221
+ assert_equal 3, res
222
+ assert_equal true, f1.done?
223
+ assert_equal true, f2.done?
224
+ assert_equal true, f3.done?
225
+ end
226
+
227
+ def test_await_multiple_splat
179
228
  f1 = machine.spin do
180
229
  :foo
181
230
  end
@@ -189,11 +238,43 @@ class WaitFibersTest < UMBaseTest
189
238
  :baz
190
239
  end
191
240
 
192
- res = machine.await_fibers([f1, f2, f3])
241
+ res = machine.await(f1, f2, f3)
242
+ assert_equal 3, res
243
+ assert_equal true, f1.done?
244
+ assert_equal true, f2.done?
245
+ assert_equal true, f3.done?
246
+ end
247
+
248
+ def test_await_procs
249
+ buf = []
250
+ res = machine.await(
251
+ ->(_) { machine.snooze; buf << :f1 },
252
+ ->(_) { machine.sleep(0.01); buf << :f2 },
253
+ ->(_) { machine.sleep(0.02); buf << :f3 }
254
+ )
255
+ assert_equal 3, res
256
+ assert_equal [:f1, :f2, :f3], buf
257
+ end
258
+
259
+ def test_await_mixed
260
+ buf = []
261
+
262
+ f1 = machine.spin do
263
+ machine.sleep(0.01)
264
+ buf << :f1
265
+ end
266
+ f2 = ->(_) { buf << :f2_in; machine.sleep(0.02); buf << :f2_out }
267
+ f3 = machine.spin do
268
+ machine.sleep(0.005)
269
+ buf << :f3
270
+ end
271
+
272
+ res = machine.await(f1, f2, f3)
193
273
  assert_equal 3, res
274
+ assert_equal [:f2_in, :f3, :f1, :f2_out], buf
194
275
  end
195
276
 
196
- def test_await_fibers_cross_thread
277
+ def test_await_cross_thread
197
278
  q = UM::Queue.new
198
279
 
199
280
  t2 = Thread.new do
@@ -203,32 +284,32 @@ class WaitFibersTest < UMBaseTest
203
284
  m2.snooze
204
285
  :foo
205
286
  end
206
- m2.await_fibers(f)
287
+ m2.await(f)
207
288
  end
208
289
 
209
290
  f = machine.shift(q)
210
291
  assert_kind_of Fiber, f
211
- res = machine.await_fibers(f)
292
+ res = machine.await(f)
212
293
  assert_equal 1, res
213
294
  ensure
214
295
  t2.join
215
296
  end
216
297
 
217
- def test_await_fibers_with_exception
298
+ def test_await_with_exception
218
299
  f = machine.spin do
219
300
  raise "Foobar"
220
301
  end
221
302
 
222
- res = machine.await_fibers(f)
303
+ res = machine.await(f)
223
304
  assert_equal 1, res
224
305
  end
225
306
 
226
- def test_await_fibers_terminate
307
+ def test_await_terminate
227
308
  f1 = machine.spin { machine.sleep(1) }
228
309
  f2 = machine.spin { machine.sleep(1) }
229
310
  done = false
230
311
  a = machine.spin do
231
- machine.await_fibers([f1, f2])
312
+ machine.await([f1, f2])
232
313
  rescue UM::Terminate
233
314
  done = true
234
315
  end
@@ -6,6 +6,7 @@ require 'securerandom'
6
6
  require 'socket'
7
7
  require 'net/http'
8
8
  require 'json'
9
+ require 'timeout'
9
10
 
10
11
  class MethodCallAuditor
11
12
  attr_reader :calls
@@ -235,7 +236,6 @@ class FiberSchedulerTest < UMBaseTest
235
236
  assert_equal 'oba', buf
236
237
  assert_equal({
237
238
  fiber: 1,
238
- blocking_operation_wait: 1,
239
239
  io_pread: 1,
240
240
  io_close: 1,
241
241
  join: 1
@@ -261,7 +261,6 @@ class FiberSchedulerTest < UMBaseTest
261
261
  assert_equal 'fobazr', IO.read(fn)
262
262
  assert_equal({
263
263
  fiber: 1,
264
- blocking_operation_wait: 1,
265
264
  io_pwrite: 1,
266
265
  io_close: 1,
267
266
  join: 1
@@ -402,7 +401,6 @@ class FiberSchedulerTest < UMBaseTest
402
401
  assert_equal 'foobar', buf
403
402
  assert_equal({
404
403
  fiber: 2,
405
- blocking_operation_wait: 2,
406
404
  io_write: 1,
407
405
  io_read: 2,
408
406
  io_close: 2,
@@ -425,12 +423,11 @@ class FiberSchedulerTest < UMBaseTest
425
423
  sleep 0.001
426
424
  File.open(fn, 'r') { buf = it.read }
427
425
  end
428
- assert_equal 2, machine.metrics[:total_ops]
429
426
  @scheduler.join
427
+ assert_equal 8, machine.metrics[:total_ops]
430
428
  assert_equal 'foobar', buf
431
429
  assert_equal({
432
430
  fiber: 2,
433
- blocking_operation_wait: 2,
434
431
  io_write: 1,
435
432
  io_read: 2,
436
433
  io_close: 2,
@@ -452,7 +449,6 @@ class FiberSchedulerTest < UMBaseTest
452
449
  assert_equal 'foo', IO.read(fn)
453
450
  assert_equal({
454
451
  fiber: 1,
455
- blocking_operation_wait: 1,
456
452
  io_write: 1,
457
453
  io_close: 1,
458
454
  join: 1
@@ -472,7 +468,6 @@ class FiberSchedulerTest < UMBaseTest
472
468
  assert_equal 'foobar', IO.read(fn)
473
469
  assert_equal({
474
470
  fiber: 1,
475
- blocking_operation_wait: 1,
476
471
  io_write: 2,
477
472
  io_close: 1,
478
473
  join: 1
@@ -492,7 +487,6 @@ class FiberSchedulerTest < UMBaseTest
492
487
  # assert_equal 'foo', IO.read(fn)
493
488
  assert_equal({
494
489
  fiber: 1,
495
- blocking_operation_wait: 1, # open
496
490
  io_write: 1,
497
491
  io_close: 1,
498
492
  join: 1
@@ -667,7 +661,6 @@ class FiberSchedulerTest < UMBaseTest
667
661
  fiber: 1,
668
662
  io_write: 2,
669
663
  io_read: 1,
670
- blocking_operation_wait: 1,
671
664
  process_wait: 1,
672
665
  join: 1
673
666
  }, scheduler_calls_tally)
@@ -718,7 +711,6 @@ class FiberSchedulerTest < UMBaseTest
718
711
  fiber: 1,
719
712
  io_read: 2,
720
713
  io_close: 1,
721
- blocking_operation_wait: 1,
722
714
  address_resolve: 1,
723
715
  join: 1
724
716
  }, scheduler_calls_tally)
@@ -727,16 +719,15 @@ class FiberSchedulerTest < UMBaseTest
727
719
  def test_fiber_scheduler_timeout_after
728
720
  res = nil
729
721
  Fiber.schedule do
730
- Timeout.timeout(0.05) do
722
+ Timeout.timeout(0.1) do
731
723
  sleep 1
732
724
  end
733
725
  res = true
734
- rescue => e
735
- res = e
726
+ rescue => res
736
727
  end
737
728
  @scheduler.join
738
- assert_equal 3, machine.metrics[:total_ops]
739
729
  assert_kind_of Timeout::Error, res
730
+ assert_equal 3, machine.metrics[:total_ops]
740
731
  assert_equal({
741
732
  fiber: 1,
742
733
  timeout_after: 1,
@@ -764,30 +755,6 @@ class FiberSchedulerTest < UMBaseTest
764
755
  r.close rescue nil
765
756
  w.close rescue nil
766
757
  end
767
-
768
- def test_fiber_scheduler_blocking_operation_wait_single_issuer
769
- buf = []
770
- (1..10).each { |i|
771
- op = -> { i * 10}
772
- buf << @scheduler.blocking_operation_wait(op)
773
- sleep 0.01
774
- @machine.snooze
775
- }
776
- assert_equal (1..10).map { it * 10 }, buf
777
-
778
- buf = []
779
- (1..20).each { |i|
780
- op = -> { i * 10}
781
- Fiber.schedule do
782
- sleep 0.001
783
- buf << @scheduler.blocking_operation_wait(op)
784
- sleep 0.001
785
- end
786
- }
787
- @scheduler.join
788
-
789
- assert_equal (1..20).map { it * 10 }, buf.sort
790
- end
791
758
  end
792
759
 
793
760
  class FiberSchedulerIOClassMethodsTest < UMBaseTest
@@ -816,7 +783,6 @@ class FiberSchedulerIOClassMethodsTest < UMBaseTest
816
783
  assert_equal({
817
784
  fiber: 1,
818
785
  io_read: 2,
819
- blocking_operation_wait: 1,
820
786
  io_close: 1,
821
787
  join: 1
822
788
  }, scheduler_calls_tally)
@@ -832,7 +798,6 @@ class FiberSchedulerIOClassMethodsTest < UMBaseTest
832
798
  assert_equal '==***', IO.read(@fn)
833
799
  assert_equal({
834
800
  fiber: 1,
835
- blocking_operation_wait: 1,
836
801
  io_write: 1,
837
802
  io_close: 1,
838
803
  join: 1
@@ -850,7 +815,6 @@ class FiberSchedulerIOClassMethodsTest < UMBaseTest
850
815
  assert_equal '===', IO.read(fn2)
851
816
  assert_equal({
852
817
  fiber: 1,
853
- blocking_operation_wait: 3,
854
818
  io_close: 2,
855
819
  join: 1
856
820
  }, scheduler_calls_tally)
@@ -868,7 +832,6 @@ class FiberSchedulerIOClassMethodsTest < UMBaseTest
868
832
  assert_equal({
869
833
  fiber: 1,
870
834
  io_read: 3,
871
- blocking_operation_wait: 1,
872
835
  io_close: 1,
873
836
  join: 1
874
837
  }, scheduler_calls_tally)
@@ -899,7 +862,6 @@ class FiberSchedulerIOClassMethodsTest < UMBaseTest
899
862
  assert_equal({
900
863
  fiber: 1,
901
864
  io_read: 2,
902
- blocking_operation_wait: 1,
903
865
  io_close: 1,
904
866
  join: 1
905
867
  }, scheduler_calls_tally)
@@ -915,7 +877,6 @@ class FiberSchedulerIOClassMethodsTest < UMBaseTest
915
877
  assert_equal({
916
878
  fiber: 1,
917
879
  io_read: 3,
918
- blocking_operation_wait: 1,
919
880
  io_close: 1,
920
881
  join: 1
921
882
  }, scheduler_calls_tally)
@@ -948,7 +909,6 @@ class FiberSchedulerIOClassMethodsTest < UMBaseTest
948
909
  assert_equal '==***', IO.read(@fn)
949
910
  assert_equal({
950
911
  fiber: 1,
951
- blocking_operation_wait: 1,
952
912
  io_write: 1,
953
913
  io_close: 1,
954
914
  join: 1
@@ -1459,7 +1419,6 @@ class FiberSchedulerNetHTTPTest < UMBaseTest
1459
1419
  assert_equal C, calls[:fiber]
1460
1420
  assert_equal C, calls[:io_close]
1461
1421
  assert_in_range (C * 2)..(C * 4), calls[:io_wait]
1462
- assert_in_range (C * 7)..(C * 20), calls[:blocking_operation_wait]
1463
1422
  end
1464
1423
  end
1465
1424
 
@@ -1534,9 +1493,9 @@ class FiberSchedulerMultiTCPTest < UMBaseTest
1534
1493
  W.times {
1535
1494
  fibers << Fiber.schedule { run_client(port) }
1536
1495
  }
1537
- @machine.await_fibers(fibers)
1496
+ @machine.await(fibers)
1538
1497
  server.close
1539
- @machine.await_fibers(server_fiber)
1498
+ @machine.await(server_fiber)
1540
1499
  rescue Exception => e
1541
1500
  p test_run_server: e
1542
1501
  p e.backtrace
@@ -1598,7 +1557,7 @@ class FiberSchedulerMultiTCPTest < UMBaseTest
1598
1557
  run_server(port)
1599
1558
  end
1600
1559
  end
1601
- @machine.await_fibers(fibers)
1560
+ @machine.await(fibers)
1602
1561
  @calls = scheduler_calls_tally
1603
1562
  ensure
1604
1563
  # p ensure: ios
@@ -1653,7 +1612,6 @@ class FiberSchedulerErrorTest < UMBaseTest
1653
1612
  assert_equal({
1654
1613
  fiber: 1,
1655
1614
  io_read: 1,
1656
- blocking_operation_wait: 3,
1657
1615
  io_close: 1,
1658
1616
  join: 1
1659
1617
  }, scheduler_calls_tally)