[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [OSSTEST PATCH RFC 11/14] Introduce ts-xtf-run
On Thu, Aug 04, 2016 at 01:19:15PM +0100, Ian Jackson wrote: > Wei Liu writes ("[OSSTEST PATCH RFC 11/14] Introduce ts-xtf-run"): > > This is the main script for running XTF. It will first perform > > selftest, and then run each XTF test case as a substep. > > > > It does the following things: > > > > 1. Run self tests for individual environment and record the result. > > 2. Collect tests according to available environments. > > 3. Run the collected tests one by one. > > > > The script may exit early if it detects the test host is down or > > xtf-runner returns non-recognisable exit code. > ... > > + foreach my $e (split('\n', $output)) { > > + push @all_environments, $e > > + } > > Why not > push @all_environments, split /\n/, $output; > ? > > (NB split takes a pattern - a regexp - not a string. Your code > provides a literal string which is then used as a regexp.) > > (Another occurrence of this pattern, later.) > Ack. > > +# Call the runner on one test case, generate a substep for it in final test > > +# report. Return runner exit code to caller. May exit the script early if > > +# things go really bad. > > +sub do_one_test ($) { > > + my ($name) = @_; > > + my $tid = "xtf/$name"; > > + my $cmd = "xtf-runner $name"; > > + > > + substep_start($tid, $cmd); > > + my $output = target_cmd_output_root($ho, <<END, 600); > > + $runner $name 1>&2; echo \$\? > > +END > ^ this second \ is superfluous > > + my ($ret) = $output =~ /(\d+)/; > > die unless the pattern matches. Ack. > > This code seems to be lacking the error handling we discussed. In > particular, if target_cmd_output_root fails (because the dom0 > crashed), target_cmd_output_root will die. The script will exit > nonzero and the step will be left `running'. > > > + # If the host doesn't respond after a test case, always make this > > substep > > + # fail and exit the script early with 0 > > + my $msg = target_ping_check_up($ho); > > I think it would be better to use > target_cmd_output($ho, 'echo ok.'); > than target_ping_check_up. > > There are some kinds of failure which leave the host responding to > ping but not actually usefully alive. > > > + # If xtf result can't be recognised, always make this substep fail and > > exit > > + # the script early with status 0. > > + if (!xtf_result_defined($ret)) { > > + substep_finish($tid, "fail"); > > + exit 0; > > The lack of use of `eval' (and appropriate use of `die') has resulted > in a lot of explicit repetition of this error path. > > Please arrange that all problems which ought to cause "record step as > `fail' and run no more tests" are handled by: > > - having the code which detects the problem calling die > - that die being caught by a single eval instance > - the code after the eval handling all exceptions that way > I will see what I can do regarding this. I'm not very familiar with perl, will need to read some docs first. > Also there is a latent bug here. You have xtf_result_defined accept > exit statuses 1 and 2, but those are actually not defined exit > statuses for the xtf runner. FAOD, 1 and 2 are defined xtf exit statuses -- reserved for anything python interpreter related. But I think this is going to be moot because they are going to be mapped to fail anyway. > > I think that this would be best fixed by using something like this: > > +sub xtf_result_to_osstest_result ($) { > + my ($xret) = @_; > + > + return "pass" if $xret == 0; > + return "skip" if $xret == 3; > + return "fail" if $xret == 4; > + return "fail" if $xret == 5; > + die "xtf runner gave unexpected exit status $xret"; > +} > > (And, obviously, calling it within the eval.) > > Then you can abolish xtf_result_defined. > > And another thing: AFAICT there is nothing that prints the XTF exit > status. You need at least to report the numerical exit status; > ideally you would print some human-readable interpretation of it. > > The person reading the logs may not be familiar with osstest or xtf. > They ought to be told the xtf name for the exit status as well as the > osstest mapping of it. > The XTF exit status is already available in the log, as is the osstest result (in substep status line). I guess you want them on the same line? One logm would do. > > +# Run selftest for each environment, record the ones that are > > +# funtional to get maximum coverage. > ^c > > > +sub get_tests_list () { > > + foreach my $e (sort @environments) { > > + my $output = target_cmd_output_root($ho, <<END); > > + $runner --list $e --all --host > > +END > > + foreach my $t (split('\n', $output)) { > > + push @tests, $t > > + } > > It might be worth recording the environment for each test, for the > log, unless the xtf runner prints that. > It is encoded in test case name. Wei. > Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |