diff --git a/lib/OpenQA/Command.pm b/lib/OpenQA/Command.pm index 2cfe2a302eb0..de977df7c706 100644 --- a/lib/OpenQA/Command.pm +++ b/lib/OpenQA/Command.pm @@ -124,7 +124,7 @@ sub retry_tx ($self, $client, $tx, $retries = undef, $delay = undef) { for (;; --$retries) { $tx = $client->start($tx); my $res_code = $tx->res->code // 0; - return $self->handle_result($tx) unless $res_code =~ /50[23]/ && $retries > 0; + return $self->handle_result($tx) unless $res_code =~ /^(50[23]|0)$/ && $retries > 0; print encode('UTF-8', "Request failed, hit error $res_code, retrying up to $retries more times after waiting …\n"); sleep $delay; diff --git a/t/43-cli-api.t b/t/43-cli-api.t index 6b2ad11c82e8..afe056643a76 100644 --- a/t/43-cli-api.t +++ b/t/43-cli-api.t @@ -60,6 +60,7 @@ my @host = ('--host', $host); # Default options for authentication tests my @auth = ('--apikey', 'ARTHURKEY01', '--apisecret', 'EXCALIBUR', @host); +$ENV{MOJO_CONNECT_TIMEOUT} = 1; $ENV{OPENQA_CLI_RETRY_SLEEP_TIME_S} = 0; my $cli = OpenQA::CLI->new; my $api = OpenQA::CLI::api->new; @@ -451,6 +452,11 @@ EOF ($stdout, $stderr, @result) = capture sub { $api->run('--retries', '1', @params) }; like $stdout, qr/failed.*retrying/, 'requests are retried on error if requested'; + + @params = ('--host', 'http://localhost:123456', '--retries', 1, 'api', 'test'); + ($stdout, $stderr, @result) = capture sub { $api->run(@params) }; + like $stderr, qr/Connection refused/, 'aborts on connection refused'; + like $stdout, qr/failed.*retrying/, 'requests are retried on error if requested'; }; subtest 'Pretty print JSON' => sub {