stats_test.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package container // import "github.com/docker/docker/integration/container"
  2. import (
  3. "context"
  4. "encoding/json"
  5. "io"
  6. "reflect"
  7. "testing"
  8. "time"
  9. "github.com/docker/docker/api/types"
  10. "github.com/docker/docker/integration/internal/container"
  11. "gotest.tools/v3/assert"
  12. is "gotest.tools/v3/assert/cmp"
  13. "gotest.tools/v3/poll"
  14. "gotest.tools/v3/skip"
  15. )
  16. func TestStats(t *testing.T) {
  17. skip.If(t, testEnv.DaemonInfo.CgroupDriver == "none")
  18. skip.If(t, !testEnv.DaemonInfo.MemoryLimit)
  19. defer setupTest(t)()
  20. client := testEnv.APIClient()
  21. ctx := context.Background()
  22. info, err := client.Info(ctx)
  23. assert.NilError(t, err)
  24. cID := container.Run(ctx, t, client)
  25. poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond))
  26. resp, err := client.ContainerStats(ctx, cID, false)
  27. assert.NilError(t, err)
  28. defer resp.Body.Close()
  29. var v types.Stats
  30. err = json.NewDecoder(resp.Body).Decode(&v)
  31. assert.NilError(t, err)
  32. assert.Check(t, is.Equal(int64(v.MemoryStats.Limit), info.MemTotal))
  33. assert.Check(t, !reflect.DeepEqual(v.PreCPUStats, types.CPUStats{}))
  34. err = json.NewDecoder(resp.Body).Decode(&v)
  35. assert.Assert(t, is.ErrorContains(err, ""), io.EOF)
  36. resp, err = client.ContainerStatsOneShot(ctx, cID)
  37. assert.NilError(t, err)
  38. defer resp.Body.Close()
  39. v = types.Stats{}
  40. err = json.NewDecoder(resp.Body).Decode(&v)
  41. assert.NilError(t, err)
  42. assert.Check(t, is.Equal(int64(v.MemoryStats.Limit), info.MemTotal))
  43. assert.Check(t, is.DeepEqual(v.PreCPUStats, types.CPUStats{}))
  44. err = json.NewDecoder(resp.Body).Decode(&v)
  45. assert.Assert(t, is.ErrorContains(err, ""), io.EOF)
  46. }