stevieb has asked for the wisdom of the Perl Monks concerning the following question:
I'm beginning the process of writing unit tests for Tesla::API, and want to test my timeout retry routine. By default, if calling Tesla's API time's out (ie. 500), it'll retry the call two more times.
This appears to work, but I want to test it. I can't mock code() or is_success() etc, because prior to running the code posted below, there are authentication routines that run that need to return proper codes and other pertinent information.
Essentially, how do I mock a mechanize timeout?
my $url = URI->new(URL_API . $uri); my $header = ['Content-Type' => 'application/json; charset=UTF-8'] +; if ($auth) { my $token_string = "Bearer " . $self->_access_token; push @$header, 'Authorization' => $token_string; } my $request = HTTP::Request->new( $type, $url, $header, JSON->new->allow_nonref->encode($api_params) ); my $response; for (1 .. API_TIMEOUT_RETRIES) { # If a timeout (ie. code 500) occurs, repeat the API call $response = $self->mech->request($request); if ($response->is_success) { my $response_data = _decode($response->decoded_content)->{ +response}; $self->_cache( endpoint => $endpoint_name, id => $id, data => $response_data ); return $response_data; } elsif ($response->code == 500) { next; } }
Thanks!
-stevieb
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Forcing WWW::Mechanize to timeout
by Corion (Patriarch) on Apr 12, 2022 at 19:17 UTC | |
|
Re: Forcing WWW::Mechanize to timeout
by Marshall (Canon) on Apr 12, 2022 at 23:32 UTC | |
|
Re: Forcing WWW::Mechanize to timeout
by Discipulus (Canon) on Apr 13, 2022 at 07:12 UTC | |
|
Re: Forcing WWW::Mechanize to timeout
by Anonymous Monk on Apr 13, 2022 at 07:02 UTC |