Browse code

Fixes docker events since beginning of unix time

Fixes issue #11555
Applied a workaround to check if since and until flags are valid or not.

Signed-off-by: André Martins <martins@noironetworks.com>

André Martins authored on 2015/03/23 04:40:16
Showing 2 changed files
... ...
@@ -59,7 +59,7 @@ func (e *Events) Get(job *engine.Job) error {
59 59
 	}
60 60
 
61 61
 	// If no until, disable timeout
62
-	if until == 0 {
62
+	if job.Getenv("until") == "" {
63 63
 		timeout.Stop()
64 64
 	}
65 65
 
... ...
@@ -70,7 +70,7 @@ func (e *Events) Get(job *engine.Job) error {
70 70
 	job.Stdout.Write(nil)
71 71
 
72 72
 	// Resend every event in the [since, until] time interval.
73
-	if since != 0 {
73
+	if job.Getenv("since") != "" {
74 74
 		if err := e.writeCurrent(job, since, until, eventFilters); err != nil {
75 75
 			return err
76 76
 		}
... ...
@@ -112,6 +112,41 @@ func TestEventsContainerEvents(t *testing.T) {
112 112
 	logDone("events - container create, start, die, destroy is logged")
113 113
 }
114 114
 
115
+func TestEventsContainerEventsSinceUnixEpoch(t *testing.T) {
116
+	dockerCmd(t, "run", "--rm", "busybox", "true")
117
+	timeBeginning := time.Unix(0, 0).Format(time.RFC3339Nano)
118
+	timeBeginning = strings.Replace(timeBeginning, "Z", ".000000000Z", -1)
119
+	eventsCmd := exec.Command(dockerBinary, "events", fmt.Sprintf("--since='%s'", timeBeginning),
120
+		fmt.Sprintf("--until=%d", daemonTime(t).Unix()))
121
+	out, exitCode, err := runCommandWithOutput(eventsCmd)
122
+	if exitCode != 0 || err != nil {
123
+		t.Fatalf("Failed to get events with exit code %d: %s", exitCode, err)
124
+	}
125
+	events := strings.Split(out, "\n")
126
+	events = events[:len(events)-1]
127
+	if len(events) < 4 {
128
+		t.Fatalf("Missing expected event")
129
+	}
130
+	createEvent := strings.Fields(events[len(events)-4])
131
+	startEvent := strings.Fields(events[len(events)-3])
132
+	dieEvent := strings.Fields(events[len(events)-2])
133
+	destroyEvent := strings.Fields(events[len(events)-1])
134
+	if createEvent[len(createEvent)-1] != "create" {
135
+		t.Fatalf("event should be create, not %#v", createEvent)
136
+	}
137
+	if startEvent[len(startEvent)-1] != "start" {
138
+		t.Fatalf("event should be start, not %#v", startEvent)
139
+	}
140
+	if dieEvent[len(dieEvent)-1] != "die" {
141
+		t.Fatalf("event should be die, not %#v", dieEvent)
142
+	}
143
+	if destroyEvent[len(destroyEvent)-1] != "destroy" {
144
+		t.Fatalf("event should be destroy, not %#v", destroyEvent)
145
+	}
146
+
147
+	logDone("events - container create, start, die, destroy since Unix Epoch time")
148
+}
149
+
115 150
 func TestEventsImageUntagDelete(t *testing.T) {
116 151
 	name := "testimageevents"
117 152
 	defer deleteImages(name)