Page MenuHomeFreeBSD

kyua: Make "debug -p" skip writing stdout/stderr to tmp files
Needs ReviewPublic

Authored by igoro on Thu, Dec 25, 8:45 PM.

Details

Reviewers
kp
markj
ngie
Group Reviewers
tests
Summary

The issue solved is that pausing before cleanup with -p or --pause-before-cleanup options of kyua debug command yields the following awkward sequence of events, where all the output is visible only when we resume the process:

root@taarch64:/usr/tests/sys/netpfil/pf # kyua debug --pause-before-cleanup mbuf:inet_in_mbuf_len
The test paused right before its cleanup routine.
Test work dir: /tmp/kyua.cBfB6F/2/work
Press <Enter> to continue...

Executing command [ ping -c1 192.0.2.2 ]
Executing command [ ping -c1 -t1 192.0.2.2 ]
Executing command [ ping -c1 192.0.2.2 ]
net.dummymbuf.rules:  -> inet in epair0b pull-head 0;
Executing command [ ping -c1 192.0.2.2 ]
net.dummymbuf.rules: inet in epair0b pull-head 0; -> inet in epair0b pull-head 1;
net.dummymbuf.hits: 1 -> 0
Executing command [ ping -c1 192.0.2.2 ]
net.dummymbuf.rules: inet in epair0b pull-head 1; -> inet in epair0b pull-head 19;
net.dummymbuf.hits: 1 -> 0
Executing command [ ping -c1 192.0.2.2 ]
alcatraz: removed
pf enabled
Ethernet rules cleared
rules cleared
nat cleared
0 tables deleted.
rules cleared
0 states cleared
source tracking entries cleared
pf: statistics cleared
pf: interface flags reset
Ethernet rules cleared
rules cleared
nat cleared
0 tables deleted.
rules cleared
0 states cleared
source tracking entries cleared
pf: statistics cleared
pf: interface flags reset
ifconfig: interface epair0a does not exist
mbuf:inet_in_mbuf_len  ->  passed

This is because of internally kyua runs the test using the same mechanism which is used by kyua test command, when stdout/stderr are written to plain files beneath /tmp/kyua.*/**/stdout and /tmp/kyua.*/**/stderr. And it's printed back to actual stdout/stderr only when the test is finished.

The proposed patch keeps the same behavior if -p|--pause-before-cleanup options are not used, but skips writing to temporary files if pausing mechanism is asked to be used. Moreover, kyua debug -p still supports kyua debug --stdout=<path> --stderr=<path> options.

As a result, we get the expected sequence in the output:

root@taarch64:/usr/tests/sys/netpfil/pf # kyua debug --pause-before-cleanup mbuf:inet_in_mbuf_len
Executing command [ ping -c1 192.0.2.2 ]
pf enabled
Ethernet rules cleared
rules cleared
nat cleared
0 tables deleted.
rules cleared
0 states cleared
source tracking entries cleared
pf: statistics cleared
pf: interface flags reset
Executing command [ ping -c1 -t1 192.0.2.2 ]
Ethernet rules cleared
rules cleared
nat cleared
0 tables deleted.
rules cleared
0 states cleared
source tracking entries cleared
pf: statistics cleared
pf: interface flags reset
Executing command [ ping -c1 192.0.2.2 ]
net.dummymbuf.rules:  -> inet in epair0b pull-head 0;
Executing command [ ping -c1 192.0.2.2 ]
net.dummymbuf.rules: inet in epair0b pull-head 0; -> inet in epair0b pull-head 1;
net.dummymbuf.hits: 1 -> 0
Executing command [ ping -c1 192.0.2.2 ]
net.dummymbuf.rules: inet in epair0b pull-head 1; -> inet in epair0b pull-head 19;
net.dummymbuf.hits: 1 -> 0
Executing command [ ping -c1 192.0.2.2 ]
The test paused right before its cleanup routine.
Test work dir: /tmp/kyua.OYNAoB/2/work
Press <Enter> to continue...

alcatraz: removed
ifconfig: interface epair0a does not exist
mbuf:inet_in_mbuf_len  ->  passed

The kyua debug -x option (https://reviews.freebsd.org/D52642) could also support it after landing of this change.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 69468
Build 66351: arc lint + arc unit