The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/local/bin/perl -w
use strict;
our (
$nt, 
$nt2,
$nt3,
$nt4,
$nt5,
$nt6,
$nt7,
);

BEGIN {
$nt  = 2;
$nt2 = 1;
$nt3 = 1;
$nt4 = 3;
$nt5 = 0;
$nt6 = 0;
$nt7 = 0;
};

use Test::More;

BEGIN { 
  use_ok('GRID::Machine', 'is_operative');
  use_ok('GRID::Machine::Group');
};

my $test_exception_installed;
BEGIN {
  $test_exception_installed = 1;
  eval { require Test::Exception };
  $test_exception_installed = 0 if $@;
}

my @MACHINE_NAMES = split /\s+/, $ENV{MACHINES} || '';
@MACHINE_NAMES = ('', '') unless @MACHINE_NAMES;

my $host = ($ENV{GRID_REMOTE_MACHINE} || ''); 
my $operative = 0;
if ($ENV{DEVELOPER}) {
  $operative = is_operative('ssh', $host,'perldoc -l Inline::C');

  for (@MACHINE_NAMES) {
    $operative = ($operative and is_operative('ssh', $_));
  }
}


SKIP: {
  skip "t/smallpar.pl not found", $nt2 unless ( $host && $operative &&  @MACHINE_NAMES && -r "t/smallpar.pl");

  my $r = qx{perl -I./lib/ t/smallpar.pl 2>&1};
  $r = eval $r;
  
  my $expected = bless( [
                 bless( { 'stderr' => '',
                          'errmsg' => '',
                          'type' => 'RETURNED',
                          'stdout' => '',
                          'errcode' => 0,
                          'results' => [ 1 ]
                        }, 'GRID::Machine::Result' ),
                 bless( {
                          'stderr' => '',
                          'errmsg' => '',
                          'type' => 'RETURNED',
                          'stdout' => '',
                          'errcode' => 0,
                          'results' => [ 1 ]
                        }, 'GRID::Machine::Result' )
               ], 'GRID::Machine::Group::Result' );

  is_deeply($r, $expected,'less args than machines. Using void()');
}


SKIP: {
  skip "t/smallpar1.pl not found", $nt3 unless ( $host && $operative &&  @MACHINE_NAMES && -r "t/smallpar1.pl");

  my $r = qx{perl -I./lib/ t/smallpar1.pl 2>&1};
  $r = eval $r;
  
  my $expected = bless( [
                 bless( { 'stderr' => '',
                          'errmsg' => '',
                          'type' => 'RETURNED',
                          'stdout' => '',
                          'errcode' => 0,
                          'results' => [ 1 ]
                        }, 'GRID::Machine::Result' ),
                 bless( {
                          'stderr' => '',
                          'errmsg' => '',
                          'type' => 'RETURNED',
                          'stdout' => '',
                          'errcode' => 0,
                          'results' => [ 1 ]
                        }, 'GRID::Machine::Result' )
               ], 'GRID::Machine::Group::Result' );

  is_deeply($r, $expected,'less args than machines. Using replicate value');
}

SKIP: {
  skip "t/smallpar3.pl not found", $nt4 unless ( $host && $operative &&  @MACHINE_NAMES && -r "t/smallpar3.pl");

  my $r = qx{perl -I./lib/ t/smallpar3.pl 2>&1};
  $r = eval $r;
  
  my $expected = bless( [
                 bless( {
                          'stderr' => '',
                          'errmsg' => '',
                          'type' => 'RETURNED',
                          'stdout' => '',
                          'errcode' => 0,
                          'results' => [
                                         {
                                           'sq' => 1
                                         }
                                       ]
                        }, 'GRID::Machine::Result' ),
                 bless( {
                          'stderr' => '',
                          'errmsg' => '',
                          'type' => 'RETURNED',
                          'stdout' => '',
                          'errcode' => 0,
                          'results' => [
                                         {
                                           'sq' => 4
                                         }
                                       ]
                        }, 'GRID::Machine::Result' )
               ], 'GRID::Machine::Group::Result' );


  my $m = $expected;
  $m = $r if @MACHINE_NAMES < 2; 

  isa_ok($r, 'GRID::Machine::Group::Result');

  is_deeply($r->[$_], $expected->[$_],'less args than machines. Using replicate code. Arrayref returned') for @$m;
}

SKIP: {
  skip "t/smallpar4.pl not found", $nt4 unless ($host && @MACHINE_NAMES && $operative &&  -r "t/smallpar4.pl");

  my $r = qx{perl -I./lib/ t/smallpar4.pl 2>&1};
  $r = eval $r;
  
  my $expected = bless( [
                 bless( {
                          'stderr' => '',
                          'errmsg' => '',
                          'type' => 'RETURNED',
                          'stdout' => '',
                          'errcode' => 0,
                          'results' => [
                                         {
                                           'sq' => 1
                                         }
                                       ]
                        }, 'GRID::Machine::Result' ),
                 bless( {
                          'stderr' => '',
                          'errmsg' => '',
                          'type' => 'RETURNED',
                          'stdout' => '',
                          'errcode' => 0,
                          'results' => [
                                         {
                                           'sq' => 4
                                         }
                                       ]
                        }, 'GRID::Machine::Result' )
               ], 'GRID::Machine::Group::Result' );


  my $m = $expected;
  $m = $r if @MACHINE_NAMES < 2; 

  isa_ok($r, 'GRID::Machine::Group::Result');

  is_deeply($r->[$_], $expected->[$_],'less args than machines. Using replicate code. Values returned') for @$m;
}

done_testing;