Test::TCP man page on Fedora

Man page or keyword search:  
man Server   31170 pages
apropos Keyword Search (all sections)
Output format
Fedora logo
[printable version]

Test::TCP(3)	      User Contributed Perl Documentation	  Test::TCP(3)

NAME
       Test::TCP - testing TCP program

SYNOPSIS
	   use Test::TCP;

	   my $server = Test::TCP->new(
	       code => sub {
		   my $port = shift;
		   ...
	       },
	   );
	   my $client = MyClient->new(host => '127.0.0.1', port => $server->port);
	   undef $server; # kill child process on DESTROY

       Using memcached:

	   use Test::TCP;

	   my $memcached = Test::TCP->new(
	       code => sub {
		   my $port = shift;

		   exec $bin, '-p' => $port;
		   die "cannot execute $bin: $!";
	       },
	   );
	   my $memd = Cache::Memcached->new({servers => ['127.0.0.1:' . $memcached->port]});
	   ...

       And functional interface is available:

	   use Test::TCP;
	   test_tcp(
	       client => sub {
		   my ($port, $server_pid) = @_;
		   # send request to the server
	       },
	       server => sub {
		   my $port = shift;
		   # run server
	       },
	   );

DESCRIPTION
       Test::TCP is test utilities for TCP/IP programs.

METHODS
       empty_port
	       my $port = empty_port();

	   Get the available port number, you can use.

	   Normally, empty_port() finds empty port number from 49152..65535.
	   See http://www.iana.org/assignments/port-numbers
	   <http://www.iana.org/assignments/port-numbers>

	   But you want to use another range, use a following form:

	       # 5963..65535
	       my $port = empty_port(5963);

       test_tcp
	   Functional interface.

	       test_tcp(
		   client => sub {
		       my $port = shift;
		       # send request to the server
		   },
		   server => sub {
		       my $port = shift;
		       # run server
		   },
		   # optional
		   port => 8080
	       );

       wait_port
	       wait_port(8080);

	   Waits for a particular port is available for connect.

OO-ish interface
       my $server = Test::TCP->new(%args);
	   Create new instance of Test::TCP.

	   Arguments are following:

	   $args{auto_start}: Boolean
	       Call "$server->start()" after create instance.

	       Default: true

	   $args{code}: CodeRef
	       The callback function. Argument for callback function is:
	       "$code->($pid)".

	       This parameter is required.

       $server->start()
	   Start the server process. Normally, you don't need to call this
	   method.

       $server->stop()
	   Stop the server process.

       my $pid = $server->pid();
	   Get the pid of child process.

       my $port = $server->port();
	   Get the port number of child process.

FAQ
       How to invoke two servers?
	   You can call test_tcp() twice!

	       test_tcp(
		   client => sub {
		       my $port1 = shift;
		       test_tcp(
			   client => sub {
			       my $port2 = shift;
			       # some client code here
			   },
			   server => sub {
			       my $port2 = shift;
			       # some server2 code here
			   },
		       );
		   },
		   server => sub {
		       my $port1 = shift;
		       # some server1 code here
		   },
	       );

	   Or use OO-ish interface instead.

	       my $server1 = Test::TCP->new(code => sub {
		   my $port1 = shift;
		   ...
	       });
	       my $server2 = Test::TCP->new(code => sub {
		   my $port2 = shift;
		   ...
	       });

	       # your client code here.
	       ...

       How do you test server program written in other languages like
       memcached?
	   You can use "exec()" in child process.

	       use strict;
	       use warnings;
	       use utf8;
	       use Test::More;
	       use Test::TCP 1.08;
	       use File::Which;

	       my $bin = scalar which 'memcached';
	       plan skip_all => 'memcached binary is not found' unless defined $bin;

	       my $memcached = Test::TCP->new(
		   code => sub {
		       my $port = shift;

		       exec $bin, '-p' => $port;
		       die "cannot execute $bin: $!";
		   },
	       );

	       use Cache::Memcached;
	       my $memd = Cache::Memcached->new({servers => ['127.0.0.1:' . $memcached->port]});
	       $memd->set(foo => 'bar');
	       is $memd->get('foo'), 'bar';

	       done_testing;

AUTHOR
       Tokuhiro Matsuno <tokuhirom@gmail.com>

THANKS TO
       kazuhooku

       dragon3

       charsbar

       Tatsuhiko Miyagawa

       lestrrat

SEE ALSO
LICENSE
       This library is free software; you can redistribute it and/or modify it
       under the same terms as Perl itself.

perl v5.14.3			  2012-10-25			  Test::TCP(3)
[top]

List of man pages available for Fedora

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net