Skip to content

Commit

Permalink
ktest: Add OVERRIDE keyword to DEFAULTS section
Browse files Browse the repository at this point in the history
The OVERRIDE keyword will allow options defined in the given
DEFAULTS section to override options defined in previous DEFAULT
sections.

Normally, options will error if they were previous defined.
The OVERRIDE keyword allows options that have been previously
defined to be changed in the given section.

Note, the same option can not be defined in the same DEFAULT section
even if that section is marked as OVERRIDE.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
  • Loading branch information
Steven Rostedt authored and Steven Rostedt committed Oct 17, 2011
1 parent 0050b6b commit 3d1cc41
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 8 deletions.
37 changes: 29 additions & 8 deletions tools/testing/ktest/ktest.pl
Original file line number Diff line number Diff line change
Expand Up @@ -337,10 +337,17 @@ sub process_variables {
}

sub set_value {
my ($lvalue, $rvalue) = @_;
my ($lvalue, $rvalue, $override, $overrides, $name) = @_;

if (defined($opt{$lvalue})) {
die "Error: Option $lvalue defined more than once!\n";
if (!$override || defined(${$overrides}{$lvalue})) {
my $extra = "";
if ($override) {
$extra = "In the same override section!\n";
}
die "$name: $.: Option $lvalue defined more than once!\n$extra";
}
${$overrides}{$lvalue} = $rvalue;
}
if ($rvalue =~ /^\s*$/) {
delete $opt{$lvalue};
Expand Down Expand Up @@ -430,6 +437,9 @@ sub __read_config {
my $test_case = 0;
my $if = 0;
my $if_set = 0;
my $override = 0;

my %overrides;

while (<$in>) {

Expand All @@ -443,6 +453,7 @@ sub __read_config {

my $old_test_num;
my $old_repeat;
$override = 0;

if ($type eq "TEST_START") {

Expand All @@ -468,10 +479,20 @@ sub __read_config {
$skip = 0;
}

if ($rest =~ /\s+ITERATE\s+(\d+)(.*)$/) {
$repeat = $1;
$rest = $2;
$repeat_tests{"$test_num"} = $repeat;
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 =~ /\sIF\s+(.*)/) {
Expand Down Expand Up @@ -573,10 +594,10 @@ sub __read_config {
}

if ($default || $lvalue =~ /\[\d+\]$/) {
set_value($lvalue, $rvalue);
set_value($lvalue, $rvalue, $override, \%overrides, $name);
} else {
my $val = "$lvalue\[$test_num\]";
set_value($val, $rvalue);
set_value($val, $rvalue, $override, \%overrides, $name);

if ($repeat > 1) {
$repeats{$val} = $repeat;
Expand Down
15 changes: 15 additions & 0 deletions tools/testing/ktest/sample.conf
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,21 @@
# the same option name under the same test or as default
# ktest will fail to execute, and no tests will run.
#
# DEFAULTS OVERRIDE
#
# Options defined in the DEFAULTS section can not be duplicated
# even if they are defined in two different DEFAULT sections.
# This is done to catch mistakes where an option is added but
# the previous option was forgotten about and not commented.
#
# The OVERRIDE keyword can be added to a section to allow this
# section to override other DEFAULT sections values that have
# been defined previously. It will only override options that
# have been defined before its use. Options defined later
# in a non override section will still error. The same option
# can not be defined in the same section even if that section
# is marked OVERRIDE.
#
#
#
# Both TEST_START and DEFAULTS sections can also have the IF keyword
Expand Down

0 comments on commit 3d1cc41

Please sign in to comment.