-
Notifications
You must be signed in to change notification settings - Fork 29
/
fornodes.pm
90 lines (80 loc) · 2.17 KB
/
fornodes.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package t::fornodes;
use Test::Base -Base;
use IPC::Run3 ();
use FindBin;
our @EXPORT = qw( run_tests );
if (!-d 't/tmp') {
mkdir 't/tmp';
}
$ENV{LC_ALL} = 'C';
$ENV{SSH_BATCH_HOME} = "$FindBin::Bin/tmp";
#warn $ENV{SSH_BATCH_HOME};
my $RcFile = $ENV{SSH_BATCH_HOME} . '/.fornodesrc';
my $is_linux = ($^O =~ /linux/i);
sub run_tests () {
for my $block (blocks()) {
run_test($block);
}
}
sub write_rc (@) {
open my $out, ">$RcFile" or
die "Failed to open $RcFile for writing: $!\n";
print $out @_;
close $out;
}
sub run_test ($) {
my $block = shift;
my $name = $block->name;
if (defined $block->linux_only && ! $is_linux) {
diag "$name - Tests skipped on $^O\n";
for (1..3) {
pass("tests skipped on $^O\n");
}
return;
}
my $expr = $block->expr;
if (defined $expr) { chomp $expr; }
if (!defined $expr && !defined $block->opts) {
die "Neither --- expr nor --- opts specified.\n";
}
if (defined $block->rc) {
write_rc($block->rc);
} elsif (defined $block->no_rc) {
unlink $RcFile;
}
my $prev_home;
if (defined $block->no_home) {
$prev_home = $ENV{SSH_BATCH_HOME};
$ENV{SSH_BATCH_HOME} = '/foo/bar/baz/32rdssfsd32';
}
my @opts;
if (defined $block->opts) {
@opts = split /\s+/, $block->opts;
}
my @cmd = ($^X, 'bin/fornodes', @opts, defined $expr ? $expr : ());
my ($in, $out, $err);
IPC::Run3::run3 \@cmd, \$in, \$out, \$err;
if (defined $block->status) {
#warn "status: $?\n";
if ($block->status == 0) {
is $? >> 8, $block->status, "$name - status ok";
} else {
ok($? >> 8, "$name - status ok");
}
}
if (defined $block->no_home) {
$ENV{SSH_BATCH_HOME} = $prev_home;
}
if (defined $block->err) {
$err =~ s/\Q$RcFile\E/**RC_FILE_PATH**/g;
is $err, $block->err, "$name - stderr ok";
} elsif ($err) {
warn $err, "\n";
}
if (defined $block->out) {
$out =~ s/^\s+$//s;
$out =~ s/\Q$RcFile\E/**RC_FILE_PATH**/g;
is $out, $block->out, "$name - stdout ok";
}
}
1;