Commit ac0d0095 authored by k8s-merge-robot's avatar k8s-merge-robot

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

Auto commit by PR queue bot
parents 5828836e 4d373b13
...@@ -21,6 +21,9 @@ import ( ...@@ -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) { ...@@ -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
}
if ee, ok := err.(*osexec.Error); ok {
if ee.Err == osexec.ErrNotFound {
return out, ErrExecutableNotFound
}
} }
// Force a compile fail if exitErrorWrapper can't convert to ExitError. return out, err
var x ExitError = &exitErrorWrapper{ee}
return out, x
} }
return out, nil return out, nil
} }
......
...@@ -92,3 +92,12 @@ func TestLookPath(t *testing.T) { ...@@ -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)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment