github.com/zhouyu0/docker-note@v0.0.0-20190722021225-b8d3825084db/integration/container/health_test.go (about) 1 package container // import "github.com/docker/docker/integration/container" 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 "github.com/docker/docker/api/types" 9 containertypes "github.com/docker/docker/api/types/container" 10 "github.com/docker/docker/client" 11 "github.com/docker/docker/integration/internal/container" 12 "gotest.tools/poll" 13 "gotest.tools/skip" 14 ) 15 16 // TestHealthCheckWorkdir verifies that health-checks inherit the containers' 17 // working-dir. 18 func TestHealthCheckWorkdir(t *testing.T) { 19 skip.If(t, testEnv.OSType == "windows", "FIXME") 20 defer setupTest(t)() 21 ctx := context.Background() 22 client := testEnv.APIClient() 23 24 cID := container.Run(t, ctx, client, container.WithTty(true), container.WithWorkingDir("/foo"), func(c *container.TestContainerConfig) { 25 c.Config.Healthcheck = &containertypes.HealthConfig{ 26 Test: []string{"CMD-SHELL", "if [ \"$PWD\" = \"/foo\" ]; then exit 0; else exit 1; fi;"}, 27 Interval: 50 * time.Millisecond, 28 Retries: 3, 29 } 30 }) 31 32 poll.WaitOn(t, pollForHealthStatus(ctx, client, cID, types.Healthy), poll.WithDelay(100*time.Millisecond)) 33 } 34 35 func pollForHealthStatus(ctx context.Context, client client.APIClient, containerID string, healthStatus string) func(log poll.LogT) poll.Result { 36 return func(log poll.LogT) poll.Result { 37 inspect, err := client.ContainerInspect(ctx, containerID) 38 39 switch { 40 case err != nil: 41 return poll.Error(err) 42 case inspect.State.Health.Status == healthStatus: 43 return poll.Success() 44 default: 45 return poll.Continue("waiting for container to become %s", healthStatus) 46 } 47 } 48 }