links_linux_test.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package container
  2. import (
  3. "bytes"
  4. "context"
  5. "io/ioutil"
  6. "os"
  7. "testing"
  8. "time"
  9. "github.com/docker/docker/api/types"
  10. "github.com/docker/docker/api/types/container"
  11. "github.com/docker/docker/integration/util/request"
  12. "github.com/docker/docker/pkg/stdcopy"
  13. "github.com/gotestyourself/gotestyourself/poll"
  14. "github.com/gotestyourself/gotestyourself/skip"
  15. "github.com/stretchr/testify/assert"
  16. "github.com/stretchr/testify/require"
  17. )
  18. func TestLinksEtcHostsContentMatch(t *testing.T) {
  19. skip.If(t, !testEnv.IsLocalDaemon())
  20. hosts, err := ioutil.ReadFile("/etc/hosts")
  21. skip.If(t, os.IsNotExist(err))
  22. defer setupTest(t)()
  23. client := request.NewAPIClient(t)
  24. ctx := context.Background()
  25. c, err := client.ContainerCreate(ctx,
  26. &container.Config{
  27. Image: "busybox",
  28. Cmd: []string{"cat", "/etc/hosts"},
  29. },
  30. &container.HostConfig{
  31. NetworkMode: "host",
  32. },
  33. nil,
  34. "")
  35. require.NoError(t, err)
  36. err = client.ContainerStart(ctx, c.ID, types.ContainerStartOptions{})
  37. require.NoError(t, err)
  38. poll.WaitOn(t, containerIsStopped(ctx, client, c.ID), poll.WithDelay(100*time.Millisecond))
  39. body, err := client.ContainerLogs(ctx, c.ID, types.ContainerLogsOptions{
  40. ShowStdout: true,
  41. })
  42. require.NoError(t, err)
  43. defer body.Close()
  44. var b bytes.Buffer
  45. _, err = stdcopy.StdCopy(&b, ioutil.Discard, body)
  46. require.NoError(t, err)
  47. assert.Equal(t, string(hosts), b.String())
  48. }