mirror of
https://github.com/duncs/clusterssh.git
synced 2025-04-21 17:09:06 +00:00

Allow ranges such as 'h{a,b}{1,2}' to expand to 'ha1 ha2 hb1 hb2' rather than return a perl error Thanks to Markus Frosch (lazyfrosch). Github issue #97.
84 lines
2.6 KiB
Perl
84 lines
2.6 KiB
Perl
#!/usr/bin/env perl
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Test::More;
|
|
use Test::Trap;
|
|
use Data::Dump;
|
|
|
|
require_ok('App::ClusterSSH::Range')
|
|
|| BAIL_OUT('Failed to use App::ClusterSSH::Range');
|
|
|
|
my %tests = (
|
|
'a' => 'a',
|
|
'c{a,b}' => 'ca cb',
|
|
'd{a,b,c}' => 'da db dc',
|
|
'e{0}' => 'e0',
|
|
'f{0..3}' => 'f0 f1 f2 f3',
|
|
'g{0..2,4}' => 'g0 g1 g2 g4',
|
|
'h{0..2,4..6}' => 'h0 h1 h2 h4 h5 h6',
|
|
'i{0..1,a}' => 'i0 i1 ia',
|
|
'j{0..2,a,b,c}' => 'j0 j1 j2 ja jb jc',
|
|
'k{4..6,a..c}' => 'k4 k5 k6 ka kb kc',
|
|
'l{0..2,7..9,e..g}' => 'l0 l1 l2 l7 l8 l9 le lf lg',
|
|
'm{0,1}' => 'm0 m1',
|
|
'n0..2}' => 'n0..2}',
|
|
'host{a,b}-test{1,2}' =>
|
|
'hosta-test1 hosta-test2 hostb-test1 hostb-test2',
|
|
|
|
# NOTE: the following are not "as expected" in line with above tests
|
|
# due to bsd_glob functionality. See output from:
|
|
# print join(q{ }, bsd_glob("o{a,b,c")).$/
|
|
'o{a,b,c' => 'o',
|
|
'p{0..2' => 'p',
|
|
|
|
# Reported as bug in github issue #89
|
|
'q-0{0,1}' => 'q-00 q-01',
|
|
'q-0{0..1}' => 'q-00 q-01',
|
|
|
|
# expand pure ranges
|
|
'{10..12}' => '10 11 12',
|
|
|
|
# expand ports
|
|
'lh:{22001..22003}' => 'lh:22001 lh:22002 lh:22003',
|
|
|
|
# FQDN's
|
|
'lh{1..3}.dot.com' => 'lh1.dot.com lh2.dot.com lh3.dot.com',
|
|
|
|
# IP addresses
|
|
'127.0.0.{10..12}' => '127.0.0.10 127.0.0.11 127.0.0.12',
|
|
'127.0.{20..22}.1' => '127.0.20.1 127.0.21.1 127.0.22.1',
|
|
);
|
|
|
|
my $range = App::ClusterSSH::Range->new();
|
|
isa_ok( $range, 'App::ClusterSSH::Range', 'object created correctly' );
|
|
|
|
for my $key ( sort keys %tests ) {
|
|
my $expected = $tests{$key};
|
|
my @expected = split / /, $tests{$key};
|
|
|
|
my $got;
|
|
trap {
|
|
$got = $range->expand($key);
|
|
};
|
|
|
|
is( $trap->stdout, '', "No stdout for scalar $key" );
|
|
is( $trap->stderr, '', "No stderr for scalar $key" );
|
|
is( $trap->leaveby, 'return', "correct leaveby for scalar $key" );
|
|
is( $trap->die, undef, "die is undef for scalar $key" );
|
|
is( $got, "$expected", "expected return for scalar $key" );
|
|
|
|
my @got;
|
|
trap {
|
|
@got = $range->expand($key);
|
|
};
|
|
|
|
is( $trap->stdout, '', "No stdout for array $key" );
|
|
is( $trap->stderr, '', "No stderr for array $key" );
|
|
is( $trap->leaveby, 'return', "correct leaveby for array $key" );
|
|
is( $trap->die, undef, "die is undef for array $key" );
|
|
is_deeply( \@got, \@expected, "expected return for array $key" )
|
|
|| diag explain \@got;
|
|
}
|
|
|
|
done_testing();
|