group_hosts_by: Return a list, not a hashref
The hash key value is an implementation detail that should not be leaked to the caller.
This commit is contained in:
parent
08ccc41650
commit
b8df93febe
2 changed files with 18 additions and 23 deletions
33
ddclient.in
33
ddclient.in
|
@ -3468,7 +3468,7 @@ sub group_hosts_by {
|
||||||
my $sig = $d->Reset()->Values([\%cfg])->Dump();
|
my $sig = $d->Reset()->Values([\%cfg])->Dump();
|
||||||
push(@{$groups{$sig}}, $h);
|
push(@{$groups{$sig}}, $h);
|
||||||
}
|
}
|
||||||
return %groups;
|
return values(%groups);
|
||||||
}
|
}
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
@ -4011,7 +4011,7 @@ EoEXAMPLE
|
||||||
######################################################################
|
######################################################################
|
||||||
sub nic_dyndns2_update {
|
sub nic_dyndns2_update {
|
||||||
debug("\nnic_dyndns2_update -------------------");
|
debug("\nnic_dyndns2_update -------------------");
|
||||||
my %groups = group_hosts_by(\@_, qw(login password server script static custom wildcard mx backupmx wantipv4 wantipv6));
|
my @groups = group_hosts_by(\@_, qw(login password server script static custom wildcard mx backupmx wantipv4 wantipv6));
|
||||||
my %errors = (
|
my %errors = (
|
||||||
'badauth' => 'Bad authorization (username or password)',
|
'badauth' => 'Bad authorization (username or password)',
|
||||||
'badsys' => 'The system parameter given was not valid',
|
'badsys' => 'The system parameter given was not valid',
|
||||||
|
@ -4025,8 +4025,8 @@ sub nic_dyndns2_update {
|
||||||
'dnserr' => 'System error: DNS error encountered. Contact support@dyndns.org',
|
'dnserr' => 'System error: DNS error encountered. Contact support@dyndns.org',
|
||||||
'nochg' => 'No update required; unnecessary attempts to change to the current address are considered abusive',
|
'nochg' => 'No update required; unnecessary attempts to change to the current address are considered abusive',
|
||||||
);
|
);
|
||||||
for my $sig (keys %groups) {
|
for my $group (@groups) {
|
||||||
my @hosts = @{$groups{$sig}};
|
my @hosts = @$group;
|
||||||
my $hosts = join(',', @hosts);
|
my $hosts = join(',', @hosts);
|
||||||
my $h = $hosts[0];
|
my $h = $hosts[0];
|
||||||
my $ipv4 = $config{$h}{'wantipv4'};
|
my $ipv4 = $config{$h}{'wantipv4'};
|
||||||
|
@ -4289,7 +4289,6 @@ sub dnsexit2_update_host {
|
||||||
######################################################################
|
######################################################################
|
||||||
sub nic_noip_update {
|
sub nic_noip_update {
|
||||||
debug("\nnic_noip_update -------------------");
|
debug("\nnic_noip_update -------------------");
|
||||||
my %groups = group_hosts_by(\@_, qw(login password server wantipv4 wantipv6));
|
|
||||||
my %errors = (
|
my %errors = (
|
||||||
'badauth' => 'Invalid username or password',
|
'badauth' => 'Invalid username or password',
|
||||||
'badagent' => 'Invalid user agent',
|
'badagent' => 'Invalid user agent',
|
||||||
|
@ -4300,8 +4299,8 @@ sub nic_noip_update {
|
||||||
'dnserr' => 'System error: DNS error encountered. Contact support@dyndns.org',
|
'dnserr' => 'System error: DNS error encountered. Contact support@dyndns.org',
|
||||||
'nochg' => 'No update required; unnecessary attempts to change to the current address are considered abusive',
|
'nochg' => 'No update required; unnecessary attempts to change to the current address are considered abusive',
|
||||||
);
|
);
|
||||||
for my $sig (keys %groups) {
|
for my $group (group_hosts_by(\@_, qw(login password server wantipv4 wantipv6))) {
|
||||||
my @hosts = @{$groups{$sig}};
|
my @hosts = @$group;
|
||||||
my $hosts = join(',', @hosts);
|
my $hosts = join(',', @hosts);
|
||||||
my $h = $hosts[0];
|
my $h = $hosts[0];
|
||||||
my $ipv4 = $config{$h}{'wantipv4'};
|
my $ipv4 = $config{$h}{'wantipv4'};
|
||||||
|
@ -4632,9 +4631,8 @@ sub nic_zoneedit1_force_update {
|
||||||
######################################################################
|
######################################################################
|
||||||
sub nic_zoneedit1_update {
|
sub nic_zoneedit1_update {
|
||||||
debug("\nnic_zoneedit1_update -------------------");
|
debug("\nnic_zoneedit1_update -------------------");
|
||||||
my %groups = group_hosts_by(\@_, qw(login password server zone wantip));
|
for my $group (group_hosts_by(\@_, qw(login password server zone wantip))) {
|
||||||
for my $sig (keys %groups) {
|
my @hosts = @$group;
|
||||||
my @hosts = @{$groups{$sig}};
|
|
||||||
my $hosts = join(',', @hosts);
|
my $hosts = join(',', @hosts);
|
||||||
my $h = $hosts[0];
|
my $h = $hosts[0];
|
||||||
my $ip = $config{$h}{'wantip'};
|
my $ip = $config{$h}{'wantip'};
|
||||||
|
@ -5996,9 +5994,8 @@ EoEXAMPLE
|
||||||
######################################################################
|
######################################################################
|
||||||
sub nic_nsupdate_update {
|
sub nic_nsupdate_update {
|
||||||
debug("\nnic_nsupdate_update -------------------");
|
debug("\nnic_nsupdate_update -------------------");
|
||||||
my %groups = group_hosts_by(\@_, qw(login password server tcp zone wantipv4 wantipv6));
|
for my $group (group_hosts_by(\@_, qw(login password server tcp zone wantipv4 wantipv6))) {
|
||||||
for my $sig (keys %groups) {
|
my @hosts = @$group;
|
||||||
my @hosts = @{$groups{$sig}};
|
|
||||||
my $hosts = join(',', @hosts);
|
my $hosts = join(',', @hosts);
|
||||||
my $h = $hosts[0];
|
my $h = $hosts[0];
|
||||||
my $binary = $config{$h}{'login'};
|
my $binary = $config{$h}{'login'};
|
||||||
|
@ -6110,9 +6107,8 @@ EoEXAMPLE
|
||||||
######################################################################
|
######################################################################
|
||||||
sub nic_cloudflare_update {
|
sub nic_cloudflare_update {
|
||||||
debug("\nnic_cloudflare_update -------------------");
|
debug("\nnic_cloudflare_update -------------------");
|
||||||
my %groups = group_hosts_by(\@_, qw(login password));
|
for my $group (group_hosts_by(\@_, qw(login password))) {
|
||||||
for my $sig (keys %groups) {
|
my @hosts = @$group;
|
||||||
my @hosts = @{$groups{$sig}};
|
|
||||||
my $hosts = join(',', @hosts);
|
my $hosts = join(',', @hosts);
|
||||||
my $key = $hosts[0];
|
my $key = $hosts[0];
|
||||||
my $headers = "Content-Type: application/json\n";
|
my $headers = "Content-Type: application/json\n";
|
||||||
|
@ -7278,9 +7274,8 @@ EoEXAMPLE
|
||||||
}
|
}
|
||||||
|
|
||||||
sub nic_cloudns_update {
|
sub nic_cloudns_update {
|
||||||
my %groups = group_hosts_by(\@_, qw(dynurl wantip));
|
for my $group (group_hosts_by(\@_, qw(dynurl wantip))) {
|
||||||
for my $hr (values(%groups)) {
|
my @hosts = @$group;
|
||||||
my @hosts = @$hr;
|
|
||||||
my $hosts = join(',', @hosts);
|
my $hosts = join(',', @hosts);
|
||||||
my $ip = $config{$hosts[0]}{'wantip'};
|
my $ip = $config{$hosts[0]}{'wantip'};
|
||||||
my $dynurl = $config{$hosts[0]}{'dynurl'};
|
my $dynurl = $config{$hosts[0]}{'dynurl'};
|
||||||
|
|
|
@ -74,15 +74,15 @@ my @test_cases = (
|
||||||
);
|
);
|
||||||
|
|
||||||
for my $tc (@test_cases) {
|
for my $tc (@test_cases) {
|
||||||
my %got = ddclient::group_hosts_by([$h1, $h2, $h3], @{$tc->{groupby}});
|
my @got = ddclient::group_hosts_by([$h1, $h2, $h3], @{$tc->{groupby}});
|
||||||
# %got is used as a set of sets. Sort everything to make comparison easier.
|
# @got is used as a set of sets. Sort everything to make comparison easier.
|
||||||
my @got = sort({
|
@got = sort({
|
||||||
for (my $i = 0; $i < @$a && $i < @$b; ++$i) {
|
for (my $i = 0; $i < @$a && $i < @$b; ++$i) {
|
||||||
my $x = $a->[$i] cmp $b->[$i];
|
my $x = $a->[$i] cmp $b->[$i];
|
||||||
return $x if $x != 0;
|
return $x if $x != 0;
|
||||||
}
|
}
|
||||||
return @$a <=> @$b;
|
return @$a <=> @$b;
|
||||||
} map({ [sort(@$_)]; } values(%got)));
|
} map({ [sort(@$_)]; } @got));
|
||||||
is_deeply(\@got, $tc->{want}, $tc->{desc})
|
is_deeply(\@got, $tc->{want}, $tc->{desc})
|
||||||
or diag(Data::Dumper->Dump([\@got, $tc->{want}], [qw(got want)]));
|
or diag(Data::Dumper->Dump([\@got, $tc->{want}], [qw(got want)]));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue