diff options
author | lamont-granquist <lamont@scriptkiddie.org> | 2014-09-11 12:32:13 -0700 |
---|---|---|
committer | lamont-granquist <lamont@scriptkiddie.org> | 2014-09-11 12:32:13 -0700 |
commit | 9c8f613128cdc14e214c8c2f896b75e507a61a4e (patch) | |
tree | d7ef525b8baed7770c8f24f4aa789cc5509e6cb5 /spec | |
parent | 1a06d383c35db211c682a3077520dcb20cf4e5ef (diff) | |
parent | 2d9ec7727d2b3890ecd83c611ce09127a8b1724e (diff) | |
download | mixlib-shellout-9c8f613128cdc14e214c8c2f896b75e507a61a4e.tar.gz |
Merge pull request #57 from ClogenyTechnologies/kd/processgrp-fix
aix getpgid fails when called from parent and parent and child have different session
Diffstat (limited to 'spec')
-rw-r--r-- | spec/mixlib/shellout_spec.rb | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/spec/mixlib/shellout_spec.rb b/spec/mixlib/shellout_spec.rb index f7625e1..cb0a33d 100644 --- a/spec/mixlib/shellout_spec.rb +++ b/spec/mixlib/shellout_spec.rb @@ -935,7 +935,7 @@ describe Mixlib::ShellOut do let(:cmd) { [ 'exit' ] } it "handles ESRCH from getpgid of a zombie", :unix_only do - Process.stub(:setsid) { exit!(4) } + Process.stub(:setpgrp) { exit!(4) } # there is a small race condition here if the child doesn't get # scheduled and call exit! before the parent can call getpgid, so run @@ -1068,16 +1068,19 @@ describe Mixlib::ShellOut do shell_cmd.stdout.should include("got term in child") shell_cmd.stdout.should include("got term in grandchild") - Process.kill(:INT, child_pgid) # should raise ESRCH - - # Debug the failure: - puts "child pgid=#{child_pgid.inspect}" - Process.wait - puts "collected process: #{$?.inspect}" - puts "initial process listing:\n#{initial_process_listing}" - puts "current process listing:" - puts `ps -j` - raise "Failed to kill all expected processes" + kill_return_val = Process.kill(:INT, child_pgid) # should raise ESRCH + # AIX - kill returns code > 0 for error, where as other platforms return -1. Ruby code signal.c treats < 0 as error and raises exception and hence fails on AIX. So we check the return code for assertions since ruby wont raise an error here. + + if(kill_return_val == 0) + # Debug the failure: + puts "child pgid=#{child_pgid.inspect}" + Process.wait + puts "collected process: #{$?.inspect}" + puts "initial process listing:\n#{initial_process_listing}" + puts "current process listing:" + puts `ps -j` + raise "Failed to kill all expected processes" + end rescue Errno::ESRCH # this is what we want end |