test: e2e SIGTERM attached container on `docker run`

Signed-off-by: Alano Terblanche <18033717+Benehiko@users.noreply.github.com>
This commit is contained in:
Alano Terblanche 2024-07-09 13:23:38 +02:00
parent 150fb55a8f
commit 0579cd7971
No known key found for this signature in database
GPG Key ID: 0E8FACD1BA98DE27
1 changed files with 26 additions and 0 deletions

View File

@ -1,8 +1,10 @@
package container
import (
"bytes"
"fmt"
"strings"
"syscall"
"testing"
"time"
@ -13,6 +15,7 @@ import (
is "gotest.tools/v3/assert/cmp"
"gotest.tools/v3/golden"
"gotest.tools/v3/icmd"
"gotest.tools/v3/poll"
"gotest.tools/v3/skip"
)
@ -221,3 +224,26 @@ func TestMountSubvolume(t *testing.T) {
})
}
}
func TestProcessTermination(t *testing.T) {
var out bytes.Buffer
cmd := icmd.Command("docker", "run", "--rm", "-i", fixtures.AlpineImage,
"sh", "-c", "echo 'starting trap'; trap 'echo got signal; exit 0;' TERM; while true; do sleep 10; done")
cmd.Stdout = &out
cmd.Stderr = &out
result := icmd.StartCmd(cmd).Assert(t, icmd.Success)
poll.WaitOn(t, func(t poll.LogT) poll.Result {
if strings.Contains(result.Stdout(), "starting trap") {
return poll.Success()
}
return poll.Continue("waiting for process to trap signal")
}, poll.WithDelay(1*time.Second), poll.WithTimeout(5*time.Second))
assert.NilError(t, result.Cmd.Process.Signal(syscall.SIGTERM))
icmd.WaitOnCmd(time.Second*10, result).Assert(t, icmd.Expected{
ExitCode: 0,
})
}