Skip to content

Commit

Permalink
Merge pull request #42958 from cpuguy83/fix_racey_health_test
Browse files Browse the repository at this point in the history
Fix racey TestHealthKillContainer
  • Loading branch information
thaJeztah committed Oct 21, 2021
2 parents 8f4d858 + 27ba755 commit bb6fdac
Showing 1 changed file with 32 additions and 1 deletion.
33 changes: 32 additions & 1 deletion integration/container/health_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,32 @@ func TestHealthKillContainer(t *testing.T) {
client := testEnv.APIClient()

id := container.Run(ctx, t, client, func(c *container.TestContainerConfig) {
cmd := `
# Set the initial HEALTH value so the healthcheck passes
HEALTH="1"
echo $HEALTH > /health
# Any time doHealth is run we flip the value
# This lets us use kill signals to determine when healtchecks have run.
doHealth() {
case "$HEALTH" in
"0")
HEALTH="1"
;;
"1")
HEALTH="0"
;;
esac
echo $HEALTH > /health
}
trap 'doHealth' USR1
while true; do sleep 1; done
`
c.Config.Cmd = []string{"/bin/sh", "-c", cmd}
c.Config.Healthcheck = &containertypes.HealthConfig{
Test: []string{"CMD-SHELL", "sleep 1"},
Test: []string{"CMD-SHELL", `[ "$(cat /health)" = "1" ]`},
Interval: time.Second,
Retries: 5,
}
Expand All @@ -57,6 +81,13 @@ func TestHealthKillContainer(t *testing.T) {
err := client.ContainerKill(ctx, id, "SIGUSR1")
assert.NilError(t, err)

ctxPoll, cancel = context.WithTimeout(ctx, 30*time.Second)
defer cancel()
poll.WaitOn(t, pollForHealthStatus(ctxPoll, client, id, "unhealthy"), poll.WithDelay(100*time.Millisecond))

err = client.ContainerKill(ctx, id, "SIGUSR1")
assert.NilError(t, err)

ctxPoll, cancel = context.WithTimeout(ctx, 30*time.Second)
defer cancel()
poll.WaitOn(t, pollForHealthStatus(ctxPoll, client, id, "healthy"), poll.WithDelay(100*time.Millisecond))
Expand Down

0 comments on commit bb6fdac

Please sign in to comment.