|
1 | 1 | require_relative 'spec_helper'
|
| 2 | +require_relative '../../fixtures/io' |
2 | 3 |
|
3 | 4 | load_extension('io')
|
4 | 5 |
|
|
279 | 280 | it "raises an IOError if the IO is not initialized" do
|
280 | 281 | -> { @o.rb_io_maybe_wait_writable(0, IO.allocate, nil) }.should raise_error(IOError, "uninitialized stream")
|
281 | 282 | end
|
| 283 | + |
| 284 | + it "can be interrupted" do |
| 285 | + IOSpec.exhaust_write_buffer(@w_io) |
| 286 | + start = Process.clock_gettime(Process::CLOCK_MONOTONIC) |
| 287 | + |
| 288 | + t = Thread.new do |
| 289 | + @o.rb_io_maybe_wait_writable(0, @w_io, 10) |
| 290 | + end |
| 291 | + |
| 292 | + Thread.pass until t.stop? |
| 293 | + t.kill |
| 294 | + t.join |
| 295 | + |
| 296 | + finish = Process.clock_gettime(Process::CLOCK_MONOTONIC) |
| 297 | + (finish - start).should < 9 |
| 298 | + end |
282 | 299 | end
|
283 | 300 | end
|
284 | 301 |
|
|
355 | 372 | thr.join
|
356 | 373 | end
|
357 | 374 |
|
| 375 | + it "can be interrupted" do |
| 376 | + start = Process.clock_gettime(Process::CLOCK_MONOTONIC) |
| 377 | + |
| 378 | + t = Thread.new do |
| 379 | + @o.rb_io_maybe_wait_readable(0, @r_io, 10, false) |
| 380 | + end |
| 381 | + |
| 382 | + Thread.pass until t.stop? |
| 383 | + t.kill |
| 384 | + t.join |
| 385 | + |
| 386 | + finish = Process.clock_gettime(Process::CLOCK_MONOTONIC) |
| 387 | + (finish - start).should < 9 |
| 388 | + end |
| 389 | + |
358 | 390 | it "raises an IOError if the IO is closed" do
|
359 | 391 | @r_io.close
|
360 | 392 | -> { @o.rb_io_maybe_wait_readable(0, @r_io, nil, false) }.should raise_error(IOError, "closed stream")
|
|
438 | 470 | it "raises an IOError if the IO is not initialized" do
|
439 | 471 | -> { @o.rb_io_maybe_wait(0, IO.allocate, IO::WRITABLE, nil) }.should raise_error(IOError, "uninitialized stream")
|
440 | 472 | end
|
| 473 | + |
| 474 | + it "can be interrupted when waiting for READABLE event" do |
| 475 | + start = Process.clock_gettime(Process::CLOCK_MONOTONIC) |
| 476 | + |
| 477 | + t = Thread.new do |
| 478 | + @o.rb_io_maybe_wait(0, @r_io, IO::READABLE, 10) |
| 479 | + end |
| 480 | + |
| 481 | + Thread.pass until t.stop? |
| 482 | + t.kill |
| 483 | + t.join |
| 484 | + |
| 485 | + finish = Process.clock_gettime(Process::CLOCK_MONOTONIC) |
| 486 | + (finish - start).should < 9 |
| 487 | + end |
| 488 | + |
| 489 | + it "can be interrupted when waiting for WRITABLE event" do |
| 490 | + IOSpec.exhaust_write_buffer(@w_io) |
| 491 | + start = Process.clock_gettime(Process::CLOCK_MONOTONIC) |
| 492 | + |
| 493 | + t = Thread.new do |
| 494 | + @o.rb_io_maybe_wait(0, @w_io, IO::WRITABLE, 10) |
| 495 | + end |
| 496 | + |
| 497 | + Thread.pass until t.stop? |
| 498 | + t.kill |
| 499 | + t.join |
| 500 | + |
| 501 | + finish = Process.clock_gettime(Process::CLOCK_MONOTONIC) |
| 502 | + (finish - start).should < 9 |
| 503 | + end |
441 | 504 | end
|
442 | 505 | end
|
443 | 506 |
|
|
0 commit comments