github.com/gdevillele/moby@v1.13.0/daemon/top_unix_test.go (about)

     1  //+build !windows
     2  
     3  package daemon
     4  
     5  import (
     6  	"testing"
     7  )
     8  
     9  func TestContainerTopValidatePSArgs(t *testing.T) {
    10  	tests := map[string]bool{
    11  		"ae -o uid=PID":             true,
    12  		"ae -o \"uid= PID\"":        true,  // ascii space (0x20)
    13  		"ae -o \"uid= PID\"":        false, // unicode space (U+2003, 0xe2 0x80 0x83)
    14  		"ae o uid=PID":              true,
    15  		"aeo uid=PID":               true,
    16  		"ae -O uid=PID":             true,
    17  		"ae -o pid=PID2 -o uid=PID": true,
    18  		"ae -o pid=PID":             false,
    19  		"ae -o pid=PID -o uid=PIDX": true, // FIXME: we do not need to prohibit this
    20  		"aeo pid=PID":               false,
    21  		"ae":                        false,
    22  		"":                          false,
    23  	}
    24  	for psArgs, errExpected := range tests {
    25  		err := validatePSArgs(psArgs)
    26  		t.Logf("tested %q, got err=%v", psArgs, err)
    27  		if errExpected && err == nil {
    28  			t.Fatalf("expected error, got %v (%q)", err, psArgs)
    29  		}
    30  		if !errExpected && err != nil {
    31  			t.Fatalf("expected nil, got %v (%q)", err, psArgs)
    32  		}
    33  	}
    34  }
    35  
    36  func TestContainerTopParsePSOutput(t *testing.T) {
    37  	tests := []struct {
    38  		output      []byte
    39  		pids        []int
    40  		errExpected bool
    41  	}{
    42  		{[]byte(`  PID COMMAND
    43     42 foo
    44     43 bar
    45    100 baz
    46  `), []int{42, 43}, false},
    47  		{[]byte(`  UID COMMAND
    48     42 foo
    49     43 bar
    50    100 baz
    51  `), []int{42, 43}, true},
    52  		// unicode space (U+2003, 0xe2 0x80 0x83)
    53  		{[]byte(` PID COMMAND
    54     42 foo
    55     43 bar
    56    100 baz
    57  `), []int{42, 43}, true},
    58  		// the first space is U+2003, the second one is ascii.
    59  		{[]byte(` PID COMMAND
    60     42 foo
    61     43 bar
    62    100 baz
    63  `), []int{42, 43}, true},
    64  	}
    65  
    66  	for _, f := range tests {
    67  		_, err := parsePSOutput(f.output, f.pids)
    68  		t.Logf("tested %q, got err=%v", string(f.output), err)
    69  		if f.errExpected && err == nil {
    70  			t.Fatalf("expected error, got %v (%q)", err, string(f.output))
    71  		}
    72  		if !f.errExpected && err != nil {
    73  			t.Fatalf("expected nil, got %v (%q)", err, string(f.output))
    74  		}
    75  	}
    76  }