summaryrefslogtreecommitdiff
path: root/TAO/tests/Bug_2702_Regression
diff options
context:
space:
mode:
authorChris Cleeland <chris.cleeland@gmail.com>2007-01-03 06:11:06 +0000
committerChris Cleeland <chris.cleeland@gmail.com>2007-01-03 06:11:06 +0000
commit09ed767f524a0a9a410d1f40c78241227a92239f (patch)
treef0233c5e9e4cbe54ff54efe7254346ed9fd53ee9 /TAO/tests/Bug_2702_Regression
parente6defa8ce1ff560f95956be4f7b5482428de6592 (diff)
downloadATCD-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.mpc13
-rw-r--r--TAO/tests/Bug_2702_Regression/README18
-rw-r--r--TAO/tests/Bug_2702_Regression/Test.idl20
-rw-r--r--TAO/tests/Bug_2702_Regression/client.cpp81
-rw-r--r--TAO/tests/Bug_2702_Regression/closeconnection.datbin0 -> 12 bytes
-rw-r--r--TAO/tests/Bug_2702_Regression/fakeserver.pm151
-rwxr-xr-xTAO/tests/Bug_2702_Regression/fakeserver2.pl138
-rwxr-xr-xTAO/tests/Bug_2702_Regression/run_test.pl60
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
new file mode 100644
index 00000000000..478fbbc2fcd
--- /dev/null
+++ b/TAO/tests/Bug_2702_Regression/closeconnection.dat
Binary files differ
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;