From fd55c77570ec2fa84147e36da5ed361214aa9ebc Mon Sep 17 00:00:00 2001 From: Chris Cormack Date: Wed, 18 Sep 2013 13:30:20 +1200 Subject: [PATCH] Working on extending the functionality and test suite. Parsing the xml using XML::Libxml and trapping errors Signed-off-by: Chris Cormack --- lib/NCIP.pm | 65 ++++++++++++++++++++++++++++++++++++++++++++--------- t/NCIP.t | 13 ++++++++++- 2 files changed, 67 insertions(+), 11 deletions(-) diff --git a/lib/NCIP.pm b/lib/NCIP.pm index 6bd9c58..b8bc2ce 100644 --- a/lib/NCIP.pm +++ b/lib/NCIP.pm @@ -1,34 +1,79 @@ package NCIP; use NCIP::Configuration; use Modern::Perl; +use XML::LibXML; +use Try::Tiny; + use base qw(Class::Accessor); +our $VERSION = '0.01'; + +=head1 NAME + + NCIP + +=head1 SYNOPSIS + + use NCIP; + my $nicp = NCIP->new($config_dir); + +=head1 FUNCTIONS + +=cut + sub new { - my $proto = shift; - my $class = ref $proto || $proto; + my $proto = shift; + my $class = ref $proto || $proto; my $config_dir = shift; - my $self = {}; - my $config = NCIP::Configuration->new($config_dir); + my $self = {}; + my $config = NCIP::Configuration->new($config_dir); $self->{config} = $config; return bless $self, $class; } +=head2 process_request() + + my $response = $ncip->process_request($xml); + +=cut + sub process_request { my $self = shift; - my $xml = shift; - + my $xml = shift; + my $request_type = $self->handle_initiation($xml); - my $response = " Hello There

Hello You Big JERK!

Who would take this book seriously if the first eaxample didn't say \"hello world\"? "; + unless ($request_type) { + + # We have invalid xml, or we can't figure out what kind of request this is + # Handle error here + } + my $response = +" Hello There

Hello You Big JERK!

Who would take this book seriously if the first eaxample didn't say \"hello world\"? "; return $response; } +=head2 handle_initiation + +=cut + sub handle_initiation { my $self = shift; - my $xml = shift; - - return('lookup_item'); + my $xml = shift; + my $dom; + try { + $dom = XML::LibXML->load_xml( string => $xml ); + } + catch { + warn "Invalid xml, caught error: $_"; + }; + if ($dom) { + return ('lookup_item'); + } + else { + return; + } } 1; diff --git a/t/NCIP.t b/t/NCIP.t index fd18414..74422cb 100644 --- a/t/NCIP.t +++ b/t/NCIP.t @@ -18,7 +18,7 @@ use strict; use warnings; -use Test::More tests => 3; # last test to print +use Test::More tests => 5; # last test to print use lib 'lib'; @@ -32,3 +32,14 @@ EOT ok( my $response = $ncip->process_request($xml), 'Process a request' ); +my $xmlbad = <<'EOT'; + +this is bad + + +EOT + +# handle_initiation is called as part of the process_request, but best to test +# anyway +ok( !$ncip->handle_initiation($xmlbad), 'Bad xml' ); +ok( $ncip->handle_initiation($xml), 'Good XML' ); -- 2.43.2