#!/usr/bin/env rc diag=./disag tmp=/tmp/diag-tests.$pid mkdir $tmp || exit $status fn cleanup { rm -rf $tmp } fn fail { echo test failed: $* >[1=2] cleanup exit fail } fn assert_file { if(! cmp -s $1 $2) fail $3 } $diag --help > $tmp/help.out >[2]$tmp/help.err || fail help-run grep -s '^usage: diag' $tmp/help.out >/dev/null || fail help-usage grep -s '^Examples:' $tmp/help.out >/dev/null || fail help-examples grep -s 'anonymous rc pipes' $tmp/help.out >/dev/null || fail help-anonymous-pipes printf '%s\n' 'DEPRECATED use disag.js' > $tmp/help.err.want assert_file $tmp/help.err $tmp/help.err.want help-stderr if(grep -s 'mkfifo\|/tmp/diag\|pgrep -P\|perl' $diag >/dev/null) fail named-temp-mechanism ls -la > $tmp/workspace.before $diag 'echo no-files' -n NF > $tmp/no-files.out >[2=1] || fail no-files-run ls -la > $tmp/workspace.after assert_file $tmp/workspace.before $tmp/workspace.after no-files-mutated-workspace $diag 'echo out; echo err >[1=2]' -f $tmp/raw.log -n RAW > $tmp/raw.out >[2]$tmp/raw.err || fail raw-run printf '%s\n' '[RAW] out' > $tmp/raw.out.want printf '%s\n' 'DEPRECATED use disag.js' '[RAW] err' '[DISAG] RAW exited with exit code 0' > $tmp/raw.err.want printf '%s\n' err out > $tmp/raw.log.want assert_file $tmp/raw.out $tmp/raw.out.want raw-output assert_file $tmp/raw.err $tmp/raw.err.want raw-error sort $tmp/raw.log > $tmp/raw.log.sorted assert_file $tmp/raw.log.sorted $tmp/raw.log.want raw-log $diag 'echo first' -f $tmp/old.log -f $tmp/new.log -n OLD -n NEW > $tmp/last.out >[2=1] || fail last-run printf '%s\n' 'DEPRECATED use disag.js' '[NEW] first' '[DISAG] NEW exited with exit code 0' > $tmp/last.out.want printf '%s\n' first > $tmp/new.log.want assert_file $tmp/last.out $tmp/last.out.want last-output assert_file $tmp/new.log $tmp/new.log.want last-log if(test -e $tmp/old.log) fail old-log-created $diag 'echo display-only' -n DISP > $tmp/display.out >[2=1] || fail display-run printf '%s\n' 'DEPRECATED use disag.js' '[DISP] display-only' '[DISAG] DISP exited with exit code 0' > $tmp/display.out.want assert_file $tmp/display.out $tmp/display.out.want display-output $diag 'echo out; echo err >[1=2]' -f $tmp/streams.log -n S > $tmp/streams.out >[2]$tmp/streams.err || fail streams-run printf '%s\n' '[S] out' > $tmp/streams.out.want printf '%s\n' 'DEPRECATED use disag.js' '[S] err' '[DISAG] S exited with exit code 0' > $tmp/streams.err.want assert_file $tmp/streams.out $tmp/streams.out.want streams-stdout assert_file $tmp/streams.err $tmp/streams.err.want streams-stderr $diag 'echo spaced' -f $tmp/'space log.txt' -n 'SPACE NAME' > $tmp/spaced.out >[2=1] || fail spaced-run printf '%s\n' 'DEPRECATED use disag.js' '[SPACE NAME] spaced' '[DISAG] SPACE NAME exited with exit code 0' > $tmp/spaced.out.want printf '%s\n' spaced > $tmp/'space log.txt.want' assert_file $tmp/spaced.out $tmp/spaced.out.want spaced-output assert_file $tmp/'space log.txt' $tmp/'space log.txt.want' spaced-log $diag 'exit 7' > $tmp/status.out >[2=1] s=$status if(~ $s 0) fail status-zero sigcmd='node tests/fixtures/diag-helper.js signal '^$tmp $diag $sigcmd -f $tmp/signal.log > $tmp/signal.out >[2=1] & pid=$apid i=0 while(! test -f $tmp/ready.seen && ! ~ $i 50) { sleep 0.1 i=`{expr $i + 1} } kill -TERM $pid wait $pid i=0 while(! test -f $tmp/term.seen && ! ~ $i 50) { sleep 0.1 i=`{expr $i + 1} } if(! test -f $tmp/term.seen) fail signal-not-propagated rm -f $tmp/ready.seen $tmp/term.seen $tmp/done.seen sigcmd='node tests/fixtures/diag-helper.js signal-delay '^$tmp $diag $sigcmd -f $tmp/signal-delay.log > $tmp/signal-delay.out >[2=1] & pid=$apid i=0 while(! test -f $tmp/ready.seen && ! ~ $i 50) { sleep 0.1 i=`{expr $i + 1} } kill -TERM $pid wait $pid if(! test -f $tmp/done.seen) fail signal-delay-did-not-wait cleanup echo ok