1use Test::More;
2use Test::Deep;
3use Test::Exception;
4use Search::Elasticsearch;
5use lib 't/lib';
6use MockCxn qw(mock_static_client);
7
8our $t;
9
10# good request
11$t = mock_static_client(
12    { nodes => ['one'] },                         #
13    { node  => 1, ping => 1 },                    #
14    { node  => 1, code => '200', content => 1 }
15);
16
17ok $t->perform_request, 'Simple request';
18
19# Request error
20$t = mock_static_client(
21    { nodes => ['one'] },
22    { node  => 1, ping => 1 },
23    { node  => 1, code => '404', error => 'NotFound' }
24);
25
26throws_ok { $t->perform_request } qr/Missing/, 'Request error';
27
28# Timeout error
29$t = mock_static_client(
30    { nodes => ['one'] },
31    { node  => 1, ping => 1 },
32    { node  => 1, code => '509', error => 'Timeout' },
33    { node => 1, ping => 1 },
34    { node => 1, code => '200', content => 1 }
35);
36
37throws_ok { $t->perform_request } qr/Timeout/, 'Timeout error';
38ok $t->perform_request, 'Timeout resolved';
39
40# Cxn error
41$t = mock_static_client(
42    { nodes => ['one'] },
43    { node  => 1, ping => 1 },
44    { node  => 1, code => '509', error => 'Cxn' },
45    { node => 1, ping => 1 },
46    { node => 1, code => '200', content => 1 }
47);
48
49ok $t->perform_request, 'Retried connection error';
50
51# NoNodes from failure
52$t = mock_static_client(
53    { nodes => ['one'] },
54    { node  => 1, ping => 1 },
55    { node  => 1, code => '509', error => 'Cxn' },
56    { node => 1, ping => 0 },
57);
58
59throws_ok { $t->perform_request } qr/NoNodes/, 'Cxn then bad ping';
60
61# NoNodes reachable
62$t = mock_static_client(
63    { nodes => ['one'] },       #
64    { node => 1, ping => 0 },
65);
66
67throws_ok { $t->perform_request } qr/NoNodes/, 'Initial bad ping';
68
69done_testing;
70