Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
Net::Daemon::Test(3)  User Contributed Perl Documentation Net::Daemon::Test(3)

       Net::Daemon::Test - support functions for testing Net::Daemon servers

	   # This is the server, stored	in the file "servertask".
	   # Create a subclass of Net::Daemon::Test, which in turn is
	   # a subclass	of Net::Daemon
	   use Net::Daemon::Test ();
	   package MyDaemon;
	   @MyDaemon::ISA = qw(Net::Daemon::Test);

	   sub Run {
	       # Overwrite this	and other methods, as you like.

	   my $self = Net::Daemon->new(\%attr, \@options);
	   eval	{ $self->Bind()	};
	   if ($@) {
	       die "Server cannot bind:	$!";
	   eval	{ $self->Run() };
	   if ($@) {
	       die "Unexpected server termination: $@";

	   # This is the client, the real test script, note we call the
	   # "servertask" file below:
	   # Call the Child method to spawn a child. Don't forget to use
	   # the timeout option.
	   use Net::Daemon::Test ();

	   my($handle, $port) =	eval {
	       Net::Daemon::Test->Child(5, # Number of subtests
					'servertask', '--timeout', '20')
	   if ($@) {
	       print "not ok 1 $@\n";
	       exit 0;
	   print "ok 1\n";

	   # Real tests	following here

	   # Terminate the server

       This module is a	frame for creating test	scripts	of Net::Daemon based
       server packages,	preferrably using Test::Harness, but that's your

       A test consists of two parts: The client	part and the server part.  The
       test is executed	by the child part which	invokes	the server part, by
       spawning	a child	process	and invoking an	external Perl script.  (Of
       course we woultn't need this external file with fork(), but that's the
       best possibility	to make	the test scripts portable to Windows without
       requiring threads in the	test script.)

       The server part is a usual Net::Daemon application, for example a
       script like dbiproxy. The only difference is that it derives from
       Net::Daemon::Test and not from Net::Daemon, the main difference is that
       the Bind	method attempts	to allocate a port automatically. Once a port
       is allocated, the number	is stored in the file "ndtest.prt".

       After spawning the server process, the child will wait ten seconds
       (hopefully sufficient) for the creation of ndtest.prt.

   Server part
       Options Adds an option --timeout	to Net::Daemon:	The server's Run
	       method will die after at	most 20	seconds.

       Bind    (Instance method) This is mainly	the default Bind method, but
	       it attempts to find and allocate	a free port in two ways: First
	       of all, it tries	to call	Bind with port 0, most systems will
	       automatically choose a port in that case. If that seems to
	       fail, ports 30000-30049 are tried. We hope, one of these	will
	       succeed.	:-)

       Run     (Instance method) Overwrites the	Net::Daemon's method by	adding
	       a timeout.

       sub Run ($) {
	   my $self = shift;
	   $self->Run(); }

   Client part
       Child   (Class method) Attempts to spawn	a server process. The server
	       process is expected to create the file 'ndtest.prt' with	the
	       port number.

	       The method returns a process handle and a port number. The
	       process handle offers a method Terminate	that may later be used
	       to stop the server process.

	 Net::Daemon is	Copyright (C) 1998, Jochen Wiedmann
					    Am Eisteich	9
					    72555 Metzingen

					    Phone: +49 7123 14887

	 All rights reserved.

       You may distribute under	the terms of either the	GNU General Public
       License or the Artistic License,	as specified in	the Perl README	file.

       Net::Daemon(3), Test::Harness(3)

perl v5.32.0			  2011-03-01		  Net::Daemon::Test(3)


Want to link to this manual page? Use this URL:

home | help