summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Wrock <matt@mattwrock.com>2016-10-05 17:11:56 -0700
committerGitHub <noreply@github.com>2016-10-05 17:11:56 -0700
commit19638d69c614e2b1e5f332813fd1af71b2c77efe (patch)
tree53d2b84e57db03624cca4d02f60138f48935725b
parent9984b107e32cd5c4565c17e9ea8dd5bbe0da6bd7 (diff)
downloadchef-revert-5381-nim/double_quotes_parsing_error.tar.gz
Revert "Handling double quotes in powershell_out"revert-5381-nim/double_quotes_parsing_error
-rw-r--r--lib/chef/mixin/powershell_out.rb12
-rw-r--r--spec/functional/mixin/powershell_out_spec.rb6
-rw-r--r--spec/unit/mixin/powershell_out_spec.rb45
3 files changed, 39 insertions, 24 deletions
diff --git a/lib/chef/mixin/powershell_out.rb b/lib/chef/mixin/powershell_out.rb
index 3e1f588319..74de85f86f 100644
--- a/lib/chef/mixin/powershell_out.rb
+++ b/lib/chef/mixin/powershell_out.rb
@@ -34,14 +34,7 @@ class Chef
script = command_args.first
options = command_args.last.is_a?(Hash) ? command_args.last : nil
- result = run_command_with_os_architecture(script, options)
-
- if result.stderr.include? "A positional parameter cannot be found that accepts argument"
- raise Mixlib::ShellOut::ShellCommandFailed, "Please use single escape for special characters in powershell_out. \n #{result.stderr}"
- elsif result.stderr != ""
- raise Mixlib::ShellOut::ShellCommandFailed, result.stderr
- end
- result
+ run_command_with_os_architecture(script, options)
end
# Run a command under powershell with the same API as shell_out!
@@ -98,8 +91,7 @@ class Chef
"-InputFormat None",
]
- # without gsub user has to add double escape for double quotes in the recipe
- "powershell.exe #{flags.join(' ')} -Command \"#{script.gsub('"', '\"')}\""
+ "powershell.exe #{flags.join(' ')} -Command \"#{script}\""
end
end
end
diff --git a/spec/functional/mixin/powershell_out_spec.rb b/spec/functional/mixin/powershell_out_spec.rb
index 31bf397569..66214cb0c7 100644
--- a/spec/functional/mixin/powershell_out_spec.rb
+++ b/spec/functional/mixin/powershell_out_spec.rb
@@ -25,6 +25,10 @@ describe Chef::Mixin::PowershellOut, windows_only: true do
it "runs a powershell command and collects stdout" do
expect(powershell_out("get-process").run_command.stdout).to match /Handles\s+NPM\(K\)\s+PM\(K\)\s+WS\(K\)\s+VM\(M\)\s+CPU\(s\)\s+Id\s+/
end
+
+ it "does not raise exceptions when the command is invalid" do
+ powershell_out("this-is-not-a-valid-command").run_command
+ end
end
describe "#powershell_out!" do
@@ -33,7 +37,7 @@ describe Chef::Mixin::PowershellOut, windows_only: true do
end
it "raises exceptions when the command is invalid" do
- expect { powershell_out!("this-is-not-a-valid-command").run_command }.to raise_error(Mixlib::ShellOut::ShellCommandFailed)
+ expect { powershell_out!("this-is-not-a-valid-command").run_command }.to raise_exception(Mixlib::ShellOut::ShellCommandFailed)
end
end
end
diff --git a/spec/unit/mixin/powershell_out_spec.rb b/spec/unit/mixin/powershell_out_spec.rb
index 9524557c4c..8e5f3588ce 100644
--- a/spec/unit/mixin/powershell_out_spec.rb
+++ b/spec/unit/mixin/powershell_out_spec.rb
@@ -18,7 +18,7 @@
require "spec_helper"
require "chef/mixin/powershell_out"
-describe Chef::Mixin::PowershellOut, :windows_only do
+describe Chef::Mixin::PowershellOut do
let(:shell_out_class) { Class.new { include Chef::Mixin::PowershellOut } }
subject(:object) { shell_out_class.new }
let(:architecture) { "something" }
@@ -28,24 +28,43 @@ describe Chef::Mixin::PowershellOut, :windows_only do
describe "#powershell_out" do
it "runs a command and returns the shell_out object" do
- result = object.powershell_out("Get-Process")
- expect(result.stderr).to be == ""
+ ret = double("Mixlib::ShellOut")
+ expect(object).to receive(:shell_out).with(
+ "powershell.exe #{flags} -Command \"Get-Process\"",
+ {}
+ ).and_return(ret)
+ expect(object.powershell_out("Get-Process")).to eql(ret)
end
it "passes options" do
- result = object.powershell_out("Get-Process", timeout: 600)
- expect(result.stderr).to be == ""
+ ret = double("Mixlib::ShellOut")
+ expect(object).to receive(:shell_out).with(
+ "powershell.exe #{flags} -Command \"Get-Process\"",
+ timeout: 600
+ ).and_return(ret)
+ expect(object.powershell_out("Get-Process", timeout: 600)).to eql(ret)
end
+ end
- context "when double quote is passed in the powershell command" do
- it "passes if double quote is appended with single escape" do
- result = object.powershell_out("Write-Verbose \"Some String\" -Verbose")
- expect(result.stderr).to be == ""
- end
+ describe "#powershell_out!" do
+ it "runs a command and returns the shell_out object" do
+ mixlib_shellout = double("Mixlib::ShellOut")
+ expect(object).to receive(:shell_out).with(
+ "powershell.exe #{flags} -Command \"Get-Process\"",
+ {}
+ ).and_return(mixlib_shellout)
+ expect(mixlib_shellout).to receive(:error!)
+ expect(object.powershell_out!("Get-Process")).to eql(mixlib_shellout)
+ end
- it "raises error if double quote is passed with double escape characters" do
- expect { object.powershell_out("Write-Verbose \\\"Some String\\\" -Verbose") }.to raise_error(Mixlib::ShellOut::ShellCommandFailed)
- end
+ it "passes options" do
+ mixlib_shellout = double("Mixlib::ShellOut")
+ expect(object).to receive(:shell_out).with(
+ "powershell.exe #{flags} -Command \"Get-Process\"",
+ timeout: 600
+ ).and_return(mixlib_shellout)
+ expect(mixlib_shellout).to receive(:error!)
+ expect(object.powershell_out!("Get-Process", timeout: 600)).to eql(mixlib_shellout)
end
end
end