diff options
author | Chris Cleeland <chris.cleeland@gmail.com> | 2007-01-03 06:11:06 +0000 |
---|---|---|
committer | Chris Cleeland <chris.cleeland@gmail.com> | 2007-01-03 06:11:06 +0000 |
commit | 09ed767f524a0a9a410d1f40c78241227a92239f (patch) | |
tree | f0233c5e9e4cbe54ff54efe7254346ed9fd53ee9 /TAO/tests/Bug_2702_Regression | |
parent | e6defa8ce1ff560f95956be4f7b5482428de6592 (diff) | |
download | ATCD-09ed767f524a0a9a410d1f40c78241227a92239f.tar.gz |
ACE ChangeLogTag: Wed Jan 3 05:53:04 UTC 2007 Chris Cleeland <cleeland_c@ociweb.com>
TAO ChangeLogTag: Wed Jan 3 05:58:08 UTC 2007 Chris Cleeland <cleeland_c@ociweb.com>
M TAO/orbsvcs/orbsvcs/Notify/CosNotify_Service.h
M TAO/orbsvcs/orbsvcs/Notify/Any/PushConsumer.cpp
M TAO/orbsvcs/orbsvcs/Notify/POA_Helper.cpp
M TAO/orbsvcs/orbsvcs/Notify/Properties.h
M TAO/orbsvcs/orbsvcs/Notify/Sequence/SequencePushConsumer.cpp
M TAO/orbsvcs/orbsvcs/Notify/Consumer.h
M TAO/orbsvcs/orbsvcs/Notify/RT_Properties.cpp
M TAO/orbsvcs/orbsvcs/Notify/Consumer.cpp
M TAO/orbsvcs/orbsvcs/Notify/Service.h
M TAO/orbsvcs/orbsvcs/Notify/Properties.cpp
M TAO/orbsvcs/orbsvcs/Notify/CosNotify_Service.cpp
M TAO/orbsvcs/orbsvcs/Notify/RT_Properties.h
M TAO/orbsvcs/orbsvcs/Notify/Structured/StructuredPushConsumer.cpp
M TAO/orbsvcs/orbsvcs/Notify/Properties.inl
M TAO/orbsvcs/Notify_Service/Notify_Service.cpp
M TAO/orbsvcs/Notify_Service/README
M TAO/orbsvcs/Notify_Service/Notify_Service.h
M TAO/orbsvcs/tests/Event/Performance/run_test.pl
M TAO/orbsvcs/tests/ImplRepo/NameService/run_test.pl
M TAO/orbsvcs/tests/ImplRepo/locked/run_test.pl
M TAO/orbsvcs/tests/ImplRepo/run_test.pl
M TAO/orbsvcs/tests/Bug_1436_Regression/run_test.pl
M TAO/orbsvcs/tests/Bug_1393_Regression/run_test.pl
M TAO/orbsvcs/tests/Bug_1395_Regression/run_test.pl
M TAO/orbsvcs/tests/RTCosScheduling/run_test.pl
M TAO/orbsvcs/tests/Security/Secure_Invocation/run_test.pl
M TAO/orbsvcs/tests/Security/Big_Request/run_test.pl
M TAO/orbsvcs/tests/Security/Callback/run_test.pl
M TAO/orbsvcs/tests/InterfaceRepo/Application_Test/run_test.pl
M TAO/orbsvcs/tests/InterfaceRepo/IFR_Inheritance_Test/run_test.pl
MM TAO/orbsvcs/tests/Bug_2615_Regression/run_test.pl
M TAO/orbsvcs/tests/Bug_1437_Regression/run_test.pl
M TAO/orbsvcs/tests/Notify/Basic/run_test_ipv6.pl
M TAO/orbsvcs/tests/Notify/Basic/run_test.pl
M TAO/tao/GIOP_Utils.h
M TAO/tao/Unbounded_Octet_Sequence_T.h
M TAO/tao/ObjectKey_Table.h
M TAO/tao/ObjectKey_Table.cpp
M TAO/tao/GIOP_Message_State.cpp
M TAO/ChangeLog
M TAO/utils/nslist/run_test.pl
A TAO/tests/Bug_2702_Regression
A TAO/tests/Bug_2702_Regression/client.cpp
A TAO/tests/Bug_2702_Regression/CloseConnection.mpc
A TAO/tests/Bug_2702_Regression/Test.idl
A TAO/tests/Bug_2702_Regression/fakeserver.pm
A TAO/tests/Bug_2702_Regression/fakeserver2.pl
A TAO/tests/Bug_2702_Regression/closeconnection.dat
A TAO/tests/Bug_2702_Regression/README
A TAO/tests/Bug_2702_Regression/run_test.pl
M TAO/tests/DLL_ORB/run_test.pl
M TAO/tests/Portable_Interceptors/PolicyFactory/run_test.pl
M TAO/tests/Portable_Interceptors/Request_Interceptor_Flow/run_test.pl
M TAO/tests/Portable_Interceptors/IORInterceptor/run_test.pl
M TAO/tests/Portable_Interceptors/PICurrent/run_test.pl
M TAO/tests/COIOP/run_test.pl
M TAO/NEWS
M ACE/ace/CDR_Stream.inl
M ACE/ace/QtReactor/QtReactor.cpp
M ACE/bin/auto_run_tests.pl
M ACE/bin/tao_orb_tests.lst
M ACE/NEWS
M ACE/ChangeLog
Diffstat (limited to 'TAO/tests/Bug_2702_Regression')
-rw-r--r-- | TAO/tests/Bug_2702_Regression/CloseConnection.mpc | 13 | ||||
-rw-r--r-- | TAO/tests/Bug_2702_Regression/README | 18 | ||||
-rw-r--r-- | TAO/tests/Bug_2702_Regression/Test.idl | 20 | ||||
-rw-r--r-- | TAO/tests/Bug_2702_Regression/client.cpp | 81 | ||||
-rw-r--r-- | TAO/tests/Bug_2702_Regression/closeconnection.dat | bin | 0 -> 12 bytes | |||
-rw-r--r-- | TAO/tests/Bug_2702_Regression/fakeserver.pm | 151 | ||||
-rwxr-xr-x | TAO/tests/Bug_2702_Regression/fakeserver2.pl | 138 | ||||
-rwxr-xr-x | TAO/tests/Bug_2702_Regression/run_test.pl | 60 |
8 files changed, 481 insertions, 0 deletions
diff --git a/TAO/tests/Bug_2702_Regression/CloseConnection.mpc b/TAO/tests/Bug_2702_Regression/CloseConnection.mpc new file mode 100644 index 00000000000..9ec64bd7118 --- /dev/null +++ b/TAO/tests/Bug_2702_Regression/CloseConnection.mpc @@ -0,0 +1,13 @@ +// -*- MPC -*- +// $Id$ + +project(*Client): taoexe { + exename = client + idlflags += -GA + + Source_Files { + TestC.cpp + client.cpp + } +} + diff --git a/TAO/tests/Bug_2702_Regression/README b/TAO/tests/Bug_2702_Regression/README new file mode 100644 index 00000000000..6418f2d4413 --- /dev/null +++ b/TAO/tests/Bug_2702_Regression/README @@ -0,0 +1,18 @@ +This test simulates the sending of a GIOP CloseConnection message. +Since TAO does not send this GIOP message, a perl script +(fakeserver2.pl) is used to simulate a CORBA server. Since it isn't +really a CORBA server, it has no way to generate an IOR, and instead +listens on a pre-selected fixed port (1192). Thus, part of this test +includes an IOR for a server listening on endpoint +iiop://127.0.0.1:1192. + +If the port number must be changed at some point in the future, one +will have to generate a new IOR file as well. The original was +generated using the "server" from the "Hello" test +($ACE_ROOT/TAO/tests/Hello) with ORB arguments + + -ORBDottedDecimalAddresses 1 -ORBendpoint iiop://127.0.0.1:1192 + +Something similar could be used to re-generate. + + diff --git a/TAO/tests/Bug_2702_Regression/Test.idl b/TAO/tests/Bug_2702_Regression/Test.idl new file mode 100644 index 00000000000..3c0976e106d --- /dev/null +++ b/TAO/tests/Bug_2702_Regression/Test.idl @@ -0,0 +1,20 @@ +// +// $Id$ +// + +/// Put the interfaces in a module, to avoid global namespace pollution +module Test +{ + /// A very simple interface + interface Hello + { + /// Return a simple string + string get_string (); + + /// A method to shutdown the ORB + /** + * This method is used to simplify the test shutdown process + */ + oneway void shutdown (); + }; +}; diff --git a/TAO/tests/Bug_2702_Regression/client.cpp b/TAO/tests/Bug_2702_Regression/client.cpp new file mode 100644 index 00000000000..3b2d214029c --- /dev/null +++ b/TAO/tests/Bug_2702_Regression/client.cpp @@ -0,0 +1,81 @@ +// $Id$ + +#include "TestC.h" +#include "ace/Get_Opt.h" + +ACE_RCSID(Hello, client, "$Id$") + +const char *ior = "file://test.ior"; + +int +parse_args (int argc, char *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, "k:"); + int c; + + while ((c = get_opts ()) != -1) + switch (c) + { + case 'k': + ior = get_opts.opt_arg (); + break; + + case '?': + default: + ACE_ERROR_RETURN ((LM_ERROR, + "usage: %s " + "-k <ior> " + "\n", + argv [0]), + -1); + } + // Indicates sucessful parsing of the command line + return 0; +} + +int +main (int argc, char *argv[]) +{ + ACE_TRY_NEW_ENV + { + CORBA::ORB_var orb = + CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (parse_args (argc, argv) != 0) + return 1; + + CORBA::Object_var tmp = + orb->string_to_object(ior ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + Test::Hello_var hello = + Test::Hello::_narrow(tmp.in () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (CORBA::is_nil (hello.in ())) + { + ACE_ERROR_RETURN ((LM_DEBUG, + "Nil Test::Hello reference <%s>\n", + ior), + 1); + } + + hello->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + ACE_Time_Value duration(20, 0); + orb->run(duration); + orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + "Exception caught:"); + return 1; + } + ACE_ENDTRY; + + return 0; +} diff --git a/TAO/tests/Bug_2702_Regression/closeconnection.dat b/TAO/tests/Bug_2702_Regression/closeconnection.dat Binary files differnew file mode 100644 index 00000000000..478fbbc2fcd --- /dev/null +++ b/TAO/tests/Bug_2702_Regression/closeconnection.dat diff --git a/TAO/tests/Bug_2702_Regression/fakeserver.pm b/TAO/tests/Bug_2702_Regression/fakeserver.pm new file mode 100644 index 00000000000..87f2a676f81 --- /dev/null +++ b/TAO/tests/Bug_2702_Regression/fakeserver.pm @@ -0,0 +1,151 @@ +package fakeserver; + +use Socket; +use IO::Socket; + +sub new { + my $self = { }; + $self->{'filebits'} = ''; + $self->{'connections'} = { }; + $self->{'server'} = ''; + $self->{'server_fileno'} = ''; + $self->{''} = ''; +} + +sub run { + my $self = shift; + my $timeoutafter = shift; # in seconds + my $rout; + while ( 1 ) { + print STDERR "fakeserver: Loop\n"; + + select( undef, undef, undef, 1 ); + + my ($n, $left) = select( $rout = $filebits, undef, undef, $timeoutafter); # Time out after 15 seconds + if ($n == 0) { + print STDERR "fakeserver: Terminating normally\n"; + exit 0; + } + + my $routs = unpack("b*", $rout); + print STDERR "fakeserver: Select $routs\n"; + my $pos = index( $routs,'1'); + while ( $pos >= 0 ) { + $self->HandleFile( $pos ); + $pos = index( $routs,'1', $pos+1); + } + } +} + +sub CloseServer { + my $self = shift; + vec($self->{'filebits'},$self->{'server_fileno'},1) = 0; + $server->close(); + undef $server; +} + +sub OpenServer { + my $self = shift; + my $server = IO::Socket::INET->new(Listen => 5, + LocalPort => 1192, + Reuse => 1, + ReuseAddr => 1, + Timeout => 0, + Proto => 'tcp'); + + die "Could not create socket $!" unless $server; + + $server->blocking(0); + my $server_fileno = fileno($server); + vec($filebits,$server_fileno,1) = 1; + + print STDERR "fakeserver: Starting $server_fileno\n"; + + open (DATA, 'closeconnection.dat') or die "couldn't open closeconnection.dat: $!\n"; + my $n = read(DATA, $closeconnectionmessage, 100); + close(DATA); + + print STDERR "fakeserver: read $n <$closeconnectionmessage> ", length($closeconnectionmessage), "\n"; + $self->{'server'} = $server; + $self->{'server_fileno'} = $server_fileno; +} + +sub SendMessage { + my $self = shift; + my( $message ) = @_; + + print STDERR "fakeserver: SendMessage $message\n"; + $message .= "\r\n"; + + foreach my $fileno (keys %{$self->{'connections'}}) { + if ( ${$self->{'connections'}}{$fileno} ) { + my $client = ${$self->{'connections'}}{$fileno}{client}; + print $client $message; + } + } +} + +sub HandleFile { + my $self = shift; + my ( $fileno ) = @_; + + print STDERR "fakeserver: HandleFile $fileno\n"; + if ( $fileno == $self->{'server_fileno'} ) { + HandleServer(); + } elsif ( ${$self->{'connections'}}{$fileno} ) { + HandleClient( $fileno ); + } else { + print STDERR "fakeserver: Weird fileno $fileno\n"; + } +} + +sub HandleServer { + my $self = shift; + my $client = $server->accept(); + + print STDERR "fakeserver: HandleServer\n"; + + if ( $client ) { + my $fileno = fileno($client); + $client->blocking(0); + ${$self->{'connections'}}{$fileno}{client} = $client; + ${$self->{'connections'}}{$fileno}{loggedin} = 0; + vec($self->{'filebits'},$fileno,1) = 1; + print STDERR "fakeserver: New client on $fileno\n"; + } else { + print STDERR "fakeserver: No accept for server, reopen\n"; + $self->CloseServer(); + $self->OpenServer(); + } +} + +sub HandleClient { + my $self = shift; + my ( $fileno ) = @_; + + print STDERR "fakeserver: HandleClient $fileno\n"; + my $receive; + my $n = recv( ${$self->{'connections'}}{$fileno}{client}, $receive, 200, 0 ); + my $rlen = length($receive); + if ( $receive ) { + if ($receive =~ /^GIOP/) { + print STDERR "fakeserver: Got $rlen byte GIOP message from client $fileno\n"; + } + else { + print STDERR "fakeserver: Got $rlen bytes from client $fileno\n"; + } + ${$self->{'connections'}}{$fileno}{receive} = $receive; + my $slen = length($closeconnectionmessage); + print STDERR "fakeserver: Sending $slen bytes GIOP closeconnection to $fileno\n"; + sleep(3); + $n = send(${$self->{'connections'}}{$fileno}{client}, $closeconnectionmessage, 0); + print STDERR "fakeserver: Sent $n bytes GIOP closeconnection to $fileno\n"; + } else { + print STDERR "fakeserver: Close client $fileno\n"; + vec(${$self->{'filebits'}},$fileno,1) = 0; + ${$self->{'connections'}}{$fileno}{client}->close(); + undef ${$self->{'connections'}}{$fileno}; + $self->SendMessage( "Close Client" ); + } +} + diff --git a/TAO/tests/Bug_2702_Regression/fakeserver2.pl b/TAO/tests/Bug_2702_Regression/fakeserver2.pl new file mode 100755 index 00000000000..4d6dbf61c60 --- /dev/null +++ b/TAO/tests/Bug_2702_Regression/fakeserver2.pl @@ -0,0 +1,138 @@ +#!/usr/bin/perl + +use Socket; +use IO::Socket; + +$filebits = ''; + +OpenServer(); + +my $rout; +while( 1 ) { + print STDERR "fakeserver: Loop\n"; + + select( undef, undef, undef, 1 ); + + ($n, $left) = select( $rout = $filebits, undef, undef, 15 ); # Time out after 15 seconds + if ($n == 0) { + print STDERR "fakeserver: Terminating normally\n"; + exit 0; + } + + my $routs = unpack("b*", $rout); + print STDERR "fakeserver: Select $routs\n"; + my $pos = index( $routs,'1'); + while ( $pos >= 0 ) { + HandleFile( $pos ); + $pos = index( $routs,'1', $pos+1); + } +} + +sub SendMessage { + local( $message ) = @_; + + print STDERR "fakeserver: SendMessage $message\n"; + $message .= "\r\n"; + + foreach $fileno (keys %connections) { + if ( $connections{$fileno} ) { + my $client = $connections{$fileno}{client}; + print $client $message; + } + } +} + + +sub HandleFile { + local( $fileno ) = @_; + + print STDERR "fakeserver: HandleFile $fileno\n"; + if ( $fileno == $server_fileno ) { + HandleServer(); + } elsif ( $connections{$fileno} ) { + HandleClient( $fileno ); + } else { + print STDERR "fakeserver: Weird fileno $fileno\n"; + } +} + +sub HandleServer { + my $client = $server->accept(); + + print STDERR "fakeserver: HandleServer\n"; + + if ( $client ) { + my $fileno = fileno($client); + $client->blocking(0); + $connections{$fileno}{client} = $client; + $connections{$fileno}{loggedin} = 0; + vec($filebits,$fileno,1) = 1; +# print $client "Welcome $fileno\r\n"; +# my $n = send($client, $closeconnectionmessage, 0); + print STDERR "fakeserver: New client on $fileno\n"; +# SendMessage( "New Client" ); + } else { + print STDERR "fakeserver: No accept for server, reopen\n"; + CloseServer(); + OpenServer(); + } +} + +sub HandleClient { + local( $fileno ) = @_; + + print STDERR "fakeserver: HandleClient $fileno\n"; + $n = recv( $connections{$fileno}{client}, $receive, 200, 0 ); + $rlen = length($receive); + if ( $receive ) { + if ($receive =~ /^GIOP/) { + print STDERR "fakeserver: Got $rlen byte GIOP message from client $fileno\n"; + } + else { + print STDERR "fakeserver: Got $rlen bytes from client $fileno\n"; + } + $connections{$fileno}{receive} = $receive; + $slen = length($closeconnectionmessage); + print STDERR "fakeserver: Sending $slen bytes GIOP closeconnection to $fileno\n"; + sleep(3); + $n = send($connections{$fileno}{client}, $closeconnectionmessage, 0); + print STDERR "fakeserver: Sent $n bytes GIOP closeconnection to $fileno\n"; + } else { + print STDERR "fakeserver: Close client $fileno\n"; + vec($filebits,$fileno,1) = 0; + $connections{$fileno}{client}->close(); + undef $connections{$fileno}; + SendMessage( "Close Client" ); + } + +} + +sub CloseServer { + vec($filebits,$server_fileno,1) = 0; + $server->close(); + undef $server; +} + +sub OpenServer { + + $server = IO::Socket::INET->new(Listen => 5, + LocalPort => 1192, + Reuse => 1, + ReuseAddr => 1, + Timeout => 0, + Proto => 'tcp'); + + die "Could not create socket $!" unless $server; + + $server->blocking(0); + $server_fileno = fileno($server); + vec($filebits,$server_fileno,1) = 1; + + print STDERR "fakeserver: Starting $server_fileno\n"; + + open (DATA, 'closeconnection.dat') or die "couldn't open closeconnection.dat: $!\n"; + my $n = read(DATA, $closeconnectionmessage, 100); + close(DATA); + + print STDERR "fakeserver: read $n <$closeconnectionmessage> ", length($closeconnectionmessage), "\n"; +} diff --git a/TAO/tests/Bug_2702_Regression/run_test.pl b/TAO/tests/Bug_2702_Regression/run_test.pl new file mode 100755 index 00000000000..883eab373e3 --- /dev/null +++ b/TAO/tests/Bug_2702_Regression/run_test.pl @@ -0,0 +1,60 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# -*- perl -*- + +use lib "$ENV{ACE_ROOT}/bin"; +use PerlACE::Run_Test; + +$iorfile = PerlACE::LocalFile ("server_on_localhost_1192.ior"); +$status = 0; + +## Get the perl interpreter that invoked us and remove any +## executable extension (if there is one). +my($perl) = $^X; +$perl =~ s/\.exe$//i; + +$SV = new PerlACE::Process ($perl, "fakeserver2.pl"); +$CL = new PerlACE::Process ("client", " -k file://$iorfile -ORBdebuglevel 1 -ORBlogfile client.log"); +unlink "client.log"; + +$SV->IgnoreExeSubDir(1); +$SV->Spawn (); +sleep(1); # give the server a chance to come up + +if (PerlACE::waitforfile_timed ($iorfile, + $PerlACE::wait_interval_for_process_creation) == -1) { + print STDERR "ERROR: cannot find file <$iorfile>\n"; + $SV->Kill (); $SV->TimedWait (1); + exit 1; +} + +$client = $CL->SpawnWaitKill (60); + +# We expect to have to kill both client and server. + +#if ($client != 0) { +# print STDERR "ERROR: client returned $client\n"; +# $status = 1; +#} + +$server = $SV->WaitKill (10); + +#if ($server != 0) { +# print STDERR "ERROR: server returned $server\n"; +# $status = 1; +#} + +open (LOG, "client.log") or die "Couldn't open client log file client.log: $!\n"; +while (<LOG>) { + $ccmsgfound = 1 if (/process_parsed_messages, received CloseConnection message/); +} +close (LOG); +if (not $ccmsgfound) { + print STDERR "ERROR: didn't find CloseConnection debug message in client log.\n"; + $status = 1; +} + +exit $status; |