a1150245cc
Movified from686be57d0a
, and re-ran gofmt again to address for files not present in 20.10 and vice-versa. Signed-off-by: Sebastiaan van Stijn <github@gone.nl> (cherry picked from commit686be57d0a
) Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
100 lines
2.2 KiB
Go
100 lines
2.2 KiB
Go
//go:build !windows
|
||
// +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))
|
||
}
|
||
})
|
||
}
|
||
}
|