Browse code

Event tests need to wait for events

Signed-off-by: Dong Chen <dongluo.chen@docker.com>

Dong Chen authored on 2017/05/19 19:25:14
Showing 1 changed files
... ...
@@ -2002,6 +2002,35 @@ func (s *DockerSwarmSuite) TestSwarmJoinLeave(c *check.C) {
2002 2002
 	}
2003 2003
 }
2004 2004
 
2005
+const defaultRetryCount = 10
2006
+
2007
+func waitForEvent(c *check.C, d *daemon.Swarm, since string, filter string, event string, retry int) string {
2008
+	if retry < 1 {
2009
+		c.Fatalf("retry count %d is invalid. It should be no less than 1", retry)
2010
+		return ""
2011
+	}
2012
+	var out string
2013
+	for i := 0; i < retry; i++ {
2014
+		until := daemonUnixTime(c)
2015
+		var err error
2016
+		if len(filter) > 0 {
2017
+			out, err = d.Cmd("events", "--since", since, "--until", until, filter)
2018
+		} else {
2019
+			out, err = d.Cmd("events", "--since", since, "--until", until)
2020
+		}
2021
+		c.Assert(err, checker.IsNil, check.Commentf(out))
2022
+		if strings.Contains(out, event) {
2023
+			return strings.TrimSpace(out)
2024
+		}
2025
+		// no need to sleep after last retry
2026
+		if i < retry-1 {
2027
+			time.Sleep(200 * time.Millisecond)
2028
+		}
2029
+	}
2030
+	c.Fatalf("docker events output '%s' doesn't contain event '%s'", out, event)
2031
+	return ""
2032
+}
2033
+
2005 2034
 func (s *DockerSwarmSuite) TestSwarmClusterEventsSource(c *check.C) {
2006 2035
 	d1 := s.AddDaemon(c, true, true)
2007 2036
 	d2 := s.AddDaemon(c, true, true)
... ...
@@ -2013,21 +2042,13 @@ func (s *DockerSwarmSuite) TestSwarmClusterEventsSource(c *check.C) {
2013 2013
 	networkID := strings.TrimSpace(out)
2014 2014
 	c.Assert(networkID, checker.Not(checker.Equals), "")
2015 2015
 
2016
-	until := daemonUnixTime(c)
2017
-	// d1 is a manager
2018
-	out, err = d1.Cmd("events", "--since=0", "--until", until, "-f scope=swarm")
2019
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2020
-	c.Assert(strings.TrimSpace(out), checker.Contains, "network create "+networkID)
2021
-
2022
-	// d2 is a manager
2023
-	out, err = d2.Cmd("events", "--since=0", "--until", until, "-f scope=swarm")
2024
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2025
-	c.Assert(strings.TrimSpace(out), checker.Contains, "network create "+networkID)
2016
+	// d1, d2 are managers that can get swarm events
2017
+	waitForEvent(c, d1, "0", "-f scope=swarm", "network create "+networkID, defaultRetryCount)
2018
+	waitForEvent(c, d2, "0", "-f scope=swarm", "network create "+networkID, defaultRetryCount)
2026 2019
 
2027 2020
 	// d3 is a worker, not able to get cluster events
2028
-	out, err = d3.Cmd("events", "--since=0", "--until", until, "-f scope=swarm")
2029
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2030
-	c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), "network create ")
2021
+	out = waitForEvent(c, d3, "0", "-f scope=swarm", "", 1)
2022
+	c.Assert(out, checker.Not(checker.Contains), "network create ")
2031 2023
 }
2032 2024
 
2033 2025
 func (s *DockerSwarmSuite) TestSwarmClusterEventsScope(c *check.C) {
... ...
@@ -2038,24 +2059,17 @@ func (s *DockerSwarmSuite) TestSwarmClusterEventsScope(c *check.C) {
2038 2038
 	c.Assert(err, checker.IsNil, check.Commentf(out))
2039 2039
 	serviceID := strings.Split(out, "\n")[0]
2040 2040
 
2041
-	until := daemonUnixTime(c)
2042 2041
 	// scope swarm filters cluster events
2043
-	out, err = d.Cmd("events", "--since=0", "--until", until, "-f scope=swarm")
2044
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2045
-	c.Assert(strings.TrimSpace(out), checker.Contains, "service create "+serviceID)
2046
-	c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), "container create ")
2042
+	out = waitForEvent(c, d, "0", "-f scope=swarm", "service create "+serviceID, defaultRetryCount)
2043
+	c.Assert(out, checker.Not(checker.Contains), "container create ")
2047 2044
 
2048
-	// without scope all events are returned
2049
-	out, err = d.Cmd("events", "--since=0", "--until", until)
2050
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2051
-	c.Assert(strings.TrimSpace(out), checker.Contains, "service create "+serviceID)
2052
-	c.Assert(strings.TrimSpace(out), checker.Contains, "container create ")
2045
+	// all events are returned if scope is not specified
2046
+	waitForEvent(c, d, "0", "", "service create "+serviceID, 1)
2047
+	waitForEvent(c, d, "0", "", "container create ", defaultRetryCount)
2053 2048
 
2054
-	// scope local only show non-cluster events
2055
-	out, err = d.Cmd("events", "--since=0", "--until", until, "-f scope=local")
2056
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2057
-	c.Assert(strings.TrimSpace(out), checker.Not(checker.Contains), "service create ")
2058
-	c.Assert(strings.TrimSpace(out), checker.Contains, "container create ")
2049
+	// scope local only shows non-cluster events
2050
+	out = waitForEvent(c, d, "0", "-f scope=local", "container create ", 1)
2051
+	c.Assert(out, checker.Not(checker.Contains), "service create ")
2059 2052
 }
2060 2053
 
2061 2054
 func (s *DockerSwarmSuite) TestSwarmClusterEventsType(c *check.C) {
... ...
@@ -2072,17 +2086,12 @@ func (s *DockerSwarmSuite) TestSwarmClusterEventsType(c *check.C) {
2072 2072
 	networkID := strings.TrimSpace(out)
2073 2073
 	c.Assert(networkID, checker.Not(checker.Equals), "")
2074 2074
 
2075
-	until := daemonUnixTime(c)
2076 2075
 	// filter by service
2077
-	out, err = d.Cmd("events", "--since=0", "--until", until, "-f type=service")
2078
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2079
-	c.Assert(out, checker.Contains, "service create "+serviceID)
2076
+	out = waitForEvent(c, d, "0", "-f type=service", "service create "+serviceID, defaultRetryCount)
2080 2077
 	c.Assert(out, checker.Not(checker.Contains), "network create")
2081 2078
 
2082 2079
 	// filter by network
2083
-	out, err = d.Cmd("events", "--since=0", "--until", until, "-f type=network")
2084
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2085
-	c.Assert(out, checker.Contains, "network create "+networkID)
2080
+	out = waitForEvent(c, d, "0", "-f type=network", "network create "+networkID, defaultRetryCount)
2086 2081
 	c.Assert(out, checker.Not(checker.Contains), "service create")
2087 2082
 }
2088 2083
 
... ...
@@ -2094,40 +2103,36 @@ func (s *DockerSwarmSuite) TestSwarmClusterEventsService(c *check.C) {
2094 2094
 	c.Assert(err, checker.IsNil, check.Commentf(out))
2095 2095
 	serviceID := strings.Split(out, "\n")[0]
2096 2096
 
2097
-	t1 := daemonUnixTime(c)
2098 2097
 	// validate service create event
2099
-	out, err = d.Cmd("events", "--since=0", "--until", t1, "-f scope=swarm")
2100
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2101
-	c.Assert(out, checker.Contains, "service create "+serviceID)
2098
+	waitForEvent(c, d, "0", "-f scope=swarm", "service create "+serviceID, defaultRetryCount)
2102 2099
 
2100
+	t1 := daemonUnixTime(c)
2103 2101
 	out, err = d.Cmd("service", "update", "--force", "--detach=false", "test")
2104 2102
 	c.Assert(err, checker.IsNil, check.Commentf(out))
2105 2103
 
2106
-	t2 := daemonUnixTime(c)
2107
-	out, err = d.Cmd("events", "--since", t1, "--until", t2, "-f scope=swarm")
2108
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2109
-	c.Assert(out, checker.Contains, "service update "+serviceID)
2104
+	// wait for service update start
2105
+	out = waitForEvent(c, d, t1, "-f scope=swarm", "service update "+serviceID, defaultRetryCount)
2110 2106
 	c.Assert(out, checker.Contains, "updatestate.new=updating")
2107
+
2108
+	// allow service update complete. This is a service with 1 instance
2109
+	time.Sleep(400 * time.Millisecond)
2110
+	out = waitForEvent(c, d, t1, "-f scope=swarm", "service update "+serviceID, defaultRetryCount)
2111 2111
 	c.Assert(out, checker.Contains, "updatestate.new=completed, updatestate.old=updating")
2112 2112
 
2113 2113
 	// scale service
2114
+	t2 := daemonUnixTime(c)
2114 2115
 	out, err = d.Cmd("service", "scale", "test=3")
2115 2116
 	c.Assert(err, checker.IsNil, check.Commentf(out))
2116 2117
 
2117
-	t3 := daemonUnixTime(c)
2118
-	out, err = d.Cmd("events", "--since", t2, "--until", t3, "-f scope=swarm")
2119
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2120
-	c.Assert(out, checker.Contains, "service update "+serviceID)
2118
+	out = waitForEvent(c, d, t2, "-f scope=swarm", "service update "+serviceID, defaultRetryCount)
2121 2119
 	c.Assert(out, checker.Contains, "replicas.new=3, replicas.old=1")
2122 2120
 
2123 2121
 	// remove service
2122
+	t3 := daemonUnixTime(c)
2124 2123
 	out, err = d.Cmd("service", "rm", "test")
2125 2124
 	c.Assert(err, checker.IsNil, check.Commentf(out))
2126 2125
 
2127
-	t4 := daemonUnixTime(c)
2128
-	out, err = d.Cmd("events", "--since", t3, "--until", t4, "-f scope=swarm")
2129
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2130
-	c.Assert(out, checker.Contains, "service remove "+serviceID)
2126
+	waitForEvent(c, d, t3, "-f scope=swarm", "service remove "+serviceID, defaultRetryCount)
2131 2127
 }
2132 2128
 
2133 2129
 func (s *DockerSwarmSuite) TestSwarmClusterEventsNode(c *check.C) {
... ...
@@ -2136,38 +2141,28 @@ func (s *DockerSwarmSuite) TestSwarmClusterEventsNode(c *check.C) {
2136 2136
 	d3 := s.AddDaemon(c, true, true)
2137 2137
 
2138 2138
 	d3ID := d3.NodeID
2139
-	t1 := daemonUnixTime(c)
2140
-	out, err := d1.Cmd("events", "--since=0", "--until", t1, "-f scope=swarm")
2141
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2142
-	c.Assert(out, checker.Contains, "node create "+d3ID)
2139
+	waitForEvent(c, d1, "0", "-f scope=swarm", "node create "+d3ID, defaultRetryCount)
2143 2140
 
2144
-	out, err = d1.Cmd("node", "update", "--availability=pause", d3ID)
2141
+	t1 := daemonUnixTime(c)
2142
+	out, err := d1.Cmd("node", "update", "--availability=pause", d3ID)
2145 2143
 	c.Assert(err, checker.IsNil, check.Commentf(out))
2146 2144
 
2147
-	t2 := daemonUnixTime(c)
2148 2145
 	// filter by type
2149
-	out, err = d1.Cmd("events", "--since", t1, "--until", t2, "-f type=node")
2150
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2151
-	c.Assert(out, checker.Contains, "node update "+d3ID)
2146
+	out = waitForEvent(c, d1, t1, "-f type=node", "node update "+d3ID, defaultRetryCount)
2152 2147
 	c.Assert(out, checker.Contains, "availability.new=pause, availability.old=active")
2153 2148
 
2149
+	t2 := daemonUnixTime(c)
2154 2150
 	out, err = d1.Cmd("node", "demote", d3ID)
2155 2151
 	c.Assert(err, checker.IsNil, check.Commentf(out))
2156 2152
 
2157
-	t3 := daemonUnixTime(c)
2158
-	// filter by type and scope
2159
-	out, err = d1.Cmd("events", "--since", t2, "--until", t3, "-f type=node", "-f scope=swarm")
2160
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2161
-	c.Assert(out, checker.Contains, "node update "+d3ID)
2153
+	waitForEvent(c, d1, t2, "-f type=node", "node update "+d3ID, defaultRetryCount)
2162 2154
 
2155
+	t3 := daemonUnixTime(c)
2163 2156
 	out, err = d1.Cmd("node", "rm", "-f", d3ID)
2164 2157
 	c.Assert(err, checker.IsNil, check.Commentf(out))
2165 2158
 
2166
-	t4 := daemonUnixTime(c)
2167
-	// filter by type and scope
2168
-	out, err = d1.Cmd("events", "--since", t3, "--until", t4, "-f type=node", "-f scope=swarm")
2169
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2170
-	c.Assert(out, checker.Contains, "node remove "+d3ID)
2159
+	// filter by scope
2160
+	waitForEvent(c, d1, t3, "-f scope=swarm", "node remove "+d3ID, defaultRetryCount)
2171 2161
 }
2172 2162
 
2173 2163
 func (s *DockerSwarmSuite) TestSwarmClusterEventsNetwork(c *check.C) {
... ...
@@ -2178,20 +2173,15 @@ func (s *DockerSwarmSuite) TestSwarmClusterEventsNetwork(c *check.C) {
2178 2178
 	c.Assert(err, checker.IsNil, check.Commentf(out))
2179 2179
 	networkID := strings.TrimSpace(out)
2180 2180
 
2181
-	t1 := daemonUnixTime(c)
2182
-	out, err = d.Cmd("events", "--since=0", "--until", t1, "-f scope=swarm")
2183
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2184
-	c.Assert(out, checker.Contains, "network create "+networkID)
2181
+	waitForEvent(c, d, "0", "-f scope=swarm", "network create "+networkID, defaultRetryCount)
2185 2182
 
2186 2183
 	// remove network
2184
+	t1 := daemonUnixTime(c)
2187 2185
 	out, err = d.Cmd("network", "rm", "foo")
2188 2186
 	c.Assert(err, checker.IsNil, check.Commentf(out))
2189 2187
 
2190
-	t2 := daemonUnixTime(c)
2191 2188
 	// filtered by network
2192
-	out, err = d.Cmd("events", "--since", t1, "--until", t2, "-f type=network")
2193
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2194
-	c.Assert(out, checker.Contains, "network remove "+networkID)
2189
+	waitForEvent(c, d, t1, "-f type=network", "network remove "+networkID, defaultRetryCount)
2195 2190
 }
2196 2191
 
2197 2192
 func (s *DockerSwarmSuite) TestSwarmClusterEventsSecret(c *check.C) {
... ...
@@ -2206,15 +2196,10 @@ func (s *DockerSwarmSuite) TestSwarmClusterEventsSecret(c *check.C) {
2206 2206
 	})
2207 2207
 	c.Assert(id, checker.Not(checker.Equals), "", check.Commentf("secrets: %s", id))
2208 2208
 
2209
-	t1 := daemonUnixTime(c)
2210
-	out, err := d.Cmd("events", "--since=0", "--until", t1, "-f scope=swarm")
2211
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2212
-	c.Assert(out, checker.Contains, "secret create "+id)
2209
+	waitForEvent(c, d, "0", "-f scope=swarm", "secret create "+id, defaultRetryCount)
2213 2210
 
2211
+	t1 := daemonUnixTime(c)
2214 2212
 	d.DeleteSecret(c, id)
2215
-	t2 := daemonUnixTime(c)
2216 2213
 	// filtered by secret
2217
-	out, err = d.Cmd("events", "--since", t1, "--until", t2, "-f type=secret")
2218
-	c.Assert(err, checker.IsNil, check.Commentf(out))
2219
-	c.Assert(out, checker.Contains, "secret remove "+id)
2214
+	waitForEvent(c, d, t1, "-f type=secret", "secret remove "+id, defaultRetryCount)
2220 2215
 }