summaryrefslogtreecommitdiff
path: root/ACE/bin/PerlACE/Run_Test.pm
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/bin/PerlACE/Run_Test.pm')
-rw-r--r--ACE/bin/PerlACE/Run_Test.pm331
1 files changed, 331 insertions, 0 deletions
diff --git a/ACE/bin/PerlACE/Run_Test.pm b/ACE/bin/PerlACE/Run_Test.pm
new file mode 100644
index 00000000000..d5d91116e50
--- /dev/null
+++ b/ACE/bin/PerlACE/Run_Test.pm
@@ -0,0 +1,331 @@
+#! /usr/bin/perl
+# $Id$
+
+# This module contains a few miscellanous functions and some
+# startup ARGV processing that is used by all tests.
+
+use PerlACE::Process;
+use PerlACE::ConfigList;
+
+package PerlACE;
+use File::Spec;
+use Cwd;
+
+$PerlACE::ACE_ROOT = $ENV{ACE_ROOT};
+if(exists $ENV{TAO_ROOT}) {
+ $PerlACE::TAO_ROOT = $ENV{TAO_ROOT};
+} else {
+ $PerlACE::TAO_ROOT = "$PerlACE::ACE_ROOT/TAO";
+}
+if(exists $ENV{CIAO_ROOT}) {
+ $PerlACE::CIAO_ROOT = $ENV{CIAO_ROOT};
+} else {
+ $PerlACE::CIAO_ROOT = "$PerlACE::TAO_ROOT/CIAO";
+}
+
+my $config = new PerlACE::ConfigList;
+$PerlACE::TestConfig = $config;
+
+# load VxWorks Process helpers in case this is a VxWorks target build
+$PerlACE::Static = $config->check_config("STATIC");
+$PerlACE::VxWorks_Test = $config->check_config("VxWorks");
+$PerlACE::VxWorks_RTP_Test = $config->check_config("VxWorks_RTP");
+if ($PerlACE::VxWorks_Test or $PerlACE::VxWorks_RTP_Test) {
+ require PerlACE::ProcessVX;
+}
+
+# Load LabVIEW RT Process helpers in case this is a LabVIEW RT target build.
+$PerlACE::LabVIEW_RT_Test = $config->check_config("LabVIEW_RT");
+if ($PerlACE::LabVIEW_RT_Test) {
+ require PerlACE::ProcessLVRT;
+}
+
+$PerlACE::WinCE_Test = $config->check_config("WINCE");
+if ($PerlACE::WinCE_Test) {
+if ($OSNAME eq "MSWin32") {
+ require PerlACE::ProcessWinCE;
+} else {
+ require PerlACE::ProcessWinCE_Unix;
+}
+}
+
+# Figure out the svc.conf extension
+$svcconf_ext = $ENV{"ACE_RUNTEST_SVCCONF_EXT"};
+if (!defined $svcconf_ext) {
+ $svcconf_ext = ".conf";
+}
+
+# Default timeout. NSCORBA needs more time for process start up.
+$wait_interval_for_process_creation = (($PerlACE::VxWorks_Test or $PerlACE::VxWorks_RTP_Test) ? 60 : 15);
+if ($^O eq 'VMS') {
+ $wait_interval_for_process_creation *= 3;
+}
+elsif ($^O eq 'nto') {
+ ## QNX can be slow to start processes
+ $wait_interval_for_process_creation += 5;
+}
+
+$wait_interval_for_process_shutdown = (($PerlACE::VxWorks_Test or $PerlACE::VxWorks_RTP_Test) ? 30 : 10);
+
+# Turn on autoflush
+$| = 1;
+
+sub LocalFile ($)
+{
+ my $file = shift;
+
+ my $newfile = getcwd () . '/' . $file;
+
+ if ($^O eq "MSWin32") {
+ $newfile =~ s/\//\\/g;
+ }
+ elsif ($^O eq 'cygwin') {
+ chop($newfile = `/usr/bin/cygpath -w $newfile`);
+ $newfile =~ s/\\/\\\\/g;
+ }
+
+ return $newfile;
+}
+
+sub rebase_path {
+ my $path = shift;
+ my $cur_root = shift;
+ my $new_root = shift;
+ $path = File::Spec->rel2abs ($path);
+ $path = File::Spec->abs2rel ($path, $cur_root);
+ return $new_root."/".$path;
+}
+
+sub VX_HostFile($)
+{
+ my $file = shift;
+ return rebase_path ($file, $ENV{"ACE_ROOT"}, $ENV{"HOST_ROOT"});
+}
+
+# Returns a random port within the range of 10002 - 32767
+sub random_port {
+ return (int(rand($$)) % 22766) + 10002;
+}
+
+# Returns a unique id, uid for unix, last digit of IP for NT
+sub uniqueid
+{
+ if ($^O eq "MSWin32")
+ {
+ my $uid = 1;
+
+ open (IPNUM, "ipconfig|") || die "Can't run ipconfig: $!\n";
+
+ while (<IPNUM>)
+ {
+ if (/Address/)
+ {
+ $uid = (split (/: (\d+)\.(\d+)\.(\d+)\.(\d+)/))[4];
+ }
+ }
+
+ close IPNUM;
+
+ return $uid;
+ }
+ else
+ {
+ return $>;
+ }
+}
+
+# Waits until a file exists
+sub waitforfile
+{
+ local($file) = @_;
+ sleep 1 while (!(-e $file && -s $file));
+}
+
+sub waitforfile_timed
+{
+ my $file = shift;
+ my $maxtime = shift;
+ $maxtime *= (($PerlACE::VxWorks_Test || $PerlACE::VxWorks_RTP_Test) ? $PerlACE::ProcessVX::WAIT_DELAY_FACTOR : $PerlACE::Process::WAIT_DELAY_FACTOR);
+
+ while ($maxtime-- != 0) {
+ if (-e $file && -s $file) {
+ return 0;
+ }
+ sleep 1;
+ }
+ return -1;
+}
+
+sub check_n_cleanup_files
+{
+ my $file = shift;
+ my @flist = glob ($file);
+
+ my $cntr = 0;
+ my $nfile = scalar(@flist);
+
+ if ($nfile != 0) {
+ for (; $cntr < $nfile; $cntr++) {
+ print STDERR "File <$flist[$cntr]> exists but should be cleaned up\n";
+ }
+ unlink @flist;
+ }
+}
+
+sub generate_test_file
+{
+ my $file = shift;
+ my $size = shift;
+
+ while ( -e $file ) {
+ $file = $file."X";
+ }
+
+ my $data = "abcdefghijklmnopqrstuvwxyz";
+ $data = $data.uc($data)."0123456789";
+
+ open( INPUT, "> $file" ) || die( "can't create input file: $file" );
+ for($i=62; $i < $size ; $i += 62 ) {
+ print INPUT $data;
+ }
+ $i -= 62;
+ if ($i < $size) {
+ print INPUT substr($data, 0, $size-$i);
+ }
+ close(INPUT);
+
+ return $file;
+}
+
+sub is_labview_rt_test()
+{
+ return ($PerlACE::LabVIEW_RT_Test);
+}
+
+sub is_vxworks_test()
+{
+ return ($PerlACE::VxWorks_Test || $PerlACE::VxWorks_RTP_Test);
+}
+
+sub is_vxworks_rtp_test()
+{
+ return ($PerlACE::VxWorks_RTP_Test);
+}
+
+sub concat_path {
+ my $pathlist = shift;
+ my $path = shift;
+ if ((!defined $pathlist) || $pathlist =~ /^\s*$/) {
+ return $path;
+ } else {
+ return $pathlist . ($^O eq 'MSWin32' ? ';' : ':') . $path;
+ }
+}
+
+sub add_path {
+ my $name = shift;
+ my $value = shift;
+ $ENV{$name} = concat_path ($ENV{$name}, $value);
+}
+
+sub add_lib_path {
+ my($value) = shift;
+
+ # Set the library path supporting various platforms.
+ foreach my $env ('PATH', 'DYLD_LIBRARY_PATH', 'LD_LIBRARY_PATH',
+ 'SHLIB_PATH') {
+ add_path($env, $value);
+ if (grep(($_ eq 'ARCH'), @PerlACE::ConfigList::Configs)) {
+ add_path($env, $value . '/' . $PerlACE::Process::ExeSubDir);
+ }
+ }
+
+ if (defined $ENV{"HOST_ROOT"}) {
+ add_path('PATH', VX_HostFile ($value));
+ add_path('LD_LIBRARY_PATH', VX_HostFile ($value));
+ add_path('LIBPATH', VX_HostFile ($value));
+ add_path('SHLIB_PATH', VX_HostFile ($value));
+ }
+}
+
+sub check_privilege_group {
+ if ($^O eq 'hpux') {
+ my($access) = 'RTSCHED';
+ my($status) = 0;
+ my($getprivgrp) = '/bin/getprivgrp';
+
+ if (-x $getprivgrp) {
+ if (open(GPG, "$getprivgrp |")) {
+ while(<GPG>) {
+ if (index($_, $access) >= 0) {
+ $status = 1;
+ }
+ }
+ close(GPG);
+ }
+ }
+
+ if (!$status) {
+ print STDERR "WARNING: You must have $access privileges to run this test.\n",
+ " Run \"man 1m setprivgrp\" for more information.\n";
+ exit(0);
+ }
+ }
+}
+
+# waits until it finds a matching regular expression in a file
+# escape metacharacters in the text to wait for
+sub waitforfileoutput {
+ my $file = shift;
+ my $waittext = shift;
+
+ if (-e $file && -s $file) {
+ open (DATA, $file);
+ while (my $line = <DATA>) {
+ if ($line =~ /($waittext)/) {
+ close(DATA);
+ return 0;
+ }
+ }
+ close(DATA);
+ }
+ sleep 1;
+}
+
+sub waitforfileoutput_timed {
+ my $file = shift;
+ my $waittext = shift;
+ my $maxtime = shift;
+
+ $maxtime *= (($PerlACE::VxWorks_Test || $PerlACE::VxWorks_RTP_Test) ? $PerlACE::ProcessVX::WAIT_DELAY_FACTOR : $PerlACE::Process::WAIT_DELAY_FACTOR);
+
+ while ($maxtime-- != 0) {
+ if (-e $file && -s $file) {
+ open (DATA, $file);
+ while (my $line = <DATA>) {
+ if ($line =~ /($waittext)/) {
+ close(DATA);
+ return 0;
+ }
+ }
+ close(DATA);
+ }
+ sleep 1;
+ }
+ return -1;
+}
+
+sub GetArchDir {
+ my $dir = shift;
+ if (grep(($_ eq 'ARCH'), @PerlACE::ConfigList::Configs)) {
+ return $dir . $PerlACE::Process::ExeSubDir;
+ }
+ return $dir;
+}
+
+# Add PWD to the load library path
+add_lib_path ('.');
+
+$sleeptime = 5;
+
+1;