Browse code

After container fails to start, log the event die. Fixes #8135.

Docker-DCO-1.1-Signed-off-by: Jessica Frazelle <jess@docker.com> (github: jfrazelle)

Jessica Frazelle authored on 2014/09/20 05:54:32
Showing 2 changed files
... ...
@@ -34,6 +34,7 @@ func (daemon *Daemon) ContainerStart(job *engine.Job) engine.Status {
34 34
 		}
35 35
 	}
36 36
 	if err := container.Start(); err != nil {
37
+		container.LogEvent("die")
37 38
 		return job.Errorf("Cannot start container %s: %s", name, err)
38 39
 	}
39 40
 
... ...
@@ -57,6 +57,35 @@ func TestEventsPause(t *testing.T) {
57 57
 	logDone("events - pause/unpause is logged")
58 58
 }
59 59
 
60
+func TestEventsContainerFailStartDie(t *testing.T) {
61
+	out, _, _ := cmd(t, "images", "-q")
62
+	image := strings.Split(out, "\n")[0]
63
+	eventsCmd := exec.Command(dockerBinary, "run", "-d", "--name", "testeventdie", image, "blerg")
64
+	_, _, err := runCommandWithOutput(eventsCmd)
65
+	if err == nil {
66
+		t.Fatalf("Container run with command blerg should have failed, but it did not")
67
+	}
68
+
69
+	eventsCmd = exec.Command(dockerBinary, "events", "--since=0", fmt.Sprintf("--until=%d", time.Now().Unix()))
70
+	out, _, _ = runCommandWithOutput(eventsCmd)
71
+	events := strings.Split(out, "\n")
72
+	if len(events) <= 1 {
73
+		t.Fatalf("Missing expected event")
74
+	}
75
+
76
+	startEvent := strings.Fields(events[len(events)-3])
77
+	dieEvent := strings.Fields(events[len(events)-2])
78
+
79
+	if startEvent[len(startEvent)-1] != "start" {
80
+		t.Fatalf("event should be start, not %#v", startEvent)
81
+	}
82
+	if dieEvent[len(dieEvent)-1] != "die" {
83
+		t.Fatalf("event should be die, not %#v", dieEvent)
84
+	}
85
+
86
+	logDone("events - container failed to start logs die")
87
+}
88
+
60 89
 func TestEventsLimit(t *testing.T) {
61 90
 	for i := 0; i < 30; i++ {
62 91
 		cmd(t, "run", "busybox", "echo", strconv.Itoa(i))