|
From: <jgr...@us...> - 2003-07-13 04:01:38
|
Update of /cvsroot/popfile/engine/Test
In directory sc8-pr-cvs1:/tmp/cvs-serv29055/Test
Modified Files:
SimpleProxy.pm
Log Message:
Improved tests for the Proxy module
Index: SimpleProxy.pm
===================================================================
RCS file: /cvsroot/popfile/engine/Test/SimpleProxy.pm,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** SimpleProxy.pm 13 Jul 2003 02:40:35 -0000 1.1
--- SimpleProxy.pm 13 Jul 2003 04:01:35 -0000 1.2
***************
*** 37,46 ****
--- 37,62 ----
bless $self, $type;
+ $self->{child_} = \&child__;
$self->name( 'simple' );
+ $self->{send__} = '';
+ $self->{received__} = '';
+
return $self;
}
#----------------------------------------------------------------------------
+ # stop_server
+ #
+ # Stops the phony server
+ #----------------------------------------------------------------------------
+ sub stop_server
+ {
+ my ( $self ) = @_;
+
+ close $self->{remote_server__};
+ }
+
+ #----------------------------------------------------------------------------
# start_server
#
***************
*** 63,66 ****
--- 79,84 ----
$self->{remote_selector__} = new IO::Select( $self->{remote_server__} );
+
+ return defined( $self->{remote_server__} ) && defined( $self->{remote_selector__} );
}
***************
*** 78,81 ****
--- 96,101 ----
if ( defined( $self->{remote_client__} ) ) {
+ $self->log_( "service_server: remote client is connected" );
+
my $handle = $self->{remote_client__};
***************
*** 83,101 ****
while ( $self->{send__} =~ s/(.+)[\r\n]+// ) {
! print $handle "$1$eol";
! }
# If there's data available to read then read it into the received
if ( defined( $self->{remote_client_selector__}->can_read(0) ) ) {
! $self->{received__} .= <$handle>;
! $self->{received__} .= $eol;
}
} else {
if ( defined( $self->{remote_selector__}->can_read(0) ) ) {
$self->{remote_client__} = $self->{remote_server__}->accept();
$self->{remote_client_selector__} = new IO::Select( $self->{remote_client__} );
}
}
}
--- 103,183 ----
while ( $self->{send__} =~ s/(.+)[\r\n]+// ) {
! $self->tee_( $handle, "$1$eol" );
! }
# If there's data available to read then read it into the received
if ( defined( $self->{remote_client_selector__}->can_read(0) ) ) {
! my $line = <$handle>;
! $self->log_( "Phony server has received $line" );
! $self->{received__} .= $line;
}
} else {
+ $self->log_( "service_server: remote client is not connected" );
+
if ( defined( $self->{remote_selector__}->can_read(0) ) ) {
$self->{remote_client__} = $self->{remote_server__}->accept();
$self->{remote_client_selector__} = new IO::Select( $self->{remote_client__} );
+ my $handle = $self->{remote_client__};
+ if ( defined( $handle ) ) {
+ $self->tee_( $handle, "Welcome$eol" );
+ }
}
}
+ }
+
+ # ---------------------------------------------------------------------------------------------
+ #
+ # child__
+ #
+ # The worker method that is called when we get a good connection from a client all this
+ # does is proxy without ANY change between client and server
+ #
+ # $client - an open stream to a client
+ # $download_count - The unique download count for this session
+ #
+ # ---------------------------------------------------------------------------------------------
+ sub child__
+ {
+ my ( $self, $client, $download_count, $pipe ) = @_;
+
+ $self->log_( "Child started" );
+
+ # Connect to the simple server that
+
+ my $remote = $self->verify_connected_( 0, $client, 'localhost', 10000 );
+
+ if ( defined( $remote ) && $remote->connected ) {
+ $self->log_( "Child connected to server" );
+ } else {
+ $self->log_( "Child failed to connect to server" );
+ }
+
+ # Create two selectors so that we can see if the client or the remote
+ # have something to send and can echo between the two
+
+ my $remote_selector = new IO::Select( $remote );
+ my $client_selector = new IO::Select( $client );
+
+ while ( $client->connected ) {
+ if ( defined( $remote_selector->can_read(0) ) ) {
+ my $line = <$remote>;
+ if ( defined( $line ) ) {
+ $self->log_( "Echoing $line from remote to client" );
+ print $client $line;
+ } else {
+ last;
+ }
+ }
+ if ( defined( $client_selector->can_read(0) ) ) {
+ my $line = <$client>;
+ $self->log_( "Echoing $line from client to remote" );
+ print $remote $line;
+ }
+ }
+
+ $self->log_( "Child terminated" );
+ close $remote;
+ close $pipe;
}
|