eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
     & eval 'exec perl -S $0 $argv:q'
     if 0;

# -*- perl -*-

use lib "$ENV{ACE_ROOT}/bin";
use PerlACE::TestTarget;
use File::Copy;
use Getopt::Std;

PerlACE::check_privilege_group();

$status = 0;
$debug_level = '0';

foreach $i (@ARGV) {
    if ($i eq '-debug') {
        $debug_level = '10';
    }
}

# -n notify.conf -s high_path.conf -c other_paths.conf -o output_dir -h
getopts ("n:s:c:o:h");

if ($opt_h) {
    $opt_h = 0; #to disable fuxx.pl warning only
    print STDERR "-n notify.conf -s high_path.conf -c other_paths.conf -o output_dir -h\n";
    exit 0;
}

$nt_conf = "notify.conf";
if ($opt_n) {
    $nt_conf = $opt_n;
}

$high_path_conf = "high_path.conf";
if ($opt_s) {
    $high_path_conf = $opt_s;
}

$other_paths_conf = "other_paths.conf";
if ($opt_c) {
    $other_paths_conf = $opt_c;
}

my $nm_service = PerlACE::TestTarget::create_target (1) || die "Create target 1 failed\n";
my $nt_service = PerlACE::TestTarget::create_target (2) || die "Create target 2 failed\n";

#uncomment it when test will be fixed
#@list = glob("*.dat");
#for $file (@list) {
#    $nm_service->DeleteFile ($file);
#    $nt_service->DeleteFile ($file);
#}

my $nm_ior = "naming.ior";
my $nt_ior = "notify.ior";

my $nt_service_nt_conf = $nt_service->LocalFile($nt_conf);
my $nm_service_nm_ior  = $nm_service->LocalFile($nm_ior);
my $nt_service_nm_ior  = $nt_service->LocalFile($nm_ior);
my $nt_service_nt_ior  = $nt_service->LocalFile($nt_ior);
$nm_service->DeleteFile($nm_ior);
$nt_service->DeleteFile($nm_ior);
$nt_service->DeleteFile($nt_ior);

$NM_SV = $nm_service->CreateProcess ("$ENV{TAO_ROOT}/orbsvcs/Naming_Service/tao_cosnaming",
                                     "-ORBDebugLevel $debug_level -o $nm_service_nm_ior");

$NT_SV = $nt_service->CreateProcess ("$ENV{TAO_ROOT}/orbsvcs/Notify_Service/tao_cosnotification",
                                     "-ORBInitRef NameService=file://$nt_service_nm_ior ".
                                     "-IORoutput $nt_service_nt_ior ".
                                     "-ORBSvcConf $nt_service_nt_conf ".
                                     "-ORBDebugLevel $debug_level");

$service_status = $NM_SV->Spawn ();

if ($service_status != 0) {
    print STDERR "ERROR: naming service returned $service_status\n";
    exit 1;
}

if ($nm_service->WaitForFileTimed ($nm_ior,
                                   $nm_service->ProcessStartWaitInterval() + 105) == -1) {
    print STDERR "ERROR: cannot find file <$nm_service_nm_ior>\n";
    $NM_SV->Kill (); $NM_SV->TimedWait (1);
    exit 1;
}

if ($nm_service->GetFile ($nm_ior) == -1) {
    print STDERR "ERROR: cannot retrieve file <$nm_service_nm_ior>\n";
    $NM_SV->Kill (); $NM_SV->TimedWait (1);
    exit 1;
}

if ($nt_service->PutFile ($nm_ior) == -1) {
    print STDERR "ERROR: cannot set file <$nt_service_nm_ior>\n";
    $NM_SV->Kill (); $NM_SV->TimedWait (1);
    exit 1;
}

$service_status = $NT_SV->SpawnWaitKill ($nt_service->ProcessStartWaitInterval() + 585);

if ($service_status != 0) {
    print STDERR "ERROR: notification service returned $service_status\n";
    exit 1;
}

$nm_service->DeleteFile($nm_ior);
$nt_service->DeleteFile($nm_ior);
$nt_service->DeleteFile($nt_ior);

exit $status;
