[LTP] [PATCH 1/4] testcases/lib/run_tests.sh: Check expected results

Petr Vorel pvorel@suse.cz
Tue Dec 10 07:59:54 CET 2024


> On Mon, Dec 9, 2024 at 6:14 PM Petr Vorel <pvorel@suse.cz> wrote:

> > Hi Li, all,

> > ...
> > > We could add a blank line print here to make the output better readable.

> > >   echo ""

> > > +               echo "*** Running '$test' (exp: $(tst_mask2flag $exp))
> > ***"

> > +1


> > > > +               $test
> > > > +               rc=$?
> > > > +               if [ $rc = 127 ]; then
> > > > +                       echo "Test '$test' not found, maybe out-of-tree
> > > > build and unset builddir?" >&2
> > > > +                       exit 1
> > > > +               elif [ $rc = 2 -a $WHITELIST_GITHUB = 1 -a
> > > > "$GITHUB_ACTIONS" ]; then


> > > If one or more variables used in the conditional test are
> > > either unset or empty, that will lead to invalid syntax.

> > > So I would suggest using [ ... ] and &&:

> > >   elif [ $rc = 2 ] && [ $WHITELIST_GITHUB = 1 ] && [ -n "$GITHUB_ACTIONS"
> > > ]; then

> > Good point. Or maybe just quote?

> > elif [ "$rc" = 2 -a "$WHITELIST_GITHUB" = 1 -a "$GITHUB_ACTIONS" ]; then


> This can work,  but using -a can lead to ambiguous or hard-to-diagnose
> behavior. A better approach would be to replace -a with &&.

> Maybe the best way is:

> elif [ "$rc" = 2 ] && [ "$WHITELIST_GITHUB" = 1 ] && [ -n "$GITHUB_ACTIONS"
> ]; then

Thank you for pointing this, I'll use this.

I thought -a takes precedence to -o like in C, i.e. [ foo -a bar -o baz ] is the
equivalent of [ foo ] && [ bar ] || baz.

But now I see in man test(1):

	Binary -a and -o are ambiguous.  Use 'test EXPR1 && test EXPR2' or 'test EXPR1 || test EXPR2' instead.

I also wonder if any -a or -o is ambiguous. Or just combination of both. Because
we have some "-a" and "-o" usage in tst_test.sh. Should we transform them?

	if [ $TST_BROK -gt 0 -o $TST_FAIL -gt 0 -o $TST_WARN -gt 0 ]; then
		_tst_check_security_modules
	fi

	if [ "$TST_NEEDS_TMPDIR" = 1 -a -n "$TST_TMPDIR" ]; then
		rm -r "$TST_TMPDIR"
		[ "$TST_TMPDIR_RHOST" = 1 ] && tst_cleanup_rhost
	fi

	NOTE: this one I'm going to change in upcoming fix of the TBROK => TWARN evaluation
	# TBROK => TWARN on cleanup or exit
	if [ "$res" = TBROK ] && [ "$TST_DO_EXIT" = 1 -o -z "$TST_DO_CLEANUP" -a -n "$TST_CLEANUP" ]; then
		tst_res TWARN "$@"
		TST_DO_CLEANUP=
		return
	fi

Kind regards,
Petr

> > Kind regards,
> > Petr


More information about the ltp mailing list