OSDN Git Service

f92e75c7e692c31f41b93da72817853abc423806
[ultramonkey-l7/ultramonkey-l7-v2.git] / l7directord / t / 01_main.t
1 use strict;
2 use warnings;
3 no warnings qw(redefine once);
4 use lib qw(t/lib lib);
5 use File::Copy;
6 use L7lib;
7 use Test::More tests => 75;
8 use POSIX;
9 use Cwd qw(abs_path);
10
11 L7lib::chdir();
12 L7lib::comment_out();
13 require './l7directord';
14 require_file();
15 override();
16
17 close *STDOUT;
18 open  *STDOUT, '>', '/dev/null';
19 close *STDERR;
20 open  *STDERR, '>', '/dev/null';
21
22 #...............................................
23 # test start
24 #   - main
25 #   - parse_cmd
26 #   - parse_option
27 #   - initial_setting
28 #   - search_config_file
29 #   - search_l7vsadm_file
30
31 test_default();
32
33 test_argv('no ARGV',                10, qw());
34 test_argv('ARGV="usage"',           10, qw(usage));
35 test_argv('unknown ARGV',           10, qw(foobar hogehoge));
36 test_argv('ARGV="help"',             9, qw(help));
37 test_argv('ARGV="--help"',           9, qw(--help));
38 test_argv('ARGV="--h"',              9, qw(--h));
39 test_argv('ARGV="-h"',               9, qw(-h));
40 test_argv('ARGV="version"',          8, qw(version));
41 test_argv('ARGV="--version"',        8, qw(--version));
42 test_argv('ARGV="-v"',               8, qw(-v));
43 test_argv('ARGV="--v"',              8, qw(--v));
44 test_argv('ARGV="configtest"',       7, qw(configtest));
45 test_argv('ARGV="--configtest"',    10, qw(--configtest));
46 test_argv('ARGV="-t"',               7, qw(-t));
47 test_argv('ARGV="--t"',              7, qw(--t));
48 test_argv('ARGV="--test"',          10, qw(--test));
49 test_argv('ARGV="status"',           6, qw(status));
50 test_argv('ARGV="reload"',           5, qw(reload));
51 test_argv('ARGV="try-restart"',      4, qw(try-restart));
52 test_argv('ARGV="restart"',          3, qw(restart));
53 test_argv('ARGV="stop"',             2, qw(stop));
54 test_argv('ARGV="start"',            1, qw(start));
55 test_argv('ARGV="--help start"',     9, qw(--help start));
56 test_argv('ARGV="--version stop"',   8, qw(--version stop));
57 test_argv('ARGV="--help --version"', 9, qw(--help --version));
58 test_argv('ARGV="-t --version"',     8, qw(-t --version));
59 test_argv('ARGV="-t -d"',            7, qw(-t -d));
60
61 test_argv('ARGV="-d"', 10, qw(-d));
62 is $main::DEBUG_LEVEL, 3, 'default debug level';
63
64 test_argv('ARGV="-d 1"', 10, qw(-d 1));
65 is $main::DEBUG_LEVEL, 1, 'set debug level';
66
67 test_argv('ARGV="-d 0"', 10, qw(-d 0));
68 is $main::DEBUG_LEVEL, 0, 'set debug level zero';
69
70 test_argv('ARGV="-d -1"', 10, qw(-d -1));
71 is $main::DEBUG_LEVEL, -1, 'set debug level minus';
72
73 SKIP: {
74     skip '/etc/hosts not found', 3 if (!-f '/etc/hosts');
75     test_argv('ARGV="/etc/hosts start"', 1, qw(/etc/hosts start));
76     is $main::CONFIG_FILE{path}, '/etc/hosts', 'set config path(1)';
77     is $main::CONFIG_FILE{filename}, 'hosts', 'set config filename';
78 }
79
80 SKIP: {
81     skip '/etc/hosts not found', 3 if (!-f '/etc/hosts');
82     test_argv('ARGV="-d 20 --version /etc/hosts start"', 8, qw(-d 20 --version /etc/hosts start));
83     is $main::DEBUG_LEVEL, 20, 'set debug level';
84     is $main::CONFIG_FILE{path}, '/etc/hosts', 'set config path';
85     is $main::CONFIG_FILE{filename}, 'hosts', 'set config filename';
86 }
87
88 SKIP: {
89     skip '/etc/ld.so.conf not found', 3 if (!-f '/etc/ld.so.conf');
90     test_argv('ARGV="/etc/ld.so.conf stop"', 2, qw(/etc/ld.so.conf stop));
91     is $main::CONFIG_FILE{path}, '/etc/ld.so.conf', 'set config path(2)';
92     is $main::CONFIG_FILE{filename}, 'ld.so', 'set config filename, omit ".conf"';
93 }
94
95 SKIP: {
96     skip '/etc/mail/sendmail.cf not found', 3 if (!-f '/etc/mail/sendmail.cf');
97     test_argv('ARGV="/etc/mail/sendmail.cf restart"', 3, qw(/etc/mail/sendmail.cf restart));
98     is $main::CONFIG_FILE{path}, '/etc/mail/sendmail.cf', 'set config path(3)';
99     is $main::CONFIG_FILE{filename}, 'sendmail', 'set config filename, omit ".cf"';
100 }
101
102 SKIP: {
103     skip '/a/b/c exist', 1 if (-f '/a/b/c');
104     local @ARGV = qw(/a/b/c reload);
105     eval { main(); };
106     is $@, "init_error\n", 'config not found';
107 }
108
109 SKIP: {
110     my $fail = 0;
111     my $made = 0;
112     if (!-f './l7directord.cf') {
113         if (!open my $f, '>', './l7directord.cf') {
114             $fail = 1;
115         } else { $made = 1; close $f; }
116     }
117     if ($fail) {
118         if ($made) { unlink './l7directord.cf'; }
119         skip 'cannot make ./l7directord.cf', 3;
120     }
121     test_argv('ARGV="reload"', 5, qw(reload));
122     is $main::CONFIG_FILE{path}, abs_path('./l7directord.cf'), 'search config path(1)';
123     is $main::CONFIG_FILE{filename}, 'l7directord', 'search config filename';
124     if ($made) { unlink './l7directord.cf'; }
125 }
126
127 SKIP: {
128     my $fail = 0;
129     my $made = 0;
130     my $mkdir = 0;
131     my $bak1 = 0;
132     if (-f './l7directord.cf') {
133         if (move './l7directord.cf', 'l7d.bak1') {
134             $bak1 = 1;
135         } else {
136             $fail = 1;
137         }
138     }
139     if (!$fail && !-d '/etc/ha.d/conf') {
140         if (!mkdir '/etc/ha.d/conf') {
141             $fail = 1;
142         } else { $mkdir = 1; }
143     }
144     if (!$fail && !-f '/etc/ha.d/conf/l7directord.cf') {
145         if (!open my $f, '>', '/etc/ha.d/conf/l7directord.cf') {
146             $fail = 1;
147         } else { $made = 1; }
148     }
149     if ($fail) {
150         if ($made) { unlink '/etc/ha.d/conf/l7directord.cf'; }
151         if ($mkdir) { rmdir '/etc/ha.d/conf'; }
152         if ($bak1) { move 'l7d.bak1', './l7directord.cf'; }
153         skip 'cannot make /etc/ha.d/conf/l7directord.cf', 3;
154     }
155     test_argv('ARGV="try-restart"', 4, qw(try-restart));
156     is $main::CONFIG_FILE{path}, '/etc/ha.d/conf/l7directord.cf', 'search config path(2)';
157     is $main::CONFIG_FILE{filename}, 'l7directord', 'search config filename(2)';
158     if ($made) { unlink '/etc/ha.d/conf/l7directord.cf'; }
159     if ($mkdir) { rmdir '/etc/ha.d/conf'; }
160     if ($bak1) { move 'l7d.bak1', './l7directord.cf'; }
161 }
162
163 SKIP: {
164     my $fail = 0;
165     my $made = 0;
166     my $mkdir = 0;
167     my $bak1 = 0;
168     my $bak2 = 0;
169     if (-f './l7directord.cf') {
170         if (move './l7directord.cf', 'l7d.bak1') {
171             $bak1 = 1;
172         } else {
173             $fail = 1;
174         }
175     }
176     if (!$fail && -f '/etc/ha.d/conf/l7directord.cf') {
177         if (move '/etc/ha.d/conf/l7directord.cf', 'l7d.bak2') {
178             $bak2 = 1;
179         } else {
180             $fail = 1;
181         }
182     }
183     if (!$fail && !-d '/etc/ha.d') {
184         if (!mkdir '/etc/ha.d') {
185             $fail = 1;
186         } else { $mkdir = 1; }
187     }
188     if (!$fail && !-f '/etc/ha.d/l7directord.cf') {
189         if (!open my $f, '>', '/etc/ha.d/l7directord.cf') {
190             $fail = 1;
191         } else { $made = 1; }
192     }
193     if ($fail) {
194         if ($made) { unlink '/etc/ha.d/l7directord.cf'; }
195         if ($mkdir) { rmdir '/etc/ha.d'; }
196         if ($bak1) { move 'l7d.bak1', './l7directord.cf'; }
197         if ($bak2) { move 'l7d.bak2', '/etc/ha.d/conf/l7directord.cf'; }
198         skip 'cannot make /etc/ha.d/l7directord.cf', 3;
199     }
200     test_argv('ARGV="restart"', 3, qw(restart));
201     is $main::CONFIG_FILE{path}, '/etc/ha.d/l7directord.cf', 'search config path(3)';
202     is $main::CONFIG_FILE{filename}, 'l7directord', 'search config filename(3)';
203     if ($made) { unlink '/etc/ha.d/l7directord.cf'; }
204     if ($mkdir) { rmdir '/etc/ha.d'; }
205     if ($bak1) { move 'l7d.bak1', './l7directord.cf'; }
206     if ($bak2) { move 'l7d.bak2', '/etc/ha.d/conf/l7directord.cf'; }
207 }
208
209 SKIP: {
210     my $fail = 0;
211     my $bak1 = 0;
212     my $bak2 = 0;
213     my $bak3 = 0;
214     if (-f './l7directord.cf') {
215         if (move './l7directord.cf', 'l7d.bak1') {
216             $bak1 = 1;
217         } else {
218             $fail = 1;
219         }
220     }
221     if (!$fail && -f '/etc/ha.d/conf/l7directord.cf') {
222         if (move '/etc/ha.d/conf/l7directord.cf', 'l7d.bak2') {
223             $bak2 = 1;
224         } else {
225             $fail = 1;
226         }
227     }
228     if (!$fail && -f '/etc/ha.d/l7directord.cf') {
229         if (move '/etc/ha.d/l7directord.cf', 'l7d.bak3') {
230             $bak3 = 1;
231         } else {
232             $fail = 1;
233         }
234     }
235     if ($fail) {
236         if ($bak1) { move 'l7d.bak1', './l7directord.cf'; }
237         if ($bak2) { move 'l7d.bak2', '/etc/ha.d/conf/l7directord.cf'; }
238         if ($bak2) { move 'l7d.bak3', '/etc/ha.d/l7directord.cf'; }
239         skip 'cannot move config search path file', 1;
240     }
241     local @ARGV = qw(status);
242     eval { main(); };
243     is $@, "init_error\n", 'config not found';
244     if ($bak1) { move 'l7d.bak1', './l7directord.cf'; }
245     if ($bak2) { move 'l7d.bak2', '/etc/ha.d/conf/l7directord.cf'; }
246     if ($bak2) { move 'l7d.bak3', '/etc/ha.d/l7directord.cf'; }
247 }
248
249 SKIP: {
250     my $fail = 0;
251     my $made = 0;
252     if (!-f './l7vsadm') {
253         if (!open my $f, '>', './l7vsadm') {
254             $fail = 1;
255         } else { $made = 1; close $f; }
256     }
257     if (!-x './l7vsadm') {
258         if (!chmod 0755, './l7vsadm') {
259             $fail = 1;
260         }
261     }
262     skip 'cannot make ./l7vsadm', 2 if ($fail);
263     test_argv('ARGV="stop"', 2, qw(stop));
264     is $main::PROC_ENV{l7vsadm}, abs_path('./l7vsadm'), 'search l7vsadm(1)';
265     if ($made) { unlink './l7vsadm'; }
266 }
267
268 SKIP: {
269     my $fail = 0;
270     my $made = 0;
271     my $mkdir = 0;
272     my $bak1 = 0;
273     if (-f './l7vsadm') {
274         if (move './l7vsadm', 'l7v.bak1') {
275             $bak1 = 1;
276         } else {
277             $fail = 1;
278         }
279     }
280     if (!$fail && !-d '/usr/sbin') {
281         if (!mkdir '/usr/sbin') {
282             $fail = 1;
283         } else { $mkdir = 1; }
284     }
285     if (!$fail && !-f '/usr/sbin/l7vsadm') {
286         if (!open my $f, '>', '/usr/sbin/l7vsadm') {
287             $fail = 1;
288         } else { $made = 1; }
289     }
290     if (!$fail && !-x '/usr/sbin/l7vsadm') {
291         if (!chmod 0755, '/usr/sbin/l7vsadm') {
292             $fail = 1;
293         }
294     }
295     skip 'cannot make /usr/sbin/l7vsadm', 2 if ($fail);
296     test_argv('ARGV="start"', 1, qw(start));
297     is $main::PROC_ENV{l7vsadm}, '/usr/sbin/l7vsadm', 'search l7vsadm(2)';
298     if ($made) { unlink './l7vsadm'; }
299     if ($mkdir) { rmdir '/usr/sbin'; }
300     if ($bak1) {
301         move 'l7v.bak1', './l7vsadm';
302         chmod '0755', './l7vsadm';
303     }
304 }
305
306 SKIP: {
307     my $fail = 0;
308     my $made = 0;
309     my $mkdir = 0;
310     my $bak1 = 0;
311     my $bak2 = 0;
312     if (-f './l7vsadm') {
313         if (move './l7vsadm', 'l7v.bak1') {
314             $bak1 = 1;
315         } else {
316             $fail = 1;
317         }
318     }
319     if (!$fail && -f '/usr/sbin/l7vsadm') {
320         if (move '/usr/sbin/l7vsadm', 'l7v.bak2') {
321             $bak2 = 1;
322         } else {
323             $fail = 1;
324         }
325     }
326     if (!$fail && (!-d '/sbin')) {
327         if (!mkdir '/sbin') {
328             $fail = 1;
329         } else { $mkdir = 1; }
330     }
331     if (!$fail && !-f '/sbin/l7vsadm') {
332         if (!open my $f, '>', '/sbin/l7vsadm') {
333             $fail = 1;
334         } else { $made = 1; }
335     }
336     if (!$fail && !-x '/sbin/l7vsadm') {
337         if (!chmod 0755, '/sbin/l7vsadm') {
338             $fail = 1;
339         }
340     }
341     if ($fail) {
342         if ($made) { unlink '/sbin/l7vsadm'; }
343         if ($mkdir) { rmdir '/sbin'; }
344         if ($bak1) {
345             move 'l7v.bak1', './l7vsadm';
346             chmod '0755', './l7vsadm';
347         }
348         if ($bak2) {
349             move 'l7v.bak2', '/usr/sbin/l7vsadm';
350             chmod '0755', '/usr/sbin/l7vsadm';
351         }
352         skip 'cannot make /sbin/l7vsadm', 2;
353     }
354     test_argv('ARGV="configtest"', 7, qw(configtest));
355     is $main::PROC_ENV{l7vsadm}, '/sbin/l7vsadm', 'search l7vsadm(3)';
356     if ($made) { unlink '/sbin/l7vsadm'; }
357     if ($mkdir) { rmdir '/sbin'; }
358     if ($bak1) {
359         move 'l7v.bak1', './l7vsadm';
360         chmod '0755', './l7vsadm';
361     }
362     if ($bak2) {
363         move 'l7v.bak2', '/usr/sbin/l7vsadm';
364         chmod '0755', '/usr/sbin/l7vsadm';
365     }
366 }
367
368 SKIP: {
369     my $fail = 0;
370     my $bak1 = 0;
371     my $bak2 = 0;
372     my $bak3 = 0;
373     if (-f './l7vsadm') {
374         if (move './l7vsadm', 'l7v.bak1') {
375             $bak1 = 1;
376         } else {
377             $fail = 1;
378         }
379     }
380     if (!$fail && -f '/usr/sbin/l7vsadm') {
381         if (move '/usr/sbin/l7vsadm', 'l7v.bak2') {
382             $bak2 = 1;
383         } else {
384             $fail = 1;
385         }
386     }
387     if (!$fail && -f '/sbin/l7vsadm') {
388         if (move '/sbin/l7vsadm', 'l7v.bak3') {
389             $bak3 = 1;
390         } else {
391             $fail = 1;
392         }
393     }
394     if ($fail) {
395         if ($bak1) {
396             move 'l7v.bak1', './l7vsadm';
397             chmod '0755', './l7vsadm';
398         }
399         if ($bak2) {
400             move 'l7v.bak2', '/usr/sbin/l7vsadm';
401             chmod '0755', '/usr/sbin/l7vsadm';
402         }
403         if ($bak3) {
404             move 'l7v.bak3', '/sbin/l7vsadm';
405             chmod '0755', '/sbin/l7vsadm';
406         }
407         skip 'cannot move l7vsadm search path file', 1;
408     }
409     local @ARGV = qw(status);
410     eval { main(); };
411     is $@, "init_error\n", 'l7vsadm not found';
412     if ($bak1) {
413         move 'l7v.bak1', './l7vsadm';
414         chmod '0755', './l7vsadm';
415     }
416     if ($bak2) {
417         move 'l7v.bak2', '/usr/sbin/l7vsadm';
418         chmod '0755', '/usr/sbin/l7vsadm';
419     }
420     if ($bak3) {
421         move 'l7v.bak3', '/sbin/l7vsadm';
422         chmod '0755', '/sbin/l7vsadm';
423     }
424 }
425
426 {
427     local $ENV{HOSTNAME} = 'test_host_name';
428     test_argv('ARGV="status"', 6, qw(status));
429     is $main::PROC_ENV{hostname}, 'test_host_name', 'set env HOSTNAME';
430 }
431
432 {
433     local $ENV{HOSTNAME};
434     test_argv('ARGV="status"', 6, qw(status));
435     is $main::PROC_ENV{hostname}, (POSIX::uname())[1], 'set HOSTNAME from uname';
436 }
437     
438     
439
440 sub test_default {
441     is $main::DEBUG_LEVEL,               0, 'default - debug level';
442     is $main::PROC_ENV{l7vsadm},     undef, 'default - l7vsadm path';
443     is $main::CONFIG_FILE{path},     undef, 'default - config path';
444     is $main::CONFIG_FILE{filename}, undef, 'default - config filename';
445     is $main::PROC_ENV{hostname},    undef, 'default - hostname';
446 }
447
448 sub test_argv {
449     my $name = shift;
450     my $expected = shift;
451     local @ARGV = @_;
452     my $return = main();
453     is $return, $expected, $name;
454 }
455
456 # test end
457 #...............................................
458
459 remove_file();
460 L7lib::comment_in();
461
462 sub require_file {
463     open my $d, '>', './l7directord.cf';
464     close $d;
465     open my $v, '>', './l7vsadm';
466     close $v;
467     chmod 0755, './l7vsadm';
468 }
469 sub remove_file {
470     unlink './l7directord.cf';
471     unlink './l7vsadm';
472 }
473 sub override {
474     *cmd_start       = \&__cmd_start;
475     *cmd_stop        = \&__cmd_stop;
476     *cmd_restart     = \&__cmd_restart;
477     *cmd_try_restart = \&__cmd_try_restart;
478     *cmd_reload      = \&__cmd_reload;
479     *cmd_status      = \&__cmd_status;
480     *cmd_configtest  = \&__cmd_configtest;
481     *cmd_version     = \&__cmd_version;
482     *cmd_help        = \&__cmd_help;
483     *cmd_usage       = \&__cmd_usage;
484     *init_error      = \&__init_error;
485     *ld_exit         = \&__ld_exit;
486     *ld_log          = \&__ld_log;
487 }
488 sub __cmd_start {
489     return 1;
490 }
491 sub __cmd_stop {
492     return 2;
493 }
494 sub __cmd_restart {
495     return 3;
496 }
497 sub __cmd_try_restart {
498     return 4;
499 }
500 sub __cmd_reload {
501     return 5;
502 }
503 sub __cmd_status {
504     return 6;
505 }
506 sub __cmd_configtest {
507     return 7;
508 }
509 sub __cmd_version {
510     return 8;
511 }
512 sub __cmd_help {
513     return 9;
514 }
515 sub __cmd_usage {
516     return 10;
517 }
518 sub __init_error {
519     die "init_error\n";
520 }
521 sub __ld_exit {
522     return shift;
523 }
524 sub __ld_log {
525 }