github.com/thajeztah/cli@v0.0.0-20240223162942-dc6bfac81a8b/e2e/container/kill_test.go (about)

     1  package container
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/docker/cli/e2e/internal/fixtures"
     9  	"gotest.tools/v3/icmd"
    10  	"gotest.tools/v3/poll"
    11  )
    12  
    13  func TestKillContainer(t *testing.T) {
    14  	result := icmd.RunCommand("docker", "run", "-d", fixtures.AlpineImage, "top")
    15  	result.Assert(t, icmd.Success)
    16  
    17  	containerID := strings.TrimSpace(result.Stdout())
    18  
    19  	// Kill with SIGTERM should kill the process
    20  	result = icmd.RunCmd(icmd.Command("docker", "kill", "-s", "SIGTERM", containerID))
    21  
    22  	result.Assert(t, icmd.Success)
    23  	poll.WaitOn(t, containerStatus(t, containerID, "exited"), poll.WithDelay(100*time.Millisecond), poll.WithTimeout(5*time.Second))
    24  
    25  	// Kill on a stop container should return an error
    26  	result = icmd.RunCmd(icmd.Command("docker", "kill", containerID))
    27  	result.Assert(t, icmd.Expected{
    28  		ExitCode: 1,
    29  		Err:      "is not running",
    30  	})
    31  }
    32  
    33  func containerStatus(t *testing.T, containerID, status string) func(poll.LogT) poll.Result {
    34  	t.Helper()
    35  	return func(poll.LogT) poll.Result {
    36  		result := icmd.RunCommand("docker", "inspect", "-f", "{{ .State.Status }}", containerID)
    37  		result.Assert(t, icmd.Success)
    38  		actual := strings.TrimSpace(result.Stdout())
    39  		if actual == status {
    40  			return poll.Success()
    41  		}
    42  		return poll.Continue("expected status %s != %s", status, actual)
    43  	}
    44  }