stats_test.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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.MemoryLimit)
  18. defer setupTest(t)()
  19. client := testEnv.APIClient()
  20. ctx := context.Background()
  21. info, err := client.Info(ctx)
  22. assert.NilError(t, err)
  23. cID := container.Run(ctx, t, client)
  24. poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond))
  25. resp, err := client.ContainerStats(ctx, cID, false)
  26. assert.NilError(t, err)
  27. defer resp.Body.Close()
  28. var v types.Stats
  29. err = json.NewDecoder(resp.Body).Decode(&v)
  30. assert.NilError(t, err)
  31. assert.Check(t, is.Equal(int64(v.MemoryStats.Limit), info.MemTotal))
  32. assert.Check(t, !reflect.DeepEqual(v.PreCPUStats, types.CPUStats{}))
  33. err = json.NewDecoder(resp.Body).Decode(&v)
  34. assert.Assert(t, is.ErrorContains(err, ""), io.EOF)
  35. resp, err = client.ContainerStatsOneShot(ctx, cID)
  36. assert.NilError(t, err)
  37. defer resp.Body.Close()
  38. v = types.Stats{}
  39. err = json.NewDecoder(resp.Body).Decode(&v)
  40. assert.NilError(t, err)
  41. assert.Check(t, is.Equal(int64(v.MemoryStats.Limit), info.MemTotal))
  42. assert.Check(t, is.DeepEqual(v.PreCPUStats, types.CPUStats{}))
  43. err = json.NewDecoder(resp.Body).Decode(&v)
  44. assert.Assert(t, is.ErrorContains(err, ""), io.EOF)
  45. }