github.com/grange74/docker@v1.6.0-rc3/integration-cli/docker_cli_pause_test.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os/exec"
     6  	"strings"
     7  	"testing"
     8  )
     9  
    10  func TestPause(t *testing.T) {
    11  	defer deleteAllContainers()
    12  	defer unpauseAllContainers()
    13  
    14  	name := "testeventpause"
    15  	out, _, _ := dockerCmd(t, "images", "-q")
    16  	image := strings.Split(out, "\n")[0]
    17  	dockerCmd(t, "run", "-d", "--name", name, image, "sleep", "2")
    18  
    19  	dockerCmd(t, "pause", name)
    20  	pausedContainers, err := getSliceOfPausedContainers()
    21  	if err != nil {
    22  		t.Fatalf("error thrown while checking if containers were paused: %v", err)
    23  	}
    24  	if len(pausedContainers) != 1 {
    25  		t.Fatalf("there should be one paused container and not", len(pausedContainers))
    26  	}
    27  
    28  	dockerCmd(t, "unpause", name)
    29  
    30  	eventsCmd := exec.Command(dockerBinary, "events", "--since=0", fmt.Sprintf("--until=%d", daemonTime(t).Unix()))
    31  	out, _, _ = runCommandWithOutput(eventsCmd)
    32  	events := strings.Split(out, "\n")
    33  	if len(events) <= 1 {
    34  		t.Fatalf("Missing expected event")
    35  	}
    36  
    37  	pauseEvent := strings.Fields(events[len(events)-3])
    38  	unpauseEvent := strings.Fields(events[len(events)-2])
    39  
    40  	if pauseEvent[len(pauseEvent)-1] != "pause" {
    41  		t.Fatalf("event should be pause, not %#v", pauseEvent)
    42  	}
    43  	if unpauseEvent[len(unpauseEvent)-1] != "unpause" {
    44  		t.Fatalf("event should be unpause, not %#v", unpauseEvent)
    45  	}
    46  
    47  	waitCmd := exec.Command(dockerBinary, "wait", name)
    48  	if waitOut, _, err := runCommandWithOutput(waitCmd); err != nil {
    49  		t.Fatalf("error thrown while waiting for container: %s, %v", waitOut, err)
    50  	}
    51  
    52  	logDone("pause - pause/unpause is logged")
    53  }
    54  
    55  func TestPauseMultipleContainers(t *testing.T) {
    56  	defer deleteAllContainers()
    57  	defer unpauseAllContainers()
    58  
    59  	containers := []string{
    60  		"testpausewithmorecontainers1",
    61  		"testpausewithmorecontainers2",
    62  	}
    63  	out, _, _ := dockerCmd(t, "images", "-q")
    64  	image := strings.Split(out, "\n")[0]
    65  	for _, name := range containers {
    66  		dockerCmd(t, "run", "-d", "--name", name, image, "sleep", "2")
    67  	}
    68  	dockerCmd(t, append([]string{"pause"}, containers...)...)
    69  	pausedContainers, err := getSliceOfPausedContainers()
    70  	if err != nil {
    71  		t.Fatalf("error thrown while checking if containers were paused: %v", err)
    72  	}
    73  	if len(pausedContainers) != len(containers) {
    74  		t.Fatalf("there should be %d paused container and not %d", len(containers), len(pausedContainers))
    75  	}
    76  
    77  	dockerCmd(t, append([]string{"unpause"}, containers...)...)
    78  
    79  	eventsCmd := exec.Command(dockerBinary, "events", "--since=0", fmt.Sprintf("--until=%d", daemonTime(t).Unix()))
    80  	out, _, _ = runCommandWithOutput(eventsCmd)
    81  	events := strings.Split(out, "\n")
    82  	if len(events) <= len(containers)*3-2 {
    83  		t.Fatalf("Missing expected event")
    84  	}
    85  
    86  	pauseEvents := make([][]string, len(containers))
    87  	unpauseEvents := make([][]string, len(containers))
    88  	for i := range containers {
    89  		pauseEvents[i] = strings.Fields(events[len(events)-len(containers)*2-1+i])
    90  		unpauseEvents[i] = strings.Fields(events[len(events)-len(containers)-1+i])
    91  	}
    92  
    93  	for _, pauseEvent := range pauseEvents {
    94  		if pauseEvent[len(pauseEvent)-1] != "pause" {
    95  			t.Fatalf("event should be pause, not %#v", pauseEvent)
    96  		}
    97  	}
    98  	for _, unpauseEvent := range unpauseEvents {
    99  		if unpauseEvent[len(unpauseEvent)-1] != "unpause" {
   100  			t.Fatalf("event should be unpause, not %#v", unpauseEvent)
   101  		}
   102  	}
   103  
   104  	for _, name := range containers {
   105  		waitCmd := exec.Command(dockerBinary, "wait", name)
   106  		if waitOut, _, err := runCommandWithOutput(waitCmd); err != nil {
   107  			t.Fatalf("error thrown while waiting for container: %s, %v", waitOut, err)
   108  		}
   109  	}
   110  
   111  	logDone("pause - multi pause/unpause is logged")
   112  }