-
Notifications
You must be signed in to change notification settings - Fork 89
LinuxCommand#verify cleaned up #530
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -57,22 +57,23 @@ def verify | |
return nil if res.exit_status == 0 | ||
|
||
rawerr = res.stdout + " " + res.stderr | ||
|
||
{ | ||
"Sorry, try again" => ["Wrong sudo password.", :bad_sudo_password], | ||
"sudo: no tty present and no askpass program specified" => | ||
["Sudo requires a password, please configure it.", :sudo_password_required], | ||
"sudo: command not found" => | ||
msg, reason = | ||
case rawerr | ||
when /Sorry, try again/ | ||
["Wrong sudo password.", :bad_sudo_password] | ||
when /sudo: no tty present and no askpass program specified/ | ||
["Sudo requires a password, please configure it.", :sudo_password_required] | ||
when /sudo: command not found/ | ||
["Can't find sudo command. Please either install and "\ | ||
"configure it on the target or deactivate sudo.", :sudo_command_not_found], | ||
"sudo: sorry, you must have a tty to run sudo" => | ||
"configure it on the target or deactivate sudo.", :sudo_command_not_found] | ||
when /sudo: sorry, you must have a tty to run sudo/ | ||
["Sudo requires a TTY. Please see the README on how to configure "\ | ||
"sudo to allow for non-interactive usage.", :sudo_no_tty], | ||
}.each do |sudo, human| | ||
rawerr = human if rawerr.include? sudo | ||
end | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not sure I'm sold on the benefits of switching this to a That said, I'm REALLY not sold on the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hey @zenspider, Here the only reason for switching to the
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not sure I understand that. Assuming my interpretation is correct, then you're doing "I am the one" via |
||
"sudo to allow for non-interactive usage.", :sudo_no_tty] | ||
else | ||
rawerr | ||
end | ||
|
||
rawerr | ||
raise Train::UserError.new("Sudo failed: #{msg}", reason) | ||
end | ||
|
||
# (see CommandWrapperBase::run) | ||
|
@@ -167,15 +168,11 @@ def self.load(transport, options) | |
return nil unless LinuxCommand.active?(options) | ||
|
||
res = LinuxCommand.new(transport, options) | ||
verification_res = res.verify | ||
if verification_res | ||
msg, reason = verification_res | ||
raise Train::UserError.new("Sudo failed: #{msg}", reason) | ||
end | ||
res.verify | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Much better... I like that you're just calling it. Please rename it to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @zenspider need your suggestion in order to rename As we have base class We have the following options to rename 1. Just rename all the places wherever is used e.i. in OR 2. For class
OR 3. Add a)
b) Add
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah. Then either 3.b or 4: ignore @zenspider. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Added |
||
|
||
res | ||
elsif transport.platform.windows? | ||
res = WindowsCommand.new(transport, options) | ||
res | ||
WindowsCommand.new(transport, options) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. thank you! |
||
end | ||
end | ||
end | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -106,6 +106,53 @@ | |
_(lc.run(cmd)).must_equal "echo #{bcmd} | base64 --decode | /bin/bash --login" | ||
end | ||
end | ||
|
||
describe "#verify" do | ||
def mock_connect_result(stderr, exit_status) | ||
OpenStruct.new(stdout: "", stderr: stderr, exit_status: exit_status) | ||
end | ||
|
||
it "returns nil on success" do | ||
backend.stubs(:run_command).returns(mock_connect_result(nil, 0)) | ||
lc = cls.new(backend, { sudo: true }) | ||
_(lc.verify).must_be_nil | ||
end | ||
|
||
it "error message for bad sudo password" do | ||
backend.stubs(:run_command).returns(mock_connect_result("Sorry, try again", 1)) | ||
lc = cls.new(backend, { sudo: true }) | ||
err = _ { lc.verify }.must_raise Train::UserError | ||
_(err.message).must_match(/Sudo failed: Wrong sudo password./) | ||
end | ||
|
||
it "error message for sudo password required" do | ||
backend.stubs(:run_command).returns(mock_connect_result("sudo: no tty present and no askpass program specified", 1)) | ||
lc = cls.new(backend, { sudo: true }) | ||
err = _ { lc.verify }.must_raise Train::UserError | ||
_(err.message).must_match(/Sudo requires a password, please configure it./) | ||
end | ||
|
||
it "error message for sudo: command not found" do | ||
backend.stubs(:run_command).returns(mock_connect_result("sudo: command not found", 1)) | ||
lc = cls.new(backend, { sudo: true }) | ||
err = _ { lc.verify }.must_raise Train::UserError | ||
_(err.message).must_match(/Can't find sudo command. Please either install and configure it on the target or deactivate sudo./) | ||
end | ||
|
||
it "error message for requires tty" do | ||
backend.stubs(:run_command).returns(mock_connect_result("sudo: sorry, you must have a tty to run sudo", 1)) | ||
lc = cls.new(backend, { sudo: true }) | ||
err = _ { lc.verify }.must_raise Train::UserError | ||
_(err.message).must_match(/Sudo failed: Sudo requires a TTY. Please see the README/) | ||
end | ||
|
||
it "error message for other sudo related errors" do | ||
backend.stubs(:run_command).returns(mock_connect_result("Other sudo related error", 1)) | ||
lc = cls.new(backend, { sudo: true }) | ||
err = _ { lc.verify }.must_raise Train::UserError | ||
_(err.message).must_match(/Other sudo related error/) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. great! |
||
end | ||
end | ||
end | ||
|
||
describe "windows command" do | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why are these regexps?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is no specific to match regex, I only thought of would be nice if we do
exact match vs similar one
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well,
String#===
(what is used under acase/when
is an exact match... All of these strings went from"some string"
to/some string/
, so they went from exact match to a regexp (partial) match. As such, this is looser than before.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@zenspider I do agree with your concern so added minor updates for constructing
rawerr
and have updated the exact match of string.