summaryrefslogtreecommitdiffstats
path: root/testsuite/pgrep.test/pgrep.exp
blob: 0c4836f6c5d357fba3068c1d50f3871f445ebf45 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#
# Dejagnu tests for pgrep - part of procps
#
set mypid [pid]
set not_ppid [ expr { $mypid + 1 } ]
set pgrep "${topdir}src/pgrep"
set uid [ exec id -u ]
set not_uid [ expr { $uid + 1 } ]
set gid [ exec id -g ]
set not_gid [ expr { $gid + 1 } ]
set ps "${topdir}src/ps/pscommand"
set tty [ get_tty ]

set test "pgprep with no arguments"
spawn $pgrep
expect_pass "$test" "^\(lt-\)\?pgrep: no matching criteria specified\\s*"

make_testproc

set testproc_len [ string length $testproc_comm ]
set testproc_trim [ string range $testproc_comm 0 [ expr { $testproc_len - 2 } ] ]
set testproc1_sid [ string trim [ exec $ps --no-headers -o sid $testproc1_pid ] ]
set not_testproc1_sid [ expr { $testproc1_sid + 1 } ]

set test "pgrep find both test pids"
spawn $pgrep $testproc_comm
expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$"

# In Debian only
set test "pgrep counts 2 test pids"
spawn $pgrep -c $testproc_comm
expect_pass "$test" "^2\\s*"

set test "pgrep with : delimiter"
spawn $pgrep -d : $testproc_comm
expect_pass "$test" "^${testproc1_pid}:${testproc2_pid}\\s*$"

set test "pgrep match against full process name"
spawn $pgrep -f "$testproc_path\\s+$testproc_arg_str"
expect_pass "$test" "^$testproc1_pid\\s*$"

set test "pgrep with matching gid"
spawn $pgrep -G $gid $testproc_comm
expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$"

set test "pgrep with not matching gid"
spawn $pgrep -G $not_gid $testproc_comm
expect_blank $test

set test "pgrep with process name"
spawn $pgrep -l $testproc_comm
expect_pass "$test" "^$testproc1_pid\\s+$testproc_comm\\s+$testproc2_pid\\s+$testproc_comm\\s*$"

set test "pgrep with full command line"
spawn $pgrep -af "$testproc_path$"
expect_pass "$test" "^$testproc2_pid\\s+$testproc_path\\s*$"

set test "pgrep find newest test pid"
spawn $pgrep -n $testproc_comm
expect_pass "$test" "^$testproc2_pid\\s*$"

set test "pgrep find oldest test pid"
spawn $pgrep -o $testproc_comm
expect_pass "$test" "^$testproc1_pid\\s*$"

set test "pgrep matches with parent pid"
spawn $pgrep -P $mypid $testproc_comm
expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$"

set test "pgrep doesn't match with bogus parent pid"
spawn $pgrep -P $not_ppid $testproc_comm
expect_blank "$test"

set test "pgrep matches with its own sid"
spawn $pgrep -s $testproc1_sid $testproc_comm
expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$"

set test "pgrep doesn't match with bogus sid"
spawn $pgrep -s $not_testproc1_sid $testproc_comm
expect_blank "$test"

set test1 "pgrep matches on tty"
set test2 "pgrep doesn't match on tty and wrong runstate"
if { $tty == "" } {
  untested "$test1"
  untested "$test2"
} else {
    spawn $pgrep -t $tty $testproc_comm
    expect_pass "$test1" "^$testproc1_pid\\s+$testproc2_pid\\s*$"
    spawn $pgrep -t $tty -r D $testproc_comm
    expect_blank "$test2"
}

set test "pgrep doesn't match with bogus tty"
spawn $pgrep -t glass $testproc_comm
expect_blank "$test"

set test "pgrep with matching euid"
spawn $pgrep -u $uid $testproc_comm
expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$"

set test "pgrep with not matching euid"
spawn $pgrep -u $not_uid $testproc_comm
expect_blank $test

set test "pgrep with matching uid"
spawn $pgrep -U $uid $testproc_comm
expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$"

set test "pgrep with not matching uid"
spawn $pgrep -U $not_uid $testproc_comm
expect_blank $test

set test "pgrep matches on substring"
spawn $pgrep $testproc_trim
expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$"

set test "pgrep matches full string with exact"
spawn $pgrep -x $testproc_comm
expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$"

set test "pgrep does not match substring with exact"
spawn $pgrep -x $testproc_trim
expect_blank $test

set test "pgrep with long non-matching pattern gives warning"
spawn $pgrep gnome-session-bi
expect_pass "$test" "pattern that searches for process name longer than 15 characters will result in zero matches"

# Cleanup
kill_testproc