moby/daemon/top_unix_test.go
Sebastiaan van Stijn a1150245cc
Update to Go 1.17.0, and gofmt with Go 1.17
Movified from 686be57d0a, 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 commit 686be57d0a)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2022-04-07 23:27:50 +02:00

100 lines
2.2 KiB
Go
Raw 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))
}
})
}
}