integration/system/event_test.go
aa6bb5cb
 package system
 
 import (
 	"context"
 	"testing"
 
 	"time"
 
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/container"
 	"github.com/docker/docker/api/types/filters"
 	"github.com/docker/docker/api/types/network"
 	"github.com/docker/docker/api/types/strslice"
 	"github.com/docker/docker/integration/util/request"
 	"github.com/stretchr/testify/require"
 )
 
 func TestEvents(t *testing.T) {
 	defer setupTest(t)()
 	ctx := context.Background()
 	client := request.NewAPIClient(t)
 
 	container, err := client.ContainerCreate(ctx,
 		&container.Config{
 			Image:      "busybox",
 			Tty:        true,
 			WorkingDir: "/root",
 			Cmd:        strslice.StrSlice([]string{"top"}),
 		},
 		&container.HostConfig{},
 		&network.NetworkingConfig{},
 		"foo",
 	)
 	require.NoError(t, err)
 	err = client.ContainerStart(ctx, container.ID, types.ContainerStartOptions{})
 	require.NoError(t, err)
 
 	id, err := client.ContainerExecCreate(ctx, container.ID,
 		types.ExecConfig{
 			Cmd: strslice.StrSlice([]string{"echo", "hello"}),
 		},
 	)
 	require.NoError(t, err)
 
 	filters := filters.NewArgs(
 		filters.Arg("container", container.ID),
 		filters.Arg("event", "exec_die"),
 	)
 	msg, errors := client.Events(ctx, types.EventsOptions{
 		Filters: filters,
 	})
 
 	err = client.ContainerExecStart(ctx, id.ID,
 		types.ExecStartCheck{
 			Detach: true,
 			Tty:    false,
 		},
 	)
 	require.NoError(t, err)
 
 	select {
 	case m := <-msg:
 		require.Equal(t, m.Type, "container")
 		require.Equal(t, m.Actor.ID, container.ID)
 		require.Equal(t, m.Action, "exec_die")
 		require.Equal(t, m.Actor.Attributes["execID"], id.ID)
 		require.Equal(t, m.Actor.Attributes["exitCode"], "0")
 	case err = <-errors:
 		t.Fatal(err)
 	case <-time.After(time.Second * 3):
 		t.Fatal("timeout hit")
 	}
 
 }