From 8abf2e5a40789ea6ea6ceb068ab290a152d783f1 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Fri, 9 Sep 2016 11:26:03 -0300 Subject: [PATCH] Bug 11921: (followup) Don't die on non-existent koha-conf.xml This patch wraps the XMLin call on an eval block. It also adds unit tests (mocked) for Koha::Config->read_from_file() Signed-off-by: Tomas Cohen Arazi Signed-off-by: Kyle M Hall --- Koha/Config.pm | 19 ++++++++++++++- t/Koha/Config.t | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 t/Koha/Config.t diff --git a/Koha/Config.pm b/Koha/Config.pm index 117c404ead..f89ffb9a33 100644 --- a/Koha/Config.pm +++ b/Koha/Config.pm @@ -34,7 +34,24 @@ my $INSTALLED_CONFIG_FNAME = '__KOHA_CONF_DIR__/koha-conf.xml'; # use C4::Context->config instead sub read_from_file { my ( $class, $file ) = @_; - return XMLin($file, keyattr => ['id'], forcearray => ['listen', 'server', 'serverinfo'], suppressempty => ''); + + return if not defined $file; + + my $xml; + eval { + $xml = XMLin( + $file, + keyattr => ['id'], + forcearray => ['listen', 'server', 'serverinfo'], + suppressempty => '' + ); + }; + + if ($@) { + warn "Error reading file $file"; + } + + return $xml; } # Koha's main configuration file koha-conf.xml diff --git a/t/Koha/Config.t b/t/Koha/Config.t new file mode 100644 index 0000000000..2363fdaf19 --- /dev/null +++ b/t/Koha/Config.t @@ -0,0 +1,62 @@ +#!/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 Test::More tests => 2; +use Test::MockModule; +use Test::Warn; + +use Carp; + +my $parsing_result = 'ok'; + +my $xml_simple = Test::MockModule->new('XML::Simple'); +$xml_simple->mock( + XMLin => sub { + if ( $parsing_result eq 'error' ) { + croak "Something"; + } else { + return "XML data"; + } + } +); + +use_ok('Koha::Config'); + +subtest 'read_from_file() tests' => sub { + + plan tests => 4; + + is( Koha::Config->read_from_file(undef), undef, + "Undef parameter makes function return undef"); + + $parsing_result = 'ok'; + + my $result = Koha::Config->read_from_file("SomeFile.xml"); + is( $result, 'XML data', 'File read correctly' ); + + $parsing_result = 'error'; + + warning_is + {$result = Koha::Config->read_from_file("SomeFile.xml")} + 'Error reading file SomeFile.xml', + 'File failing to read raises warning'; + is( $result, undef, 'Returns undef on error confition' ); +}; + +1; -- 2.39.5