class Open4::PFork4Test

Public Instance Methods

test_blocked_on_io_read_and_exception_propagation_with_block() click to toggle source
# File test/pfork4_test.rb, line 131
def test_blocked_on_io_read_and_exception_propagation_with_block
  fun = lambda do
    $stdin.read
    raise MyError
  end
  out_actual, err_actual = nil, nil
  assert_raises(MyError) do
    pfork4(fun) do |_, stdin, stdout, stderr|
      stdin.write 'foo'
      stdin.close
      out_actual = stdout.read
      err_actual = stderr.read
    end
  end
  assert_equal '', out_actual
  assert_equal '', err_actual
end
test_call_block_upon_exception() click to toggle source
# File test/pfork4_test.rb, line 43
def test_call_block_upon_exception
  fun = lambda { raise MyError }
  block_called = false
  assert_raises(MyError) { pfork4(fun) { block_called = true } }
  assert_equal true, block_called
end
test_exec_in_fun() click to toggle source
# File test/pfork4_test.rb, line 98
def test_exec_in_fun
  via_msg = 'foo'
  fun = lambda { exec %Q{ruby -e "print '#{via_msg}'"} }
  out_actual = nil
  status = pfork4(fun) do |_, stdin, stdout, _|
    stdin.close
    out_actual = stdout.read
  end
  assert_equal via_msg, out_actual
  assert_equal 0, status.exitstatus
end
test_fun_does_not_propagate_exception_without_block() click to toggle source
# File test/pfork4_test.rb, line 26
def test_fun_does_not_propagate_exception_without_block
  fun = lambda { raise MyError }
  cid, _ = pfork4 fun
  refute_equal 0, wait_status(cid)
end
test_fun_force_exit() click to toggle source
# File test/pfork4_test.rb, line 12
def test_fun_force_exit
  exit_code = 43
  fun = lambda { exit! exit_code }
  cid, _ = pfork4 fun
  assert_equal exit_code, wait_status(cid)
end
test_fun_normal_exit() click to toggle source
# File test/pfork4_test.rb, line 19
def test_fun_normal_exit
  exit_code = 43
  fun = lambda { exit exit_code }
  cid, _ = pfork4 fun
  assert_equal exit_code, wait_status(cid)
end
test_fun_propagate_exception_with_block() click to toggle source
# File test/pfork4_test.rb, line 32
def test_fun_propagate_exception_with_block
  fun = lambda { raise MyError }
  assert_raises(MyError) { pfork4(fun) {} }
end
test_fun_propagate_exception_with_block_avoids_zombie_child_process() click to toggle source
# File test/pfork4_test.rb, line 37
def test_fun_propagate_exception_with_block_avoids_zombie_child_process
  fun = lambda { raise MyError }
  assert_raises(MyError) { pfork4(fun) {} }
  assert_empty Process.waitall
end
test_fun_successful_return() click to toggle source
# File test/pfork4_test.rb, line 6
def test_fun_successful_return
  fun = lambda { 'lucky me' }
  cid, _ = pfork4 fun
  assert_equal 0, wait_status(cid)
end
test_io_pipes_and_then_exception_propagation_with_block() click to toggle source
# File test/pfork4_test.rb, line 110
def test_io_pipes_and_then_exception_propagation_with_block
  via_msg = 'foo'
  err_msg = 'bar'
  fun = lambda do
    $stdout.write $stdin.read
    $stderr.write err_msg
    raise MyError
  end
  out_actual, err_actual = nil, nil
  assert_raises(MyError) do
    pfork4(fun) do |_, stdin, stdout, stderr|
      stdin.write via_msg
      stdin.close
      out_actual = stdout.read
      err_actual = stderr.read
    end
  end
  assert_equal via_msg, out_actual
  assert_equal err_msg, err_actual
end
test_io_pipes_with_block() click to toggle source
# File test/pfork4_test.rb, line 79
def test_io_pipes_with_block
  via_msg = 'foo'
  err_msg = 'bar'
  fun = lambda do
    $stdout.write $stdin.read
    $stderr.write err_msg
  end
  out_actual, err_actual = nil, nil
  status = pfork4(fun) do |_, stdin, stdout, stderr|
    stdin.write via_msg
    stdin.close
    out_actual = stdout.read
    err_actual = stderr.read
  end
  assert_equal via_msg, out_actual
  assert_equal err_msg, err_actual
  assert_equal 0, status.exitstatus
end
test_io_pipes_without_block() click to toggle source
# File test/pfork4_test.rb, line 61
def test_io_pipes_without_block
  via_msg = 'foo'
  err_msg = 'bar'
  fun = lambda do
    $stdout.write $stdin.read
    $stderr.write err_msg
  end
  out_actual, err_actual = nil, nil
  cid, stdin, stdout, stderr = pfork4 fun
  stdin.write via_msg
  stdin.close
  out_actual = stdout.read
  err_actual = stderr.read
  assert_equal via_msg, out_actual
  assert_equal err_msg, err_actual
  assert_equal 0, wait_status(cid)
end
test_passes_child_pid_to_block() click to toggle source
# File test/pfork4_test.rb, line 50
def test_passes_child_pid_to_block
  fun = lambda { $stdout.write Process.pid }
  cid_in_block = nil
  cid_in_fun = nil
  status = pfork4(fun) do |cid, _, stdout, _|
    cid_in_block = cid
    cid_in_fun = stdout.read.to_i
  end
  assert_equal cid_in_fun, cid_in_block
end