moby--moby/daemon/top_unix_test.go

101 lines
2.2 KiB
Go
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//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(`PIDCOMMAND
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))
}
})
}
}