| package reexec // import "github.com/docker/docker/pkg/reexec" | |
| import ( | |
| "os" | |
| "os/exec" | |
| "testing" | |
| "gotest.tools/v3/assert" | |
| ) | |
| func init() { | |
| Register("reexec", func() { | |
| panic("Return Error") | |
| }) | |
| Init() | |
| } | |
| func TestRegister(t *testing.T) { | |
| defer func() { | |
| if r := recover(); r != nil { | |
| assert.Equal(t, `reexec func already registered under name "reexec"`, r) | |
| } | |
| }() | |
| Register("reexec", func() {}) | |
| } | |
| func TestCommand(t *testing.T) { | |
| cmd := Command("reexec") | |
| w, err := cmd.StdinPipe() | |
| assert.NilError(t, err, "Error on pipe creation: %v", err) | |
| defer w.Close() | |
| err = cmd.Start() | |
| assert.NilError(t, err, "Error on re-exec cmd: %v", err) | |
| err = cmd.Wait() | |
| assert.Error(t, err, "exit status 2") | |
| } | |
| func TestNaiveSelf(t *testing.T) { | |
| if os.Getenv("TEST_CHECK") == "1" { | |
| os.Exit(2) | |
| } | |
| cmd := exec.Command(naiveSelf(), "-test.run=TestNaiveSelf") | |
| cmd.Env = append(os.Environ(), "TEST_CHECK=1") | |
| err := cmd.Start() | |
| assert.NilError(t, err, "Unable to start command") | |
| err = cmd.Wait() | |
| assert.Error(t, err, "exit status 2") | |
| os.Args[0] = "mkdir" | |
| assert.Check(t, naiveSelf() != os.Args[0]) | |
| } |