Commit aef5cb18 authored by Max Kanat-Alexander's avatar Max Kanat-Alexander

Bug 579695: Make xt/search.t do substring tests using a more consistent

substring length, thus fixing an intermittent failure that would show up when searching the cf_multi_select field. r=mkanat, a=mkanat (module owner)
parent 7b5e8372
...@@ -304,7 +304,7 @@ sub create_keyword { ...@@ -304,7 +304,7 @@ sub create_keyword {
sub create_user { sub create_user {
my ($prefix) = @_; my ($prefix) = @_;
my $user_name = $prefix . '-' . random(10) . "@" . random(10) my $user_name = $prefix . '-' . random(15) . "@" . random(12)
. "." . random(3); . "." . random(3);
my $user_realname = $prefix . '-' . random(); my $user_realname = $prefix . '-' . random();
my $user = Bugzilla::User->create({ my $user = Bugzilla::User->create({
...@@ -376,7 +376,7 @@ sub _create_field_values { ...@@ -376,7 +376,7 @@ sub _create_field_values {
$values{'keywords'} = create_keyword($number)->name; $values{'keywords'} = create_keyword($number)->name;
foreach my $field qw(assigned_to qa_contact reporter cc) { foreach my $field qw(assigned_to qa_contact reporter cc) {
$values{$field} = create_user("$number-$field-")->login; $values{$field} = create_user("$number-$field")->login;
} }
my $classification = Bugzilla::Classification->create( my $classification = Bugzilla::Classification->create(
...@@ -417,7 +417,7 @@ sub _create_field_values { ...@@ -417,7 +417,7 @@ sub _create_field_values {
# "short_desc" as a word and matches it in every bug. # "short_desc" as a word and matches it in every bug.
my $value = "$number-$field" . random(); my $value = "$number-$field" . random();
if ($field eq 'bug_file_loc' or $field eq 'see_also') { if ($field eq 'bug_file_loc' or $field eq 'see_also') {
$value = "http://$value" . random(3) $value = "http://$value-" . random(3)
. "/show_bug.cgi?id=$number"; . "/show_bug.cgi?id=$number";
} }
$values{$field} = $value; $values{$field} = $value;
...@@ -441,8 +441,8 @@ sub _create_field_values { ...@@ -441,8 +441,8 @@ sub _create_field_values {
. ' ' . random(); . ' ' . random();
my @flags; my @flags;
my $setter = create_user("$number-setter"); my $setter = create_user("$number-setters.login_name");
my $requestee = create_user("$number-requestee"); my $requestee = create_user("$number-requestees.login_name");
$values{set_flags} = _create_flags($number, $setter, $requestee); $values{set_flags} = _create_flags($number, $setter, $requestee);
my $month = $for_create ? "12" : "02"; my $month = $for_create ? "12" : "02";
......
...@@ -48,6 +48,7 @@ our @EXPORT = qw( ...@@ -48,6 +48,7 @@ our @EXPORT = qw(
OR_SKIP OR_SKIP
PG_BROKEN PG_BROKEN
SKIP_FIELDS SKIP_FIELDS
SUBSTR_NO_FIELD_ADD
SUBSTR_SIZE SUBSTR_SIZE
TESTS TESTS
TESTS_PER_RUN TESTS_PER_RUN
...@@ -158,22 +159,35 @@ use constant USER_FIELDS => qw( ...@@ -158,22 +159,35 @@ use constant USER_FIELDS => qw(
); );
# For the "substr"-type searches, how short of a substring should # For the "substr"-type searches, how short of a substring should
# we use? # we use? The goal is to be shorter than the full string, but
# long enough to still be globally unique.
use constant SUBSTR_SIZE => 20; use constant SUBSTR_SIZE => 20;
# However, for some fields, we use a different size. # However, for some fields, we use a different size.
use constant FIELD_SUBSTR_SIZE => { use constant FIELD_SUBSTR_SIZE => {
alias => 12, alias => 11,
bug_file_loc => 30,
# Just the month and day. # Just the month and day.
deadline => -5, deadline => -5,
creation_ts => -8, creation_ts => -8,
delta_ts => -8, delta_ts => -8,
percentage_complete => 7,
work_time => 3, work_time => 3,
remaining_time => 3, remaining_time => 3,
see_also => 30, target_milestone => 15,
target_milestone => 12, longdesc => 25,
# Just the hour and minute.
FIELD_TYPE_DATETIME, -5,
}; };
# For most fields, we add the length of the name of the field plus
# the SUBSTR_SIZE specified above to determine how large of a substring
# we're going to use. However, for some fields, it doesn't make sense to
# add in their field name this way.
use constant SUBSTR_NO_FIELD_ADD => FIELD_TYPE_DATETIME, qw(
target_milestone remaining_time percentage_complete work_time
attachments.mimetype attachments.submitter attachments.filename
attachments.description flagtypes.name
);
################ ################
# Known Broken # # Known Broken #
################ ################
...@@ -364,9 +378,6 @@ use constant KNOWN_BROKEN => { ...@@ -364,9 +378,6 @@ use constant KNOWN_BROKEN => {
anyexact => { anyexact => {
percentage_complete => { contains => [2] }, percentage_complete => { contains => [2] },
}, },
anywordssubstr => {
percentage_complete => { contains => [2] },
},
'allwordssubstr-<1>' => { ALLWORDS_BROKEN }, 'allwordssubstr-<1>' => { ALLWORDS_BROKEN },
# flagtypes.name does not work here, probably because they all try to # flagtypes.name does not work here, probably because they all try to
...@@ -623,7 +634,7 @@ use constant BROKEN_NOT => { ...@@ -623,7 +634,7 @@ use constant BROKEN_NOT => {
"work_time" => { contains => [1, 2] }, "work_time" => { contains => [1, 2] },
}, },
'anywordssubstr-<1> <2>' => { 'anywordssubstr-<1> <2>' => {
percentage_complete => { contains => [1,3,4,5] }, percentage_complete => { contains => [1,2,3,4,5] },
FIELD_TYPE_MULTI_SELECT, { contains => [5] }, FIELD_TYPE_MULTI_SELECT, { contains => [5] },
}, },
casesubstring => { casesubstring => {
......
...@@ -461,13 +461,27 @@ sub _translate_value_for_bug { ...@@ -461,13 +461,27 @@ sub _translate_value_for_bug {
sub _substr_value { sub _substr_value {
my ($self, $value) = @_; my ($self, $value) = @_;
my $field = $self->field; my $field = $self->field;
my $type = $self->field_object->type;
my $substr_size = SUBSTR_SIZE; my $substr_size = SUBSTR_SIZE;
if (exists FIELD_SUBSTR_SIZE->{$field}) { if (exists FIELD_SUBSTR_SIZE->{$field}) {
$substr_size = FIELD_SUBSTR_SIZE->{$field}; $substr_size = FIELD_SUBSTR_SIZE->{$field};
} }
elsif (exists FIELD_SUBSTR_SIZE->{$type}) {
$substr_size = FIELD_SUBSTR_SIZE->{$type};
}
if ($substr_size > 0) { if ($substr_size > 0) {
return substr($value, 0, $substr_size); # The field name is included in every field value, and if it's
# long, it might take up the whole substring, and we don't want that.
if (!grep { $_ eq $field or $_ eq $type } SUBSTR_NO_FIELD_ADD) {
$substr_size += length($field);
}
my $string = substr($value, 0, $substr_size);
# Make percentage_complete substrings strings match integers uniquely,
# by searching for the full decimal number.
if ($field eq 'percentage_complete' and length($string) < $substr_size) {
$string .= ".000";
}
return $string;
} }
return substr($value, $substr_size); return substr($value, $substr_size);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment