#! /usr/bin/perl # # tests Params::Validate::Checks::Net ip_address and public_ip_address checks # do what's required use warnings; use strict; use Test::More tests => 14; use Test::Exception; BEGIN { use_ok 'Params::Validate::Checks', qw or die "Loading Params::Validate::Checks failed"; use_ok 'Params::Validate::Checks::Net' or die "Loading Params::Validate::Checks failed"; }; sub ping { my %arg = validate @_, {server => {as 'ip_address'}}; $arg{server}; } lives_and { is ping(server => '212.69.37.168'), '212.69.37.168' } 'allows public IP address'; lives_and { is ping(server => '10.0.0.2'), '10.0.0.2' } 'allows private IP address'; throws_ok { ping(server => 'www.stgeorgescrypt.org.uk') } qr/did not pass the 'ip_address' callback/, 'complains at hostname instead of IP address'; throws_ok { ping(server => '100.200.256.1') } qr/did not pass the 'ip_address' callback/, 'complains at IP address with component over 255'; throws_ok { ping(server => '201.202.203') } qr/did not pass the 'ip_address' callback/, 'complains at IP address with only 3 components'; throws_ok { ping(server => '111.112.113.114.115') } qr/did not pass the 'ip_address' callback/, 'complains at IP address with 5 components'; sub log_request { my %arg = validate @_, {source => {as 'public_ip_address'}}; $arg{source}; } lives_and { is log_request(source => '212.69.37.168'), '212.69.37.168' } 'allows public IP address'; throws_ok { log_request(source => '10.0.0.2') } qr/did not pass the 'public_ip_address' callback/, 'complains at private IP address'; throws_ok { log_request(source => 'www.stgeorgescrypt.org.uk') } qr/did not pass the 'public_ip_address' callback/, 'complains at hostname instead of IP address'; throws_ok { log_request(source => '100.200.256.1') } qr/did not pass the 'public_ip_address' callback/, 'complains at IP address with component over 255'; throws_ok { log_request(source => '201.202.203') } qr/did not pass the 'public_ip_address' callback/, 'complains at IP address with only 3 components'; throws_ok { log_request(source => '111.112.113.114.115') } qr/did not pass the 'public_ip_address' callback/, 'complains at IP address with 5 components';