123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- //go:build !windows
- package daemon // import "github.com/docker/docker/daemon"
- import (
- "testing"
- "gotest.tools/v3/assert"
- )
- func TestContainerTopValidatePSArgs(t *testing.T) {
- tests := map[string]bool{
- "ae -o uid=PID": true,
- `ae -o "uid= PID"`: true, // ascii space (0x20)
- `ae -o "uid= PID"`: false, // unicode space (U+2003, 0xe2 0x80 0x83)
- "ae o uid=PID": true,
- "aeo uid=PID": true,
- "ae -O uid=PID": true,
- "ae -o pid=PID2 -o uid=PID": true,
- "ae -o pid=PID": false,
- "ae -o pid=PID -o uid=PIDX": true, // FIXME: we do not need to prohibit this
- "aeo pid=PID": false,
- "ae": false,
- "": false,
- }
- for psArgs, errExpected := range tests {
- t.Run(psArgs, func(t *testing.T) {
- err := validatePSArgs(psArgs)
- if errExpected {
- assert.ErrorContains(t, err, "", "psArgs: %q", psArgs)
- } else {
- assert.NilError(t, err, "psArgs: %q", psArgs)
- }
- })
- }
- }
- func TestContainerTopParsePSOutput(t *testing.T) {
- tests := []struct {
- output []byte
- pids []uint32
- errExpected bool
- }{
- {
- output: []byte(` PID COMMAND
- 42 foo
- 43 bar
- - -
- 100 baz
- `),
- pids: []uint32{42, 43},
- errExpected: false,
- },
- {
- output: []byte(` UID COMMAND
- 42 foo
- 43 bar
- - -
- 100 baz
- `),
- pids: []uint32{42, 43},
- errExpected: true,
- },
- // unicode space (U+2003, 0xe2 0x80 0x83)
- {
- output: []byte(` PID COMMAND
- 42 foo
- 43 bar
- - -
- 100 baz
- `),
- pids: []uint32{42, 43},
- errExpected: true,
- },
- // the first space is U+2003, the second one is ascii.
- {
- output: []byte(` PID COMMAND
- 42 foo
- 43 bar
- 100 baz
- `),
- pids: []uint32{42, 43},
- errExpected: true,
- },
- }
- for _, tc := range tests {
- tc := tc
- t.Run(string(tc.output), func(t *testing.T) {
- _, err := parsePSOutput(tc.output, tc.pids)
- if tc.errExpected && err == nil {
- t.Fatalf("expected error, got %v (%q)", err, string(tc.output))
- }
- if !tc.errExpected && err != nil {
- t.Fatalf("expected nil, got %v (%q)", err, string(tc.output))
- }
- })
- }
- }
|