1use Test::More;
2use Test::Exception;
3use Search::Elasticsearch;
4use lib 't/lib';
5use MockCxn qw(mock_static_client);
6
7## One node fails with a Cxn error, then rejoins
8
9my $t = mock_static_client(
10    { nodes => [ 'one', 'two' ] },
11
12    { node => 1, ping => 1 },
13    { node => 1, code => 200, content => 1 },
14    { node => 2, ping => 1 },
15    { node => 2, code => 200, content => 1 },
16    { node => 1, code => 509, error => 'Cxn' },
17    { node => 2, ping => 1 },
18    { node => 2, code => 200, content => 1 },
19    { node => 2, code => 200, content => 1 },
20
21    # force ping on missing node
22    { node => 1, ping => 1 },
23    { node => 1, code => 200, content => 1 },
24    { node => 2, code => 200, content => 1 },
25    { node => 1, code => 200, content => 1 },
26);
27
28ok $t->perform_request
29    && $t->perform_request
30    && $t->perform_request
31    && $t->perform_request,
32    'One node throws Cxn';
33
34# force ping on missing node
35$t->cxn_pool->cxns->[0]->next_ping(-1);
36
37ok $t->perform_request && $t->perform_request && $t->perform_request,
38    'Failed node recovers';
39
40done_testing;
41
42