run_tests.pl
95 lines
| 2.6 KiB
| text/plain
|
PerlLexer
/ tools / run_tests.pl
Jani Honkonen
|
r1134 | use Cwd; | ||
use Cwd 'abs_path'; | ||||
use File::Basename; | ||||
use File::Copy; | ||||
Jani Honkonen
|
r1151 | use feature "switch"; | ||
Jani Honkonen
|
r1203 | use lib 'tools'; | ||
Jani Honkonen
|
r1134 | use Jobs; | ||
# read command line params | ||||
my $jobname = shift; | ||||
# read ini file | ||||
my $inifile = File::Basename::dirname($0) . "/jobs.ini"; | ||||
my %job = Jobs::get($inifile, $jobname); | ||||
Jani Honkonen
|
r1136 | # set/get paths | ||
Jani Honkonen
|
r1135 | my $root_path = abs_path(); | ||
Jani Honkonen
|
r1981 | my $bin_path = "$root_path/bin/" . $job{'Config'} . "/"; | ||
Jani Honkonen
|
r1136 | my $reports_path = "test-reports"; | ||
# create reports path | ||||
Jani Honkonen
|
r1137 | mkdir $reports_path; | ||
Jani Honkonen
|
r1135 | |||
Jani Honkonen
|
r1151 | # setup environment for running tests | ||
given ($job{'Platform'}) { | ||||
Jani Honkonen
|
r2079 | |||
Tero Ahola
|
r2033 | when ("Win7") { | ||
# Add qtdir to path | ||||
$ENV{'PATH'} .= ";" . $job{'QtDir'} . "\\bin"; | ||||
# replace / -> \ | ||||
$ENV{'PATH'} =~ s/\//\\/g; | ||||
} | ||||
when ("Linux") { | ||||
# Add qtdir to path | ||||
$ENV{'PATH'} = $job{'QtDir'} . "/bin:" . $ENV{'PATH'}; | ||||
# If this is not set we get "cannot connect to X server" errors | ||||
$ENV{'DISPLAY'} = ":0.0"; | ||||
} | ||||
when ("Mac") { | ||||
# Set QML_IMPORT_PATH point to QML plugin dir | ||||
$ENV{'QML_IMPORT_PATH'} = $bin_path; | ||||
} | ||||
Jani Honkonen
|
r2079 | } | ||
Jani Honkonen
|
r1136 | |||
Jani Honkonen
|
r1134 | # Go through all the files in the test folder | ||
Jani Honkonen
|
r1136 | # autotest is an executable beginning with "tst_" | ||
Jani Honkonen
|
r1151 | my $script_exit_status = 0; | ||
Jani Honkonen
|
r1137 | opendir (TESTAPPDIR, "$bin_path") or die "Couldn't open test app dir"; | ||
Jani Honkonen
|
r1134 | @files = <TESTAPPDIR>; | ||
while ($testapp = readdir TESTAPPDIR) { | ||||
if (index($testapp, "tst_") == 0) { | ||||
Jani Honkonen
|
r1137 | if (-x "$bin_path$testapp") { | ||
Jani Honkonen
|
r1136 | my $status = executeTestApp($testapp); | ||
Jani Honkonen
|
r2079 | if ($status != 0) { | ||
$script_exit_status = $status; | ||||
} | ||||
Jani Honkonen
|
r1134 | } else { | ||
#print "file $testapp not executable\n"; | ||||
} | ||||
} | ||||
} | ||||
closedir TESTAPPDIR; | ||||
Jani Honkonen
|
r2079 | # Do not return error codes for bamboo. | ||
# Bamboo will determine test failures by parsing the xml logs. | ||||
exit(0); | ||||
Jani Honkonen
|
r1134 | |||
Jani Honkonen
|
r1151 | |||
Jani Honkonen
|
r1136 | sub executeTestApp($) { | ||
my $testapp = $_[0]; | ||||
Jani Honkonen
|
r2079 | |||
# On OSX the actual test binary is in a sub folder | ||||
my $cmd_postfix = ""; | ||||
if ($^O eq "darwin") { | ||||
$cmd_postfix = "/Contents/MacOS/$testapp"; | ||||
$cmd_postfix = substr($cmd_postfix, 0, rindex($cmd_postfix, ".app")); | ||||
} | ||||
Jani Honkonen
|
r1137 | my $cmd = "$bin_path$testapp$cmd_postfix -xunitxml -o $reports_path/$testapp.xml"; | ||
Jani Honkonen
|
r1136 | print "executing: $cmd\n"; | ||
Jani Honkonen
|
r1137 | system($cmd); | ||
Jani Honkonen
|
r2079 | |||
# From http://perldoc.perl.org/perlvar.html about $?: | ||||
# The upper eight bits reflect specific error conditions encountered by the | ||||
Jani Honkonen
|
r1137 | # program (the program's exit() value). The lower eight bits reflect | ||
# mode of failure, like signal death and core dump information. | ||||
Jani Honkonen
|
r2079 | # See wait(2) for details. | ||
Jani Honkonen
|
r1134 | my $exit_status = $? >> 8; | ||
Jani Honkonen
|
r1137 | print "\texit status: $exit_status\n"; | ||
Jani Honkonen
|
r2079 | return $exit_status; | ||
Jani Honkonen
|
r1134 | } | ||