1use Test::More;
2use Test::Exception;
3use Search::Elasticsearch;
4use lib 't/lib';
5use MockCxn qw(mock_static_client);
6
7## Runaway nodes (ie wrong HTTP response codes signal node failure, instead of
8## request failure)
9
10my $t = mock_static_client(
11    { nodes => 'one' },
12
13    { node => 1, ping => 1 },
14    { node => 1, code => 200, content => 1 },
15    { node => 1, code => 503, error => 'Unavailable' },
16    { node => 1, ping => 1 },
17    { node => 1, code => 503, error => 'Unavailable' },
18
19    # throw Unavailable: too many retries
20
21    { node => 1, ping => 1 },
22    { node => 1, code => 503, error => 'Unavailable' },
23    { node => 1, ping => 1 },
24    { node => 1, code => 503, error => 'Unavailable' },
25
26    # throw Unavailable: too many retries
27
28    { node => 1, ping => 1 },
29    { node => 1, code => 200, content => 1 },
30
31);
32
33ok $t->perform_request
34    && !eval { $t->perform_request }
35    && $@ =~ /Unavailable/
36    && !eval { $t->perform_request }
37    && $@ =~ /Unavailable/
38    && $t->perform_request,
39    "Runaway nodes";
40
41done_testing;
42