summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Wrock <matt@mattwrock.com>2015-10-20 12:53:19 -0700
committerMatt Wrock <matt@mattwrock.com>2015-10-20 12:53:19 -0700
commit8396810eac9c733437118243be87fae40f11ecc4 (patch)
tree9eb6bf6be5c4a01cf6e78c00a2059495598e952e
parent8e3a0d76591696420db87dab9019d295f15a3eb7 (diff)
downloadmixlib-shellout-8396810eac9c733437118243be87fae40f11ecc4.tar.gz
improve the test to more accurately detrermine if child process is killed
-rw-r--r--lib/mixlib/shellout/windows.rb10
-rw-r--r--spec/mixlib/shellout_spec.rb13
2 files changed, 12 insertions, 11 deletions
diff --git a/lib/mixlib/shellout/windows.rb b/lib/mixlib/shellout/windows.rb
index 5bca289..571baa6 100644
--- a/lib/mixlib/shellout/windows.rb
+++ b/lib/mixlib/shellout/windows.rb
@@ -77,8 +77,8 @@ module Mixlib
#
# Start the process
#
- logger.debug(Utils.format_process(process, app_name, command_line, timeout)) if logger
process = Process.create(create_process_args)
+ logger.debug(Utils.format_process(process, app_name, command_line, timeout)) if logger
begin
# Start pushing data into input
stdin_write << input if input
@@ -322,7 +322,7 @@ module Mixlib
end
def self.kill_process_tree(pid, wmi, logger)
- wmi.query("select ProcessID, Name from Win32_Process where ParentProcessID=#{pid}").each do |instance|
+ wmi.query("select * from Win32_Process where ParentProcessID=#{pid}").each do |instance|
child_pid = instance.wmi_ole_object.processid
kill_process_tree(child_pid, wmi, logger)
begin
@@ -330,7 +330,7 @@ module Mixlib
"killing child process #{child_pid}::",
"#{instance.wmi_ole_object.Name} of parent #{pid}"
].join) if logger
- Process.kill(:KILL, child_pid)
+ kill_process(instance)
rescue Errno::EIO, SystemCallError
logger.debug([
"Failed to kill child process #{child_pid}::",
@@ -340,6 +340,10 @@ module Mixlib
end
end
+ def self.kill_process(instance)
+ Process.kill(:KILL, instance.wmi_ole_object.processid)
+ end
+
def self.format_process(process, app_name, command_line, timeout)
msg = []
msg << "ProcessId: #{process.process_id}"
diff --git a/spec/mixlib/shellout_spec.rb b/spec/mixlib/shellout_spec.rb
index 6b57619..df9bbbe 100644
--- a/spec/mixlib/shellout_spec.rb
+++ b/spec/mixlib/shellout_spec.rb
@@ -1113,13 +1113,7 @@ describe Mixlib::ShellOut do
context 'on windows', :windows_only do
let(:cmd) do
- 'powershell -c "sleep 10"'
- end
-
- before do
- require "wmi-lite/wmi"
- allow(WmiLite::Wmi).to receive(:new)
- allow(Mixlib::ShellOut::Windows::Utils).to receive(:kill_process_tree)
+ 'cmd /c powershell -c "sleep 10"'
end
it "should raise CommandTimeout" do
@@ -1130,7 +1124,10 @@ describe Mixlib::ShellOut do
context 'and child processes should be killed' do
it 'kills the child processes' do
- expect(Mixlib::ShellOut::Windows::Utils).to receive(:kill_process_tree)
+ expect(Mixlib::ShellOut::Windows::Utils).to receive(:kill_process) do |instance|
+ expect(instance.wmi_ole_object.Name).to match(/powershell/)
+ Process.kill(:KILL, instance.wmi_ole_object.processid)
+ end
expect { executed_cmd }.to raise_error(Mixlib::ShellOut::CommandTimeout)
end
end