OSDN Git Service

ソースツリー再構成中(ほぼOK?)
[ultramonkey-l7/ultramonkey-l7-v3.git] / l7directord / t / 14_health_check.t
1 use strict;
2 use warnings;
3 no warnings qw(redefine once);
4 use lib qw(t/lib lib);
5 use subs qw(print);
6 use Cwd;
7 use L7lib;
8 use subs qw(fork);
9 use Test::More tests => 11;
10
11 L7lib::chdir();
12 L7lib::comment_out();
13 require './l7directord';
14 override();
15
16 our @check_func_args = ();
17 our @check_func_returns = ();
18 our @get_status_args = ();
19 our @get_status_returns = ();
20 our @get_ip_port_args = ();
21 our @get_ip_port_returns = ();
22 our @get_check_func_args = ();
23 our @get_check_func_returns = ();
24 our @service_set_args = ();
25 our @service_set_returns = ();
26 our @check_connect_args = ();
27 our @check_connect_returns = ();
28 our @sleep_and_check_signal_args = ();
29 our @sleep_and_check_signal_returns = ();
30 our $health_check_called = 0;
31 #...............................................
32 # test start
33 #   - health_check
34 {
35     set_default();
36     eval {
37         health_check();
38     };
39     is $@, "1\n", 'health_check - no virtual real list';
40 }
41 {
42     set_default();
43     local @get_status_returns = ();
44     local @get_check_func_returns = ( \&check_func );
45     my $v = {};
46     my $r = {};
47     eval {
48         health_check([ [] ]);
49     };
50     is $@, "2\n", 'health_check - no virtual real';
51 }
52 {
53     set_default();
54     local @get_status_returns = ();
55     local @get_ip_port_returns = ('ip:port');
56     local @get_check_func_returns = ( \&check_func );
57     local @check_func_returns = ( $main::SERVICE_DOWN );
58     local @sleep_and_check_signal_returns = ( 'halt' );
59     local @service_set_args = ();
60     my $v = {
61         checktype => 'connect',
62         checkcount => 1,
63         retryinterval => 5,
64         checkinterval => 8,
65              };
66     my $r = {};
67     eval {
68         health_check([ [$v, $r] ]);
69     };
70     is $@, "0\n", 'health_check - no virtual real';
71     is_deeply \@service_set_args, [ [[$v,$r]], 'down' ], 'health_check - service set down';
72 }
73 {
74     set_default();
75     local @get_status_returns = ();
76     local @get_ip_port_returns = ('ip:port');
77     local @get_check_func_returns = ( \&check_func );
78     local @check_func_returns = ( $main::SERVICE_UP,
79                                   $main::SERVICE_DOWN,
80                                   $main::SERVICE_DOWN,
81                                   $main::SERVICE_DOWN,
82                                 );
83     local @sleep_and_check_signal_returns = ( 'run',
84                                               'run',
85                                               'run',
86                                               'halt',
87                                             );
88     local @service_set_args = ();
89     my $v = {
90         checktype => 'connect',
91         checkcount => 3,
92         retryinterval => 5,
93         checkinterval => 8,
94              };
95     my $r = {};
96     eval {
97         health_check([ [$v, $r] ]);
98     };
99     is $@, "0\n", 'health_check - no virtual real';
100     is_deeply \@service_set_args, [ [[$v,$r]], 'up', [[$v,$r]], 'down' ], 'health_check - service set up and down';
101     is_deeply \@sleep_and_check_signal_args, [8,1,5,1,5,1,8,1], 'health_check - sleep time';
102 }
103 {
104     set_default();
105     local @get_status_returns = ();
106     local @get_ip_port_returns = ('ip:port');
107     local @get_check_func_returns = ( \&check_func );
108     local @check_func_returns = ( $main::SERVICE_DOWN,
109                                   $main::SERVICE_DOWN,
110                                   $main::SERVICE_UP,
111                                   $main::SERVICE_DOWN,
112                                 );
113     local @sleep_and_check_signal_returns = ( 'run',
114                                               'run',
115                                               'run',
116                                               'halt',
117                                             );
118     local @service_set_args = ();
119     my $v = {
120         checktype => 'connect',
121         checkcount => 3,
122         retryinterval => 5,
123         checkinterval => 8,
124              };
125     my $r = {};
126     eval {
127         health_check([ [$v, $r] ]);
128     };
129     is $@, "0\n", 'health_check - no virtual real';
130     is_deeply \@service_set_args, [ [[$v,$r]], 'up' ], 'health_check - service set up and down';
131     is_deeply \@sleep_and_check_signal_args, [5,1,5,1,8,1,5,1], 'health_check - sleep time';
132 }
133 {
134     set_default();
135     local $main::PROC_STAT{parent_pid} = 100000;
136     local @get_status_returns = ();
137     local @get_ip_port_returns = ('ip:port');
138     local @get_check_func_returns = ( \&check_func );
139     local @check_func_returns = ( $main::SERVICE_DOWN );
140     local @sleep_and_check_signal_returns = ( 'run' );
141     local @service_set_args = ();
142     my $v = {
143         checktype => 'connect',
144         checkcount => 3,
145         retryinterval => 5,
146         checkinterval => 8,
147              };
148     my $r = {};
149     eval {
150         health_check([ [$v, $r] ]);
151     };
152     is $@, "3\n", 'health_check - parent process is down';
153 }
154 # test end
155 #...............................................
156
157 L7lib::comment_in();
158
159 sub check_func {
160     push @check_func_args, @_;
161     return shift @check_func_returns;
162 }
163 sub set_default {
164     $main::PROC_STAT{parent_pid} = $$;
165     @get_status_args = ();
166     @get_status_returns = ();
167     @get_check_func_args = ();
168     @get_check_func_returns = ();
169     @get_ip_port_args = ();
170     @get_ip_port_returns = ();
171     @service_set_args = ();
172     @service_set_returns = ();
173     @check_connect_args = ();
174     @check_connect_returns = ();
175     $health_check_called = 0;
176     @sleep_and_check_signal_args = ();
177     @sleep_and_check_signal_returns = ();
178 }
179 sub override {
180     *POSIX::_exit = \&__POSIX__exit;
181     *get_status = \&__get_status;
182     *get_check_func = \&__get_check_func;
183     *service_set = \&__service_set;
184     *check_connect = \&__check_connect;
185     *sleep_and_check_signal = \&__sleep_and_check_signal;
186     *ld_log = \&__ld_log;
187 }
188 sub __get_status {
189     push @get_status_args, @_;
190     return shift @get_status_returns;
191 }
192 sub __get_ip_port {
193     push @get_ip_port_args, @_;
194     return shift @get_ip_port_returns;
195 }
196 sub __get_check_func {
197     push @get_check_func_args, @_;
198     return shift @get_check_func_returns;
199 }
200 sub __service_set {
201     push @service_set_args, @_;
202     return shift @service_set_returns;
203 }
204 sub __check_connect {
205     push @get_status_args, @_;
206     return shift @get_status_returns;
207 }
208 sub __sleep_and_check_signal {
209     push @sleep_and_check_signal_args, @_;
210     return shift @sleep_and_check_signal_returns;
211 }
212 sub __POSIX__exit {
213     die "$_[0]\n";
214 }
215 sub __ld_log {
216 }