uringmachine 0.28.3 → 0.29.0

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
@@ -235,7 +235,6 @@ class FiberSchedulerTest < UMBaseTest
235
235
  assert_equal 'oba', buf
236
236
  assert_equal({
237
237
  fiber: 1,
238
- blocking_operation_wait: 1,
239
238
  io_pread: 1,
240
239
  io_close: 1,
241
240
  join: 1
@@ -261,7 +260,6 @@ class FiberSchedulerTest < UMBaseTest
261
260
  assert_equal 'fobazr', IO.read(fn)
262
261
  assert_equal({
263
262
  fiber: 1,
264
- blocking_operation_wait: 1,
265
263
  io_pwrite: 1,
266
264
  io_close: 1,
267
265
  join: 1
@@ -402,7 +400,6 @@ class FiberSchedulerTest < UMBaseTest
402
400
  assert_equal 'foobar', buf
403
401
  assert_equal({
404
402
  fiber: 2,
405
- blocking_operation_wait: 2,
406
403
  io_write: 1,
407
404
  io_read: 2,
408
405
  io_close: 2,
@@ -425,12 +422,11 @@ class FiberSchedulerTest < UMBaseTest
425
422
  sleep 0.001
426
423
  File.open(fn, 'r') { buf = it.read }
427
424
  end
428
- assert_equal 2, machine.metrics[:total_ops]
429
425
  @scheduler.join
426
+ assert_equal 8, machine.metrics[:total_ops]
430
427
  assert_equal 'foobar', buf
431
428
  assert_equal({
432
429
  fiber: 2,
433
- blocking_operation_wait: 2,
434
430
  io_write: 1,
435
431
  io_read: 2,
436
432
  io_close: 2,
@@ -452,7 +448,6 @@ class FiberSchedulerTest < UMBaseTest
452
448
  assert_equal 'foo', IO.read(fn)
453
449
  assert_equal({
454
450
  fiber: 1,
455
- blocking_operation_wait: 1,
456
451
  io_write: 1,
457
452
  io_close: 1,
458
453
  join: 1
@@ -472,7 +467,6 @@ class FiberSchedulerTest < UMBaseTest
472
467
  assert_equal 'foobar', IO.read(fn)
473
468
  assert_equal({
474
469
  fiber: 1,
475
- blocking_operation_wait: 1,
476
470
  io_write: 2,
477
471
  io_close: 1,
478
472
  join: 1
@@ -492,7 +486,6 @@ class FiberSchedulerTest < UMBaseTest
492
486
  # assert_equal 'foo', IO.read(fn)
493
487
  assert_equal({
494
488
  fiber: 1,
495
- blocking_operation_wait: 1, # open
496
489
  io_write: 1,
497
490
  io_close: 1,
498
491
  join: 1
@@ -667,7 +660,6 @@ class FiberSchedulerTest < UMBaseTest
667
660
  fiber: 1,
668
661
  io_write: 2,
669
662
  io_read: 1,
670
- blocking_operation_wait: 1,
671
663
  process_wait: 1,
672
664
  join: 1
673
665
  }, scheduler_calls_tally)
@@ -718,7 +710,6 @@ class FiberSchedulerTest < UMBaseTest
718
710
  fiber: 1,
719
711
  io_read: 2,
720
712
  io_close: 1,
721
- blocking_operation_wait: 1,
722
713
  address_resolve: 1,
723
714
  join: 1
724
715
  }, scheduler_calls_tally)
@@ -727,7 +718,7 @@ class FiberSchedulerTest < UMBaseTest
727
718
  def test_fiber_scheduler_timeout_after
728
719
  res = nil
729
720
  Fiber.schedule do
730
- Timeout.timeout(0.05) do
721
+ Timeout.timeout(0.1) do
731
722
  sleep 1
732
723
  end
733
724
  res = true
@@ -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)