From f7b40e05ef53b26af14b8d0cacfdbcd2c58d40af Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Wed, 18 Nov 2020 17:20:38 +0100 Subject: [PATCH] Bug 26031: Remove www/search_utf8.t Those tests are not reliable and fail randomly and we did not find the root of the problem. I am in favour of removing them, at least for now. --- t/db_dependent/www/search_utf8.t | 371 ------------------------------- 1 file changed, 371 deletions(-) delete mode 100755 t/db_dependent/www/search_utf8.t diff --git a/t/db_dependent/www/search_utf8.t b/t/db_dependent/www/search_utf8.t deleted file mode 100755 index 499e6181cc..0000000000 --- a/t/db_dependent/www/search_utf8.t +++ /dev/null @@ -1,371 +0,0 @@ -#!/usr/bin/perl - -# This file is part of Koha. -# -# Koha is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# Koha is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Koha; if not, see . - -use Modern::Perl; - -use utf8; -use Test::More; #See plan tests => \d+ below -use Test::WWW::Mechanize; -use Data::Dumper; -use XML::Simple; -use JSON; -use File::Basename; -use File::Path; -use File::Spec; -use File::Temp qw/ tempdir /; -use POSIX; -use Encode; -use URI::Escape; - -use C4::Context; - -my $testdir = File::Spec->rel2abs( dirname(__FILE__) ); -# global variables that will be used when forking -our $zebra_pid; -our $indexer_pid; -our $datadir = tempdir();; - -my $koha_conf = $ENV{KOHA_CONF}; -my $xml = XMLin($koha_conf); - -my $marcflavour = C4::Context->preference('marcflavour') || 'MARC21'; - -# For the purpose of this test, we can reasonably take MARC21 and NORMARC to be the same -my $file1 = - $marcflavour eq 'UNIMARC' - ? "$testdir/data/unimarcutf8record.mrc" - : "$testdir/data/marc21utf8record.mrc"; - -my $file2 = - $marcflavour eq 'UNIMARC' - ? "$testdir/data/unimarclatin1utf8rec.mrc" - : "$testdir/data/marc21latin1utf8rec.mrc"; - -my $file3 = - $marcflavour eq 'UNIMARC' - ? "$testdir/data/unimarcutf8supprec.mrc" - : "$testdir/data/marc21utf8supprec.mrc"; - -my $user = $ENV{KOHA_USER} || $xml->{config}->{user}; -my $password = $ENV{KOHA_PASS} || $xml->{config}->{pass}; -my $intranet = $ENV{KOHA_INTRANET_URL}; -my $opac = $ENV{KOHA_OPAC_URL}; - - -# test KOHA_INTRANET_URL is set -if ( not $intranet ) { - plan skip_all => "Tests skip. You must set env. variable KOHA_INTRANET_URL to do tests\n"; -} -# test KOHA_OPAC_URL is set -elsif ( not $opac ) { - plan skip_all => "Tests skip. You must set env. variable KOHA_OPAC_URL to do tests\n"; -} -else { - plan tests => 99; -} - -$intranet =~ s#/$##; -$opac =~ s#/$##; - -#-------------------------------- Test with greek and corean chars; -# launch the zebra saerch process -launch_zebra( $datadir, $koha_conf ); -if ( not defined $zebra_pid ) { - plan skip_all => "Tests skip. Error starting Zebra Server to do those tests\n"; -} -# launch the zebra index process -launch_indexer( ); -if ( not defined $indexer_pid ) { - plan skip_all => "Tests skip. Error starting the indexer daemon to do those tests\n"; -} - -my $utf8_reg1 = qr/学協会. μμ/; -test_search($file1,'Αθήνα', 'deuteros', $utf8_reg1); - - -#--------------------------------- Test with only utf-8 chars in the latin-1 range; -launch_zebra( $datadir, $koha_conf ); -if ( not defined $zebra_pid ) { - plan skip_all => "Tests skip. Error starting Zebra Server to do those tests\n"; -} -launch_indexer( ); -if ( not defined $indexer_pid ) { - plan skip_all => "Tests skip. Error starting the indexer daemon to do those tests\n"; -} -my $utf8_reg2 = qr/Tòmas/; -test_search($file2,'Ramòn', 'Tòmas',$utf8_reg2); - -#--------------------------------- Test with supplementary utf-8 chars; -launch_zebra( $datadir, $koha_conf ); -if ( not defined $zebra_pid ) { - plan skip_all => "Tests skip. Error starting Zebra Server to do those tests\n"; -} -launch_indexer( ); -if ( not defined $indexer_pid ) { - plan skip_all => "Tests skip. Error starting the indexer daemon to do those tests\n"; -} -my $utf8_reg3 = qr/😀/; -test_search($file3, "𠻺tomasito𠻺", 'A tiny record', $utf8_reg3); - -sub test_search{ - #Params - my $file = $_[0]; - my $publisher = $_[1]; - my $search_key = $_[2]; - my $utf8_reg = $_[3]; - - my $agent = Test::WWW::Mechanize->new( autocheck => 1 ); - my $jsonresponse; - - # -------------------------------------------------- LOAD RECORD - - $agent->get_ok( "$intranet/cgi-bin/koha/mainpage.pl", 'connect to intranet' ); - $agent->form_name('loginform'); - $agent->field( 'password', $password ); - $agent->field( 'userid', $user ); - $agent->field( 'branch', '' ); - $agent->click_ok( '', 'login to staff interface' ); - - $agent->get_ok( "$intranet/cgi-bin/koha/mainpage.pl", 'load main page' ); - - $agent->follow_link_ok( { url_regex => qr/tools-home/i }, 'open tools module' ); - $agent->follow_link_ok( { text => 'Stage MARC records for import' }, - 'go to stage MARC' ); - - $agent->post( - "$intranet/cgi-bin/koha/tools/upload-file.pl?temp=1", - [ 'fileToUpload' => [$file], ], - 'Content_Type' => 'form-data', - ); - ok( $agent->success, 'uploaded file' ); - - $jsonresponse = decode_json $agent->content(); - is( $jsonresponse->{'status'}, 'done', 'upload succeeded' ); - my $fileid = $jsonresponse->{'fileid'}; - - $agent->get_ok( "$intranet/cgi-bin/koha/tools/stage-marc-import.pl", - 'reopen stage MARC page' ); - $agent->submit_form_ok( - { - form_number => 5, - fields => { - 'uploadedfileid' => $fileid, - 'nomatch_action' => 'create_new', - 'overlay_action' => 'replace', - 'item_action' => 'always_add', - 'matcher' => '', - 'comments' => '', - 'encoding' => 'utf8', - 'parse_items' => '1', - 'runinbackground' => '1', - 'record_type' => 'biblio' - } - }, - 'stage MARC' - ); - - $jsonresponse = decode_json $agent->content(); - my $jobID = $jsonresponse->{'jobID'}; - ok( $jobID, 'have job ID' ); - - my $completed = 0; - - # if we haven't completed the batch in two minutes, it's not happening - for my $counter ( 1 .. 24 ) { - $agent->get( - "$intranet/cgi-bin/koha/tools/background-job-progress.pl?jobID=$jobID" - ); # get job progress - $jsonresponse = decode_json $agent->content(); - if ( $jsonresponse->{'job_status'} eq 'completed' ) { - $completed = 1; - last; - } - warn( - ( - $jsonresponse->{'job_size'} - ? floor( - 100 * $jsonresponse->{'progress'} / $jsonresponse->{'job_size'} - ) - : '100' - ) - . "% completed" - ); - sleep 5; - } - is( $jsonresponse->{'job_status'}, 'completed', 'job was completed' ); - - $agent->get_ok( - "$intranet/cgi-bin/koha/tools/stage-marc-import.pl", - 'reopen stage MARC page at end of upload' - ); - $agent->submit_form_ok( - { - form_number => 5, - fields => { - 'uploadedfileid' => $fileid, - 'nomatch_action' => 'create_new', - 'overlay_action' => 'replace', - 'item_action' => 'always_add', - 'matcher' => '1', - 'comments' => '', - 'encoding' => 'utf8', - 'parse_items' => '1', - 'runinbackground' => '1', - 'completedJobID' => $jobID, - 'record_type' => 'biblio' - } - }, - 'stage MARC' - ); - - $agent->follow_link_ok( { text => 'Manage staged records' }, 'view batch' ); - - - $agent->form_number(6); - $agent->field( 'framework', '' ); - $agent->click_ok( 'mainformsubmit', "imported records into catalog" ); - my $webpage = $agent->{content}; - - $webpage =~ /(.*.*?)(\d{1,})(.*<\/title>)/sx; - my $id_batch = $2; - my $id_bib_number = GetBiblionumberFromImport($id_batch); - - # wait enough time for the indexer - sleep 10; - - # --------------------------------- TEST INTRANET SEARCH - - - $agent->get_ok( "$intranet/cgi-bin/koha/catalogue/search.pl" , "got search on intranet"); - $agent->form_number(5); - $agent->field('idx', 'kw'); - $agent->field('q', $search_key); - $agent->click(); - my $intra_text = $agent->text() ; - my $diag = sub { - my $pref = 'XSLTResultsDisplay'; - my $xslt_file = C4::Context->preference('marcflavour') . 'slim2intranetResults.xsl'; - my $xslt_filepath = C4::XSLT::_get_best_default_xslt_filename( C4::Context->config('intrahtdocs'), C4::Context->preference("template"), 'en', $xslt_file ); - return sprintf( "===DIAG===\n%s is %s\n%s %s\n==========", $pref, C4::Context->preference($pref), $xslt_filepath, ( -f $xslt_filepath ? 'exists' : 'does not exist' )); - }; - - like( $intra_text, qr|Publication details: $publisher|, ) or diag($diag->()); - - $agent->get_ok( "$intranet/cgi-bin/koha/catalogue/search.pl" , "got search on intranet"); - $agent->form_number(5); - $agent->field('idx', 'kw'); - $agent->field('q', $publisher); - $agent->click(); - $intra_text = $agent->text(); - - like( $intra_text, qr|Publication details: $publisher|, ); - my $expected_base = q|search.pl\?advsearch=1&idx=kw&q=| . uri_escape_utf8( $publisher ); - $agent->base_like(qr|$expected_base|, ); - - ok ( ( length(Encode::encode('UTF-8', $intra_text)) != length($intra_text) ) , 'UTF-8 are multi-byte. Good') ; - ok ($intra_text =~ $utf8_reg, 'UTF-8 chars are correctly present. Good'); - # -------------------------------------------------- TEST ON OPAC - - $agent->get_ok( "$opac" , "got opac"); - $agent->form_name('searchform'); - $agent->field( 'q', $search_key ); - $agent->field( 'idx', '' ); - $agent->click( ); - my $opac_text = $agent->text() ; - like( $opac_text, qr|Publication details: $publisher|, ); - - $agent->get_ok( "$opac" , "got opac"); - $agent->form_name('searchform'); - $agent->field('q', $publisher); - $agent->field( 'idx', '' ); - $agent->click(); - $opac_text = $agent->text(); - - like( $opac_text, qr|Publication details: $publisher|, ); - $expected_base = q|opac-search.pl\?(idx=&)?q=| . uri_escape_utf8( $publisher ); - $agent->base_like(qr|$expected_base|, ); - # Test added on BZ 14909 in addition to making the empty idx= optional - # in the previous regex - $agent->base_unlike( qr|idx=\w+|, 'Base does not contain an idx' ); - - - ok ( ( length(Encode::encode('UTF-8', $opac_text)) != length($opac_text) ) , 'UTF-8 are multi-byte. Good') ; - ok ($opac_text =~ $utf8_reg, 'UTF-8 chars are correctly present. Good'); - - #-------------------------------------------------- REVERT - - $agent->get_ok( "$intranet/cgi-bin/koha/tools/manage-marc-import.pl", 'view and clean batch' ); - $agent->form_name('clean_batch_'.$id_batch); - $agent->click(); - $agent->get_ok( "$intranet/cgi-bin/koha/catalogue/detail.pl?biblionumber=$id_bib_number", 'biblio on intranet' ); - $agent->get_ok( "$intranet/cgi-bin/koha/cataloguing/addbiblio.pl?op=delete&biblionumber=$id_bib_number", 'biblio deleted' ); - - # clean - cleanup(); -} - - -# function that launches the zebra daemon -sub launch_zebra { - - my ( $datadir, $koha_conf ) = @_; - - $zebra_pid = fork(); - if ( $zebra_pid == 0 ) { - exec("zebrasrv -f $koha_conf -v none,request -l $datadir/zebra.log"); - exit; - } - sleep( 1 ); -} - -sub launch_indexer { - - my $rootdir = dirname(__FILE__) . '/../../../'; - my $rebuild_zebra = "$rootdir/misc/migration_tools/rebuild_zebra.pl"; - - $indexer_pid = fork(); - - if ( $indexer_pid == 0 ) { - exec("$rebuild_zebra -daemon -sleep 5"); - exit; - } - sleep( 1 ); -} - -sub cleanup { - - kill 9, $zebra_pid if defined $zebra_pid; - kill 9, $indexer_pid if defined $indexer_pid; - # Clean up the Zebra files since the child process was just shot - rmtree $datadir; - -} - -sub GetBiblionumberFromImport{ - my ( $batch_id) = @_; - use C4::ImportBatch; - my $data = C4::ImportBatch::GetImportRecordsRange($batch_id, '', '', undef, - { order_by => 'import_record_id', order_by_direction => 'DESC' }); - my $biblionumber = $data->[0]->{'matched_biblionumber'}; - - return $biblionumber; -} - -END { - cleanup(); -}; - -- 2.20.1