Merge pull request #16950 from swagiaal/handle-exec-not-found

Auto commit by PR queue bot
This commit is contained in:
k8s-merge-robot 2015-11-16 23:46:38 -08:00
commit ac0d009522
2 changed files with 22 additions and 6 deletions

View File

@ -21,6 +21,9 @@ import (
"syscall" "syscall"
) )
// ErrExecutableNotFound is returned if the executable is not found.
var ErrExecutableNotFound = osexec.ErrNotFound
// Interface is an interface that presents a subset of the os/exec API. Use this // Interface is an interface that presents a subset of the os/exec API. Use this
// when you want to inject fakeable/mockable exec behavior. // when you want to inject fakeable/mockable exec behavior.
type Interface interface { type Interface interface {
@ -81,13 +84,17 @@ func (cmd *cmdWrapper) SetDir(dir string) {
func (cmd *cmdWrapper) CombinedOutput() ([]byte, error) { func (cmd *cmdWrapper) CombinedOutput() ([]byte, error) {
out, err := (*osexec.Cmd)(cmd).CombinedOutput() out, err := (*osexec.Cmd)(cmd).CombinedOutput()
if err != nil { if err != nil {
ee, ok := err.(*osexec.ExitError) if ee, ok := err.(*osexec.ExitError); ok {
if !ok { // Force a compile fail if exitErrorWrapper can't convert to ExitError.
return out, err var x ExitError = &exitErrorWrapper{ee}
return out, x
} }
// Force a compile fail if exitErrorWrapper can't convert to ExitError. if ee, ok := err.(*osexec.Error); ok {
var x ExitError = &exitErrorWrapper{ee} if ee.Err == osexec.ErrNotFound {
return out, x return out, ErrExecutableNotFound
}
}
return out, err
} }
return out, nil return out, nil
} }

View File

@ -92,3 +92,12 @@ func TestLookPath(t *testing.T) {
t.Errorf("unexpected result for LookPath: got %s, expected %s", sh, shExpected) t.Errorf("unexpected result for LookPath: got %s, expected %s", sh, shExpected)
} }
} }
func TestExecutableNotFound(t *testing.T) {
exec := New()
cmd := exec.Command("fake_executable_name")
_, err := cmd.CombinedOutput()
if err != ErrExecutableNotFound {
t.Errorf("Expected error ErrExecutableNotFound but got %v", err)
}
}