Propegate exit code on Exec calls and integrated test

Signed-off-by: haircommander <pehunt@redhat.com>

Closes: #904
Approved by: rhatdan
This commit is contained in:
haircommander 2018-06-05 14:21:41 -04:00 committed by Atomic Bot
parent cf7c8295b8
commit d7f9781bd6
2 changed files with 17 additions and 0 deletions

View File

@ -3,7 +3,9 @@ package main
import (
"fmt"
"os"
"os/exec"
"runtime/pprof"
"syscall"
"github.com/containers/storage/pkg/reexec"
"github.com/pkg/errors"
@ -175,6 +177,12 @@ func main() {
if debug {
logrus.Errorf(err.Error())
} else {
// Retrieve the exit error from the exec call, if it exists
if ee, ok := err.(*exec.ExitError); ok {
if status, ok := ee.Sys().(syscall.WaitStatus); ok {
exitCode = status.ExitStatus()
}
}
fmt.Fprintln(os.Stderr, err.Error())
}
} else {

View File

@ -86,5 +86,14 @@ var _ = Describe("Podman exec", func() {
os.Unsetenv("FOO")
})
It("podman exec exit code", func() {
setup := podmanTest.RunTopContainer("test1")
setup.WaitWithDefaultTimeout()
Expect(setup.ExitCode()).To(Equal(0))
session := podmanTest.Podman([]string{"exec", "test1", "sh", "-c", "exit 100"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(100))
})
})