NAME
Net::FTP::Mock - test code using Net::FTP without having an FTP server
VERSION
version 0.103300
SYNOPSIS
use
Net::FTP::Mock (
localhost
=> {
username
=> {
password
=> {
active
=> 1,
root
=>
"t/remote_ftp/"
}},
},
ftp.work.
com
=> {
harry
=> {
god
=> {
active
=> 1,
root
=>
"t/other_remote_ftp/"
}},
},
);
# $ftp here actually is a Net::FTP::Mock object,
# but when inspected with isa() it happily claims to be Net::FTP
my
$ftp
= Net::FTP->new(
"ftp.work.com"
,
Debug
=> 0) or
die
"Cannot connect to some.host.name: $@"
;
# all of these do what you'd think they do, only instead of acting
# on a real ftp server, they act no the data provided via import
# and the local harddisk
$ftp
->login(
"harry"
,
'god'
) or
die
"Cannot login "
,
$ftp
->message;
$ftp
->get(
"that.file"
) or
die
"get failed "
,
$ftp
->message;
$ftp
->quit;
DESCRIPTION
Net::FTP::Mock is designed to make code using Net::FTP testable without having to set up actual FTP servers. When calling its import(), usually by way of use, you can pass it a hash detailing virtual servers, their accounts, as well as directories that those accounts map to on the local machine.
You can then interact with the Net::FTP::Mock object exactly as you would with a real one.
NOTE: This is a work in progress and much of Net::FTP's functionality is not yet emulated. If it behaves odd, look at the code or yell at me. Contributions on github are very welcome.
NAME
test code using Net::FTP without having an FTP server
METHODS
Net::FTP::new
Factory method that is implanted into Net::FTP's namespace and returns a Net::FTP::Mock object. Should behave exactly like Net::FTP's new() behaves.
servers
Class attribute that stores the servers hashref passed when the module is used.
Net::FTP::Mock->import( %server_details );
Blocks Net::FTP's namespace in %INC and prepares the servers to be emulated.
isa
Overrides isa to ensure that Moose's type checks recognize this as a Net::FTP object.
SUPPORTED NET::FTP METHODS
code
message
binary
get
quit
mdtm
size
login
ACKNOWLEDGEMENTS
Thanks to Tr@ffics and especially Jens Muskewitz for granting permission to release this module.
Many thanks to mst and rjbs who fielded my newbie questions in #moose and helped me figure out how to actually create the Mock object from Net::FTP's mainspace, as well as how to get the Mock object to masquerade as Net::FTP.
CONTRIBUTIONS
Since I'm not sure how much time i can devote to this, I'm happy about any help. The code is up on github and i'll accept any helping pull requests.
AUTHOR
Christian Walde <mithaldu@yahoo.de>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2010 by Christian Walde.
This is free software, licensed under:
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE, Version 2, December 2004