summaryrefslogtreecommitdiffstats
path: root/tools/testing/ktest/ktest.pl
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2011-10-17 11:06:29 -0400
committerSteven Rostedt <rostedt@goodmis.org>2011-10-17 11:58:15 -0400
commita9f84424be8d12e8a84b9eac112cd1152587d437 (patch)
treed387036bbfb7cda150a3e0e1e7a778cbe1eb1364 /tools/testing/ktest/ktest.pl
parentac6974c76e66c2f9b8b8a23b974c5f3d94302e81 (diff)
ktest: Fix parsing of config section lines
The order for some of the keywords on a section line (TEST_START or DEFAULTS) does not really matter. Simply need to remove the keyword from the line as we process it and evaluate the next keyword in the line. By removing the keywords as we find them, we do not need to keep track of where on the line they were found. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'tools/testing/ktest/ktest.pl')
-rwxr-xr-xtools/testing/ktest/ktest.pl49
1 files changed, 31 insertions, 18 deletions
diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl
index 2a9d0420717..d292c2d8dfe 100755
--- a/tools/testing/ktest/ktest.pl
+++ b/tools/testing/ktest/ktest.pl
@@ -449,6 +449,7 @@ sub __read_config {
my $num_tests_set = 0;
my $skip = 0;
my $rest;
+ my $line;
my $test_case = 0;
my $if = 0;
my $if_set = 0;
@@ -465,6 +466,7 @@ sub __read_config {
my $type = $1;
$rest = $2;
+ $line = $2;
my $old_test_num;
my $old_repeat;
@@ -486,32 +488,28 @@ sub __read_config {
$default = 1;
}
- if ($rest =~ /\s+SKIP\b(.*)/) {
- $rest = $1;
+ # If SKIP is anywhere in the line, the command will be skipped
+ if ($rest =~ s/\s+SKIP\b//) {
$skip = 1;
} else {
$test_case = 1;
$skip = 0;
}
- if (!$skip) {
- if ($type eq "TEST_START") {
- if ($rest =~ /\s+ITERATE\s+(\d+)(.*)$/) {
- $repeat = $1;
- $rest = $2;
- $repeat_tests{"$test_num"} = $repeat;
- }
- } elsif ($rest =~ /\sOVERRIDE\b(.*)/) {
- # DEFAULT only
- $rest = $1;
- $override = 1;
- # Clear previous overrides
- %overrides = ();
+ if ($rest =~ s/\sELSE\b//) {
+ if (!$if) {
+ die "$name: $.: ELSE found with out matching IF section\n$_";
+ }
+ $if = 0;
+
+ if ($if_set) {
+ $skip = 1;
+ } else {
+ $skip = 0;
}
}
- if ($rest =~ /\sIF\s+(.*)/) {
- $rest = "";
+ if ($rest =~ s/\sIF\s+(.*)//) {
if (process_if($name, $1)) {
$if_set = 1;
} else {
@@ -520,9 +518,24 @@ sub __read_config {
$if = 1;
} else {
$if = 0;
+ $if_set = 0;
}
- if ($rest !~ /^\s*$/) {
+ if (!$skip) {
+ if ($type eq "TEST_START") {
+ if ($rest =~ s/\s+ITERATE\s+(\d+)//) {
+ $repeat = $1;
+ $repeat_tests{"$test_num"} = $repeat;
+ }
+ } elsif ($rest =~ s/\sOVERRIDE\b//) {
+ # DEFAULT only
+ $override = 1;
+ # Clear previous overrides
+ %overrides = ();
+ }
+ }
+
+ if (!$skip && $rest !~ /^\s*$/) {
die "$name: $.: Gargbage found after $type\n$_";
}