OSDN Git Service

Initial commit from 2.1.2-1
[ultramonkey-l7/ultramonkey-l7-v2.git] / l7directord / t / 05_config.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 Test::More tests => 589;
9
10 L7lib::chdir();
11 L7lib::comment_out();
12 require './l7directord';
13 override();
14
15 our @config_error_args            = ();
16 our @ld_gethostservbyname_args    = undef;
17 our $ld_gethostservbyname_return  = undef;
18 our $ld_gethostservbyname_undef   = 0;
19 our $_ld_service_resolve_called   = 0;
20 our @parse_fallback_args          = ();
21 our $parse_fallback_return        = undef;
22 our @parse_real_args              = ();
23 our $parse_real_return            = undef;
24 our $ld_openlog_arg               = ();
25 our $ld_openlog_return            = undef;
26 our @get_hostservbyname_args      = ();
27 our $get_hostservbyname_return    = undef;
28 our @ld_cmd_children_args         = ();
29 our $system_wrapper_called        = 0;
30 our $system_wrapper_return        = undef;
31 our $ld_setup_die                 = 0;
32 our $read_config_die              = 0;
33 our $read_config_virtual          = [];
34 our $read_config_execute          = {};
35 #...............................................
36 # test start
37 #   - read_config
38 #   - validate_config
39 SKIP: {
40     my $input = <<"CONFIG";
41 CONFIG
42     default_value();
43     create_config($input) or skip 'cannot create config', 2;
44     read_config();
45     is $main::PROC_STAT{initialized}, 1, 'read_config - empty config';
46     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(1)';
47     remove_config();
48 }
49 SKIP: {
50     my $input = <<"CONFIG";
51                 # comment
52
53       # comment
54
55         # comment
56
57   # comment
58
59 # comment
60 CONFIG
61     default_value();
62     create_config($input) or skip 'cannot create config', 2;
63     read_config();
64     is $main::PROC_STAT{initialized}, 1, 'read_config - ignore comment';
65     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(2)';
66     remove_config();
67 }
68 {
69     default_value();
70     eval {
71         read_config();
72     };
73     is $main::PROC_STAT{initialized}, 0, 'read_config - no such config file';
74     is $@, "config_error\n", 'read_config - raise config_error(3)';
75     is_deeply \@config_error_args, [0, 'ERR0407', $main::CONFIG_FILE{path}], 'read_config - config_error args(3)';
76     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(3)';
77 }
78 SKIP: {
79     my $input = <<"CONFIG";
80     #
81 #
82             
83 virtual = virtual_value1        
84 virtual = "virtual_value2"     # comment
85 checktimeout =1   
86 negotiatetimeout=       2
87 checkinterval=3
88 retryinterval='4'
89 configinterval="5"
90 checkcount = 6
91 autoreload = 'no'
92 quiescent  = yes        # comment
93 fallback=fallback_value
94 callback=/bin/cat
95
96 execute= /etc/hosts
97 logfile=        "logfile_value"
98                 #
99 supervised
100
101 virtual = "virtual_value3"     # comment
102         real = real_value1
103         real = real_value2
104         request='request'
105     #
106     receive = receive
107                 login= "login"
108
109       passwd = "passwd"
110         database = database
111         virtualhost='virtualhost'
112     checktype = CoNnEcT
113         checktimeout =1   
114         
115         negotiatetimeout    =   2
116         checkinterval=3
117         retryinterval='4'
118         checkcount = 6
119         maxconn=7
120         checkport = 10000
121       scheduler = rr
122     protocol= tcp
123       service = http
124         httpmethod = 'hEaD'
125     fallback = fallback_value
126       quiescent="yes"
127  #
128     module = url    --pattern-match   "/foo/bar" # comment
129
130         sorryserver= sorryserver_value
131     qosup  = '0'
132     qosdown =999M
133
134     realdowncallback=/bin/cat
135     realrecovercallback = '/bin/cat'
136
137         customcheck  = "/bin/echo"
138     #
139
140 virtual = "virtual_value4"     # comment
141         real = real_value3
142
143     #
144 # end comment...
145 CONFIG
146     my %config = (
147         'autoreload' => 0,
148         'checktimeout' => 1,
149         'quiescent' => 1,
150         'retryinterval' => 4,
151         'negotiatetimeout' => 2,
152         'checkinterval' => 3,
153         'supervised' => 1,
154         'fallback' => { 'tcp' => 'fallback_return' },
155         'configinterval' => 5,
156         'execute' => { '/etc/hosts' => 1 },
157         'callback' => '/bin/cat',
158         'checkcount' => 6,
159         'logfile' => 'logfile_value',
160         'virtual' => [
161             {
162                 'protocol' => 'tcp',
163                 'httpmethod' => 'GET',
164                 'qosdown' => 0,
165                 'retryinterval' => undef,
166                 'negotiatetimeout' => undef,
167                 'checkinterval' => undef,
168                 'server' => {},
169                 'qosup' => 0,
170                 'real' => undef,
171                 'module' => { 'name' => 'sessionless', 'key' => '' },
172                 'checktimeout' => undef,
173                 'request' => undef,
174                 'checktype' => 'negotiate',
175                 'virtualhost' => undef,
176                 'quiescent' => undef,
177                 'realrecovercallback' => undef,
178                 'sorryserver' => undef,
179                 'service' => undef,
180                 'login' => '',
181                 'fallback' => undef,
182                 'passwd' => '',
183                 'receive' => undef,
184                 'database' => '',
185                 'maxconn' => 0,
186                 'checkcount' => undef,
187                 'checkport' => undef,
188                 'scheduler' => 'rr',
189                 'realdowncallback' => undef,
190                 'customcheck' => undef,
191             },
192             {
193                 'protocol' => 'tcp',
194                 'httpmethod' => 'GET',
195                 'qosdown' => 0,
196                 'retryinterval' => undef,
197                 'negotiatetimeout' => undef,
198                 'checkinterval' => undef,
199                 'server' => {},
200                 'qosup' => 0,
201                 'real' => undef,
202                 'module' => { 'name' => 'sessionless', 'key' => '' },
203                 'checktimeout' => undef,
204                 'request' => undef,
205                 'checktype' => 'negotiate',
206                 'virtualhost' => undef,
207                 'quiescent' => undef,
208                 'realrecovercallback' => undef,
209                 'sorryserver' => undef,
210                 'service' => undef,
211                 'login' => '',
212                 'fallback' => undef,
213                 'passwd' => '',
214                 'receive' => undef,
215                 'database' => '',
216                 'maxconn' => 0,
217                 'checkcount' => undef,
218                 'checkport' => undef,
219                 'scheduler' => 'rr',
220                 'realdowncallback' => undef,
221                 'customcheck' => undef,
222             },
223             {
224                 'protocol' => 'tcp',
225                 'httpmethod' => 'HEAD',
226                 'qosdown' => '999M',
227                 'retryinterval' => 4,
228                 'negotiatetimeout' => 2,
229                 'checkinterval' => 3,
230                 'server' => {},
231                 'qosup' => '0',
232                 'real' => ['real', 'real'],
233                 'module' => {
234                     'name' => 'url',
235                     'option' => '--pattern-match   /foo/bar',
236                     'key' => '--pattern-match /foo/bar'
237                     },
238                 'checktimeout' => 1,
239                 'request' => 'request',
240                 'checktype' => 'connect',
241                 'virtualhost' => 'virtualhost',
242                 'quiescent' => 1,
243                 'realrecovercallback' => '/bin/cat',
244                 'sorryserver' => {},
245                 'service' => 'http',
246                 'login' => 'login',
247                 'fallback' => { 'tcp' => 'fallback_return' },
248                 'passwd' => 'passwd',
249                 'receive' => 'receive',
250                 'database' => 'database',
251                 'maxconn' => 7,
252                 'checkcount' => 6,
253                 'checkport' => 10000,
254                 'scheduler' => 'rr',
255                 'realdowncallback' => '/bin/cat',
256                 'customcheck' => '/bin/echo',
257             },
258             {
259                 'protocol' => 'tcp',
260                 'httpmethod' => 'GET',
261                 'qosdown' => 0,
262                 'retryinterval' => undef,
263                 'negotiatetimeout' => undef,
264                 'checkinterval' => undef,
265                 'server' => {},
266                 'qosup' => 0,
267                 'real' => ['real'],
268                 'module' => { 'name' => 'sessionless', 'key' => '' },
269                 'checktimeout' => undef,
270                 'request' => undef,
271                 'checktype' => 'negotiate',
272                 'virtualhost' => undef,
273                 'quiescent' => undef,
274                 'realrecovercallback' => undef,
275                 'sorryserver' => undef,
276                 'service' => undef,
277                 'login' => '',
278                 'fallback' => undef,
279                 'passwd' => '',
280                 'receive' => undef,
281                 'database' => '',
282                 'maxconn' => 0,
283                 'checkcount' => undef,
284                 'checkport' => undef,
285                 'scheduler' => 'rr',
286                 'realdowncallback' => undef,
287                 'customcheck' => undef,
288             }
289         ]
290     );
291     default_value();
292     local $ld_gethostservbyname_return = {};
293     local @ld_gethostservbyname_args   = ();
294     local $_ld_service_resolve_called  = 0;
295     local @parse_fallback_args         = ();
296     local $parse_fallback_return       = 'fallback_return';
297     local @parse_real_args             = ();
298     local $parse_real_return           = ['real'];
299     local $ld_openlog_arg              = ();
300     local $ld_openlog_return           = 0;
301     create_config($input) or skip 'cannot create config', 7;
302     read_config();
303     is $main::PROC_STAT{initialized}, 1, 'read_config - full config';
304     is_deeply \%main::CONFIG, \%config, 'read_config - set all value';
305     is $_ld_service_resolve_called, 4, 'read_config - _ld_service_resolve called';
306     is_deeply \@ld_gethostservbyname_args,
307               ['virtual_value1',    'tcp', 'virtual_value2', 'tcp', 'virtual_value3', 'tcp',
308                'sorryserver_value', 'tcp', 'virtual_value4', 'tcp'],
309               'read_config - _ld_gethostservbyname called';
310     is_deeply \@parse_fallback_args,
311                 [14, 'fallback_value', 'fallback=fallback_value',
312                  46, 'fallback_value', '    fallback = fallback_value'],
313                 'read_config - parse_fallback called';
314     is_deeply \@parse_real_args,
315                 [23, 'real_value1', '    real = real_value1',
316                  24, 'real_value2', '        real = real_value2',
317                  62, 'real_value3', '        real = real_value3'],
318                 'read_config - parse_real called';
319     is $ld_openlog_arg, 'logfile_value', 'read_config - ld_openlog called';
320     remove_config();
321 }
322 SKIP: {
323     my $input = <<"CONFIG";
324 checktimeout=1
325 CONFIG
326     my %config = %main::GLOBAL;
327     $config{checktimeout} = 1;
328     default_value();
329     create_config($input) or skip 'cannot create config', 2;
330     eval {
331         read_config();
332     };
333     is $main::PROC_STAT{initialized}, 1, 'read_config - checktimeout result ok';
334     is_deeply \%main::CONFIG, \%config, 'read_config - checktimeout set config ok';
335     remove_config();
336 }
337 SKIP: {
338     my $input = <<"CONFIG";
339 checktimeout
340 CONFIG
341     default_value();
342     create_config($input) or skip 'cannot create config', 4;
343     eval {
344         read_config();
345     };
346     is $main::PROC_STAT{initialized}, 0, 'read_config - checktimeout not defined';
347     is $@, "config_error\n", 'read_config - raise config_error(4)';
348     is_deeply \@config_error_args, [1, 'ERR0101', 'checktimeout'], 'read_config - config_error args(4)';
349     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(4)';
350     remove_config();
351 }
352 SKIP: {
353     my $input = <<"CONFIG";
354 checktimeout=yes
355 CONFIG
356     default_value();
357     create_config($input) or skip 'cannot create config', 4;
358     eval {
359         read_config();
360     };
361     is $main::PROC_STAT{initialized}, 0, 'read_config - checktimeout not numeric';
362     is $@, "config_error\n", 'read_config - raise config_error(5)';
363     is_deeply \@config_error_args, [1, 'ERR0101', 'checktimeout=yes'], 'read_config - config_error args(5)';
364     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(5)';
365     remove_config();
366 }
367 SKIP: {
368     my $input = <<"CONFIG";
369 checktimeout=0
370 CONFIG
371     default_value();
372     create_config($input) or skip 'cannot create config', 4;
373     eval {
374         read_config();
375     };
376     is $main::PROC_STAT{initialized}, 0, 'read_config - checktimeout zero';
377     is $@, "config_error\n", 'read_config - raise config_error(6)';
378     is_deeply \@config_error_args, [1, 'ERR0101', 'checktimeout=0'], 'read_config - config_error args(6)';
379     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(6)';
380     remove_config();
381 }
382 SKIP: {
383     my $input = <<"CONFIG";
384 negotiatetimeout=1
385 CONFIG
386     my %config = %main::GLOBAL;
387     $config{negotiatetimeout} = 1;
388     default_value();
389     create_config($input) or skip 'cannot create config', 2;
390     eval {
391         read_config();
392     };
393     is $main::PROC_STAT{initialized}, 1, 'read_config - negotiatetimeout result ok';
394     is_deeply \%main::CONFIG, \%config, 'read_config - negotiatetimeout set config ok';
395     remove_config();
396 }
397 SKIP: {
398     my $input = <<"CONFIG";
399 negotiatetimeout
400 CONFIG
401     default_value();
402     create_config($input) or skip 'cannot create config', 4;
403     eval {
404         read_config();
405     };
406     is $main::PROC_STAT{initialized}, 0, 'read_config - negotiatetimeout not defined';
407     is $@, "config_error\n", 'read_config - raise config_error(7)';
408     is_deeply \@config_error_args, [1, 'ERR0101', 'negotiatetimeout'], 'read_config - config_error args(7)';
409     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(7)';
410     remove_config();
411 }
412 SKIP: {
413     my $input = <<"CONFIG";
414 negotiatetimeout=yes
415 CONFIG
416     default_value();
417     create_config($input) or skip 'cannot create config', 4;
418     eval {
419         read_config();
420     };
421     is $main::PROC_STAT{initialized}, 0, 'read_config - negotiatetimeout not numeric';
422     is $@, "config_error\n", 'read_config - raise config_error(8)';
423     is_deeply \@config_error_args, [1, 'ERR0101', 'negotiatetimeout=yes'], 'read_config - config_error args(8)';
424     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(8)';
425     remove_config();
426 }
427 SKIP: {
428     my $input = <<"CONFIG";
429 negotiatetimeout=0
430 CONFIG
431     default_value();
432     create_config($input) or skip 'cannot create config', 4;
433     eval {
434         read_config();
435     };
436     is $main::PROC_STAT{initialized}, 0, 'read_config - negotiatetimeout zero';
437     is $@, "config_error\n", 'read_config - raise config_error(9)';
438     is_deeply \@config_error_args, [1, 'ERR0101', 'negotiatetimeout=0'], 'read_config - config_error args(9)';
439     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(9)';
440     remove_config();
441 }
442 SKIP: {
443     my $input = <<"CONFIG";
444 checkinterval=1
445 CONFIG
446     my %config = %main::GLOBAL;
447     $config{checkinterval} = 1;
448     default_value();
449     create_config($input) or skip 'cannot create config', 2;
450     eval {
451         read_config();
452     };
453     is $main::PROC_STAT{initialized}, 1, 'read_config - checkinterval result ok';
454     is_deeply \%main::CONFIG, \%config, 'read_config - checkinterval set config ok';
455     remove_config();
456 }
457 SKIP: {
458     my $input = <<"CONFIG";
459 checkinterval
460 CONFIG
461     default_value();
462     create_config($input) or skip 'cannot create config', 4;
463     eval {
464         read_config();
465     };
466     is $main::PROC_STAT{initialized}, 0, 'read_config - checkinterval not defined';
467     is $@, "config_error\n", 'read_config - raise config_error(10)';
468     is_deeply \@config_error_args, [1, 'ERR0101', 'checkinterval'], 'read_config - config_error args(10)';
469     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(10)';
470     remove_config();
471 }
472 SKIP: {
473     my $input = <<"CONFIG";
474 checkinterval=yes
475 CONFIG
476     default_value();
477     create_config($input) or skip 'cannot create config', 4;
478     eval {
479         read_config();
480     };
481     is $main::PROC_STAT{initialized}, 0, 'read_config - checkinterval not numeric';
482     is $@, "config_error\n", 'read_config - raise config_error(11)';
483     is_deeply \@config_error_args, [1, 'ERR0101', 'checkinterval=yes'], 'read_config - config_error args(11)';
484     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(11)';
485     remove_config();
486 }
487 SKIP: {
488     my $input = <<"CONFIG";
489 checkinterval=0
490 CONFIG
491     default_value();
492     create_config($input) or skip 'cannot create config', 4;
493     eval {
494         read_config();
495     };
496     is $main::PROC_STAT{initialized}, 0, 'read_config - checkinterval zero';
497     is $@, "config_error\n", 'read_config - raise config_error(12)';
498     is_deeply \@config_error_args, [1, 'ERR0101', 'checkinterval=0'], 'read_config - config_error args(12)';
499     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(12)';
500     remove_config();
501 }
502 SKIP: {
503     my $input = <<"CONFIG";
504 retryinterval=1
505 CONFIG
506     my %config = %main::GLOBAL;
507     $config{retryinterval} = 1;
508     default_value();
509     create_config($input) or skip 'cannot create config', 2;
510     eval {
511         read_config();
512     };
513     is $main::PROC_STAT{initialized}, 1, 'read_config - retryinterval result ok';
514     is_deeply \%main::CONFIG, \%config, 'read_config - retryinterval set config ok';
515     remove_config();
516 }
517 SKIP: {
518     my $input = <<"CONFIG";
519 retryinterval
520 CONFIG
521     default_value();
522     create_config($input) or skip 'cannot create config', 4;
523     eval {
524         read_config();
525     };
526     is $main::PROC_STAT{initialized}, 0, 'read_config - retryinterval not defined';
527     is $@, "config_error\n", 'read_config - raise config_error(13)';
528     is_deeply \@config_error_args, [1, 'ERR0101', 'retryinterval'], 'read_config - config_error args(13)';
529     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(13)';
530     remove_config();
531 }
532 SKIP: {
533     my $input = <<"CONFIG";
534 retryinterval=yes
535 CONFIG
536     default_value();
537     create_config($input) or skip 'cannot create config', 4;
538     eval {
539         read_config();
540     };
541     is $main::PROC_STAT{initialized}, 0, 'read_config - retryinterval not numeric';
542     is $@, "config_error\n", 'read_config - raise config_error(14)';
543     is_deeply \@config_error_args, [1, 'ERR0101', 'retryinterval=yes'], 'read_config - config_error args(14)';
544     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(14)';
545     remove_config();
546 }
547 SKIP: {
548     my $input = <<"CONFIG";
549 retryinterval=0
550 CONFIG
551     default_value();
552     create_config($input) or skip 'cannot create config', 4;
553     eval {
554         read_config();
555     };
556     is $main::PROC_STAT{initialized}, 0, 'read_config - retryinterval zero';
557     is $@, "config_error\n", 'read_config - raise config_error(15)';
558     is_deeply \@config_error_args, [1, 'ERR0101', 'retryinterval=0'], 'read_config - config_error args(15)';
559     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(15)';
560     remove_config();
561 }
562 SKIP: {
563     my $input = <<"CONFIG";
564 configinterval=1
565 CONFIG
566     my %config = %main::GLOBAL;
567     $config{configinterval} = 1;
568     default_value();
569     create_config($input) or skip 'cannot create config', 2;
570     eval {
571         read_config();
572     };
573     is $main::PROC_STAT{initialized}, 1, 'read_config - configinterval result ok';
574     is_deeply \%main::CONFIG, \%config, 'read_config - configinterval set config ok';
575     remove_config();
576 }
577 SKIP: {
578     my $input = <<"CONFIG";
579 configinterval
580 CONFIG
581     default_value();
582     create_config($input) or skip 'cannot create config', 4;
583     eval {
584         read_config();
585     };
586     is $main::PROC_STAT{initialized}, 0, 'read_config - configinterval not defined';
587     is $@, "config_error\n", 'read_config - raise config_error(16)';
588     is_deeply \@config_error_args, [1, 'ERR0101', 'configinterval'], 'read_config - config_error args(16)';
589     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(16)';
590     remove_config();
591 }
592 SKIP: {
593     my $input = <<"CONFIG";
594 configinterval=yes
595 CONFIG
596     default_value();
597     create_config($input) or skip 'cannot create config', 4;
598     eval {
599         read_config();
600     };
601     is $main::PROC_STAT{initialized}, 0, 'read_config - configinterval not numeric';
602     is $@, "config_error\n", 'read_config - raise config_error(17)';
603     is_deeply \@config_error_args, [1, 'ERR0101', 'configinterval=yes'], 'read_config - config_error args(17)';
604     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(17)';
605     remove_config();
606 }
607 SKIP: {
608     my $input = <<"CONFIG";
609 configinterval=0
610 CONFIG
611     default_value();
612     create_config($input) or skip 'cannot create config', 4;
613     eval {
614         read_config();
615     };
616     is $main::PROC_STAT{initialized}, 0, 'read_config - configinterval zero';
617     is $@, "config_error\n", 'read_config - raise config_error(18)';
618     is_deeply \@config_error_args, [1, 'ERR0101', 'configinterval=0'], 'read_config - config_error args(18)';
619     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(18)';
620     remove_config();
621 }
622 SKIP: {
623     my $input = <<"CONFIG";
624 checkcount=1
625 CONFIG
626     my %config = %main::GLOBAL;
627     $config{checkcount} = 1;
628     default_value();
629     create_config($input) or skip 'cannot create config', 2;
630     eval {
631         read_config();
632     };
633     is $main::PROC_STAT{initialized}, 1, 'read_config - checkcount result ok';
634     is_deeply \%main::CONFIG, \%config, 'read_config - checkcount set config ok';
635     remove_config();
636 }
637 SKIP: {
638     my $input = <<"CONFIG";
639 checkcount
640 CONFIG
641     default_value();
642     create_config($input) or skip 'cannot create config', 4;
643     eval {
644         read_config();
645     };
646     is $main::PROC_STAT{initialized}, 0, 'read_config - checkcount not defined';
647     is $@, "config_error\n", 'read_config - raise config_error(19)';
648     is_deeply \@config_error_args, [1, 'ERR0101', 'checkcount'], 'read_config - config_error args(19)';
649     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(19)';
650     remove_config();
651 }
652 SKIP: {
653     my $input = <<"CONFIG";
654 checkcount=yes
655 CONFIG
656     default_value();
657     create_config($input) or skip 'cannot create config', 4;
658     eval {
659         read_config();
660     };
661     is $main::PROC_STAT{initialized}, 0, 'read_config - checkcount not numeric';
662     is $@, "config_error\n", 'read_config - raise config_error(20)';
663     is_deeply \@config_error_args, [1, 'ERR0101', 'checkcount=yes'], 'read_config - config_error args(20)';
664     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(20)';
665     remove_config();
666 }
667 SKIP: {
668     my $input = <<"CONFIG";
669 checkcount=0
670 CONFIG
671     default_value();
672     create_config($input) or skip 'cannot create config', 4;
673     eval {
674         read_config();
675     };
676     is $main::PROC_STAT{initialized}, 0, 'read_config - checkcount zero';
677     is $@, "config_error\n", 'read_config - raise config_error(21)';
678     is_deeply \@config_error_args, [1, 'ERR0101', 'checkcount=0'], 'read_config - config_error args(21)';
679     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(21)';
680     remove_config();
681 }
682 SKIP: {
683     my $input = <<"CONFIG";
684 autoreload=YeS
685 CONFIG
686     my %config = %main::GLOBAL;
687     $config{autoreload} = 1;
688     default_value();
689     create_config($input) or skip 'cannot create config', 2;
690     eval {
691         read_config();
692     };
693     is $main::PROC_STAT{initialized}, 1, 'read_config - autoreload yes result ok';
694     is_deeply \%main::CONFIG, \%config, 'read_config - autoreload yes set config ok';
695     remove_config();
696 }
697 SKIP: {
698     my $input = <<"CONFIG";
699 autoreload=nO
700 CONFIG
701     my %config = %main::GLOBAL;
702     $config{autoreload} = 0;
703     default_value();
704     create_config($input) or skip 'cannot create config', 2;
705     eval {
706         read_config();
707     };
708     is $main::PROC_STAT{initialized}, 1, 'read_config - autoreload no result ok';
709     is_deeply \%main::CONFIG, \%config, 'read_config - autoreload no set config ok';
710     remove_config();
711 }
712 SKIP: {
713     my $input = <<"CONFIG";
714 autoreload
715 CONFIG
716     default_value();
717     create_config($input) or skip 'cannot create config', 4;
718     eval {
719         read_config();
720     };
721     is $main::PROC_STAT{initialized}, 0, 'read_config - autoreload not defined';
722     is $@, "config_error\n", 'read_config - raise config_error(22)';
723     is_deeply \@config_error_args, [1, 'ERR0102', 'autoreload'], 'read_config - config_error args(22)';
724     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(22)';
725     remove_config();
726 }
727 SKIP: {
728     my $input = <<"CONFIG";
729 autoreload=YEAH
730 CONFIG
731     default_value();
732     create_config($input) or skip 'cannot create config', 4;
733     eval {
734         read_config();
735     };
736     is $main::PROC_STAT{initialized}, 0, 'read_config - autoreload not lower yes or no(1)';
737     is $@, "config_error\n", 'read_config - raise config_error(23)';
738     is_deeply \@config_error_args, [1, 'ERR0102', 'autoreload=YEAH'], 'read_config - config_error args(23)';
739     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(23)';
740     remove_config();
741 }
742 SKIP: {
743     my $input = <<"CONFIG";
744 autoreload=0
745 CONFIG
746     default_value();
747     create_config($input) or skip 'cannot create config', 4;
748     eval {
749         read_config();
750     };
751     is $main::PROC_STAT{initialized}, 0, 'read_config - autoreload not lower yes or no(2)';
752     is $@, "config_error\n", 'read_config - raise config_error(24)';
753     is_deeply \@config_error_args, [1, 'ERR0102', 'autoreload=0'], 'read_config - config_error args(24)';
754     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(24)';
755     remove_config();
756 }
757 SKIP: {
758     my $input = <<"CONFIG";
759 quiescent=yEs
760 CONFIG
761     my %config = %main::GLOBAL;
762     $config{quiescent} = 1;
763     default_value();
764     create_config($input) or skip 'cannot create config', 2;
765     eval {
766         read_config();
767     };
768     is $main::PROC_STAT{initialized}, 1, 'read_config - quiescent yes result ok';
769     is_deeply \%main::CONFIG, \%config, 'read_config - quiescent yes set config ok';
770     remove_config();
771 }
772 SKIP: {
773     my $input = <<"CONFIG";
774 quiescent=No
775 CONFIG
776     my %config = %main::GLOBAL;
777     $config{quiescent} = 0;
778     default_value();
779     create_config($input) or skip 'cannot create config', 2;
780     eval {
781         read_config();
782     };
783     is $main::PROC_STAT{initialized}, 1, 'read_config - quiescent no result ok';
784     is_deeply \%main::CONFIG, \%config, 'read_config - quiescent no set config ok';
785     remove_config();
786 }
787 SKIP: {
788     my $input = <<"CONFIG";
789 quiescent
790 CONFIG
791     default_value();
792     create_config($input) or skip 'cannot create config', 4;
793     eval {
794         read_config();
795     };
796     is $main::PROC_STAT{initialized}, 0, 'read_config - quiescent not defined';
797     is $@, "config_error\n", 'read_config - raise config_error(25)';
798     is_deeply \@config_error_args, [1, 'ERR0102', 'quiescent'], 'read_config - config_error args(25)';
799     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(25)';
800     remove_config();
801 }
802 SKIP: {
803     my $input = <<"CONFIG";
804 quiescent=NOPE
805 CONFIG
806     default_value();
807     create_config($input) or skip 'cannot create config', 4;
808     eval {
809         read_config();
810     };
811     is $main::PROC_STAT{initialized}, 0, 'read_config - quiescent not lower yes or no(1)';
812     is $@, "config_error\n", 'read_config - raise config_error(26)';
813     is_deeply \@config_error_args, [1, 'ERR0102', 'quiescent=NOPE'], 'read_config - config_error args(26)';
814     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(26)';
815     remove_config();
816 }
817 SKIP: {
818     my $input = <<"CONFIG";
819 quiescent=0
820 CONFIG
821     default_value();
822     create_config($input) or skip 'cannot create config', 4;
823     eval {
824         read_config();
825     };
826     is $main::PROC_STAT{initialized}, 0, 'read_config - quiescent not lower yes or no(2)';
827     is $@, "config_error\n", 'read_config - raise config_error(27)';
828     is_deeply \@config_error_args, [1, 'ERR0102', 'quiescent=0'], 'read_config - config_error args(27)';
829     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(27)';
830     remove_config();
831 }
832 SKIP: {
833     my $input = <<"CONFIG";
834 fallback
835 CONFIG
836     my %config = %main::GLOBAL;
837     $config{fallback} = { tcp => undef };
838     default_value();
839     create_config($input) or skip 'cannot create config', 3;
840     local @parse_fallback_args = ();
841     local $parse_fallback_return = undef;
842     eval {
843         read_config();
844     };
845     is $main::PROC_STAT{initialized}, 1, 'read_config - fallback not defined';
846     is_deeply \%main::CONFIG, \%config, 'read_config - fallback set undef..';
847     is_deeply \@parse_fallback_args, [1, undef, 'fallback'], 'read_config - parse_fallback_args(1)';
848     remove_config();
849 }
850 SKIP: {
851     my $input = <<"CONFIG";
852 fallback=localhost:http
853 CONFIG
854     my %config = %main::GLOBAL;
855     $config{fallback} = { tcp => 'fallback' };
856     default_value();
857     create_config($input) or skip 'cannot create config', 3;
858     local @parse_fallback_args = ();
859     local $parse_fallback_return = 'fallback';
860     eval {
861         read_config();
862     };
863     is $main::PROC_STAT{initialized}, 1, 'read_config - fallback ok';
864     is_deeply \%main::CONFIG, \%config, 'read_config - fallback set normal';
865     is_deeply \@parse_fallback_args, [1, 'localhost:http', 'fallback=localhost:http'], 'read_config - parse_fallback_args(2)';
866     remove_config();
867 }
868 SKIP: {
869     my $input = <<"CONFIG";
870 callback=/bin/sh
871 CONFIG
872     my %config = %main::GLOBAL;
873     $config{callback} = '/bin/sh';
874     default_value();
875     create_config($input) or skip 'cannot create config', 2;
876     eval {
877         read_config();
878     };
879     is $main::PROC_STAT{initialized}, 1, 'read_config - callback result ok';
880     is_deeply \%main::CONFIG, \%config, 'read_config - callback set config ok';
881     remove_config();
882 }
883 SKIP: {
884     my $input = <<"CONFIG";
885 callback
886 CONFIG
887     default_value();
888     create_config($input) or skip 'cannot create config', 4;
889     eval {
890         read_config();
891     };
892     is $main::PROC_STAT{initialized}, 0, 'read_config - callback not defined';
893     is $@, "config_error\n", 'read_config - raise config_error(28)';
894     is_deeply \@config_error_args, [1, 'ERR0117', 'callback'], 'read_config - config_error args(28)';
895     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(28)';
896     remove_config();
897 }
898 SKIP: {
899     my $input = <<"CONFIG";
900 callback=/proc/1
901 CONFIG
902     default_value();
903     create_config($input) or skip 'cannot create config', 4;
904     eval {
905         read_config();
906     };
907     is $main::PROC_STAT{initialized}, 0, 'read_config - callback cannot execute';
908     is $@, "config_error\n", 'read_config - raise config_error(29)';
909     is_deeply \@config_error_args, [1, 'ERR0117', 'callback=/proc/1'], 'read_config - config_error args(29)';
910     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(29)';
911     remove_config();
912 }
913 SKIP: {
914     my $input = <<"CONFIG";
915 callback=/proc/100000
916 CONFIG
917     default_value();
918     create_config($input) or skip 'cannot create config', 4;
919     eval {
920         read_config();
921     };
922     is $main::PROC_STAT{initialized}, 0, 'read_config - callback no such file';
923     is $@, "config_error\n", 'read_config - raise config_error(30)';
924     is_deeply \@config_error_args, [1, 'ERR0117', 'callback=/proc/100000'], 'read_config - config_error args(30)';
925     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(30)';
926     remove_config();
927 }
928 SKIP: {
929     my $input = <<"CONFIG";
930 callback=/proc
931 CONFIG
932     default_value();
933     create_config($input) or skip 'cannot create config', 4;
934     eval {
935         read_config();
936     };
937     is $main::PROC_STAT{initialized}, 0, 'read_config - callback directory';
938     is $@, "config_error\n", 'read_config - raise config_error(31)';
939     is_deeply \@config_error_args, [1, 'ERR0117', 'callback=/proc'], 'read_config - config_error args(31)';
940     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(31)';
941     remove_config();
942 }
943 SKIP: {
944     my $input = <<"CONFIG";
945 execute=/bin/sh
946 execute=/bin/bash
947 CONFIG
948     my %config = %main::GLOBAL;
949     $config{execute} = { '/bin/sh' => 1, '/bin/bash' => 1 };
950     default_value();
951     create_config($input) or skip 'cannot create config', 2;
952     eval {
953         read_config();
954     };
955     is $main::PROC_STAT{initialized}, 1, 'read_config - execute result ok';
956     is_deeply \%main::CONFIG, \%config, 'read_config - execute set config ok';
957     remove_config();
958 }
959 SKIP: {
960     my $input = <<"CONFIG";
961 execute
962 CONFIG
963     default_value();
964     create_config($input) or skip 'cannot create config', 4;
965     eval {
966         read_config();
967     };
968     is $main::PROC_STAT{initialized}, 0, 'read_config - execute not defined';
969     is $@, "config_error\n", 'read_config - raise config_error(32)';
970     is_deeply \@config_error_args, [1, 'ERR0116', 'execute'], 'read_config - config_error args(32)';
971     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(32)';
972     remove_config();
973 }
974 SKIP: {
975     my $input = <<"CONFIG";
976 execute=/proc/100000
977 CONFIG
978     default_value();
979     create_config($input) or skip 'cannot create config', 4;
980     eval {
981         read_config();
982     };
983     is $main::PROC_STAT{initialized}, 0, 'read_config - execute no such file';
984     is $@, "config_error\n", 'read_config - raise config_error(33)';
985     is_deeply \@config_error_args, [1, 'ERR0116', 'execute=/proc/100000'], 'read_config - config_error args(33)';
986     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(33)';
987     remove_config();
988 }
989 SKIP: {
990     my $input = <<"CONFIG";
991 execute=/proc
992 CONFIG
993     default_value();
994     create_config($input) or skip 'cannot create config', 4;
995     eval {
996         read_config();
997     };
998     is $main::PROC_STAT{initialized}, 0, 'read_config - execute directory';
999     is $@, "config_error\n", 'read_config - raise config_error(34)';
1000     is_deeply \@config_error_args, [1, 'ERR0116', 'execute=/proc'], 'read_config - config_error args(34)';
1001     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(34)';
1002     remove_config();
1003 }
1004 SKIP: {
1005     my $input = <<"CONFIG";
1006 logfile=/bin/sh
1007 CONFIG
1008     my %config = %main::GLOBAL;
1009     $config{logfile} = '/bin/sh';
1010     default_value();
1011     create_config($input) or skip 'cannot create config', 2;
1012     eval {
1013         read_config();
1014     };
1015     is $main::PROC_STAT{initialized}, 1, 'read_config - logfile result ok';
1016     is_deeply \%main::CONFIG, \%config, 'read_config - logfile set config ok';
1017     remove_config();
1018 }
1019 SKIP: {
1020     my $input = <<"CONFIG";
1021 logfile=sys
1022 CONFIG
1023     my %config = %main::GLOBAL;
1024     $config{logfile} = 'sys';
1025     default_value();
1026     create_config($input) or skip 'cannot create config', 2;
1027     local $ld_openlog_arg = undef;
1028     local $ld_openlog_return = 0;
1029     eval {
1030         read_config();
1031     };
1032     is $main::PROC_STAT{initialized}, 1, 'read_config - logfile ld_openlog ok';
1033     is_deeply \%main::CONFIG, \%config, 'read_config - logfile ld_openlog ok';
1034     remove_config();
1035 }
1036 SKIP: {
1037     my $input = <<"CONFIG";
1038 logfile
1039 CONFIG
1040     default_value();
1041     create_config($input) or skip 'cannot create config', 4;
1042     eval {
1043         read_config();
1044     };
1045     is $main::PROC_STAT{initialized}, 0, 'read_config - logfile not defined';
1046     is $@, "config_error\n", 'read_config - raise config_error(35)';
1047     is_deeply \@config_error_args, [1, 'ERR0118', 'logfile'], 'read_config - config_error args(35)';
1048     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(35)';
1049     remove_config();
1050 }
1051 SKIP: {
1052     my $input = <<"CONFIG";
1053 logfile=sys
1054 CONFIG
1055     default_value();
1056     create_config($input) or skip 'cannot create config', 5;
1057     local $ld_openlog_arg = undef;
1058     local $ld_openlog_return = 1;
1059     eval {
1060         read_config();
1061     };
1062     is $main::PROC_STAT{initialized}, 0, 'read_config - logfile ld_openlog fail';
1063     is $@, "config_error\n", 'read_config - raise config_error(36)';
1064     is_deeply \@config_error_args, [1, 'ERR0118', 'logfile=sys'], 'read_config - config_error args(36)';
1065     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(36)';
1066     is $ld_openlog_arg, 'sys', 'read_config - ld_openlog arg';
1067     remove_config();
1068 }
1069 SKIP: {
1070     my $input = <<"CONFIG";
1071 supervised
1072 CONFIG
1073     my %config = %main::GLOBAL;
1074     $config{supervised} = 1;
1075     default_value();
1076     create_config($input) or skip 'cannot create config', 2;
1077     eval {
1078         read_config();
1079     };
1080     is $main::PROC_STAT{initialized}, 1, 'read_config - supervised result ok(1)';
1081     is_deeply \%main::CONFIG, \%config, 'read_config - supervised set config ok(1)';
1082     remove_config();
1083 }
1084 SKIP: {
1085     my $input = <<"CONFIG";
1086 supervised = yes
1087 CONFIG
1088     my %config = %main::GLOBAL;
1089     $config{supervised} = 1;
1090     default_value();
1091     create_config($input) or skip 'cannot create config', 2;
1092     eval {
1093         read_config();
1094     };
1095     is $main::PROC_STAT{initialized}, 1, 'read_config - supervised result ok(2)';
1096     is_deeply \%main::CONFIG, \%config, 'read_config - supervised set config ok(2)';
1097     remove_config();
1098 }
1099 SKIP: {
1100     my $input = <<"CONFIG";
1101 supervised = no
1102 CONFIG
1103     my %config = %main::GLOBAL;
1104     $config{supervised} = 1;
1105     default_value();
1106     create_config($input) or skip 'cannot create config', 2;
1107     eval {
1108         read_config();
1109     };
1110     is $main::PROC_STAT{initialized}, 1, 'read_config - supervised result ok(3)';
1111     is_deeply \%main::CONFIG, \%config, 'read_config - supervised set config ok(3)';
1112     remove_config();
1113 }
1114 SKIP: {
1115     my $input = <<"CONFIG";
1116 unknown
1117 CONFIG
1118     default_value();
1119     create_config($input) or skip 'cannot create config', 4;
1120     eval {
1121         read_config();
1122     };
1123     is $main::PROC_STAT{initialized}, 0, 'read_config - unknown config';
1124     is $@, "config_error\n", 'read_config - raise config_error(37)';
1125     is_deeply \@config_error_args, [1, 'ERR0120', 'unknown'], 'read_config - config_error args(37)';
1126     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(37)';
1127     remove_config();
1128 }
1129 SKIP: {
1130     my $input = <<"CONFIG";
1131 virtual
1132 CONFIG
1133     default_value();
1134     create_config($input) or skip 'cannot create config', 5;
1135     local @ld_gethostservbyname_args = ();
1136     local $ld_gethostservbyname_return = undef;
1137     eval {
1138         read_config();
1139     };
1140     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual not defined';
1141     is $@, "config_error\n", 'read_config - raise config_error(38)';
1142     is_deeply \@config_error_args, [1, 'ERR0114', 'virtual'], 'read_config - config_error args(38)';
1143     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - not set anything(38)';
1144     is_deeply \@ld_gethostservbyname_args, [undef, 'tcp'], 'read_config - ld_gethostservbyname args(1)';
1145     remove_config();
1146 }
1147 SKIP: {
1148     my $input = <<"CONFIG";
1149 virtual=localhost:http
1150 CONFIG
1151     default_value();
1152     create_config($input) or skip 'cannot create config', 4;
1153     local @ld_gethostservbyname_args = ();
1154     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1155     eval {
1156         read_config();
1157     };
1158     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual normal ok';
1159     is $main::CONFIG{virtual}[0]{server}{ip}, '127.0.0.1', 'read_config - set virtual ip ok';
1160     is $main::CONFIG{virtual}[0]{server}{port}, 80, 'read_config - set virtual port ok';
1161     is_deeply \@ld_gethostservbyname_args, ['localhost:http', 'tcp'], 'read_config - ld_gethostservbyname args(2)';
1162     remove_config();
1163 }
1164 SKIP: {
1165     my $input = <<"CONFIG";
1166     real=localhost:http
1167 CONFIG
1168     default_value();
1169     create_config($input) or skip 'cannot create config', 4;
1170     eval {
1171         read_config();
1172     };
1173     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - no virtual line';
1174     is $@, "config_error\n", 'read_config - virtual section - raise config_error(1)';
1175     is_deeply \@config_error_args, [1, 'ERR0119', '    real=localhost:http'], 'read_config - virtual section - config_error args(1)';
1176     is_deeply \%main::CONFIG, \%main::GLOBAL, 'read_config - virtual section - not set anything(1)';
1177     remove_config();
1178 }
1179 SKIP: {
1180     my $input = <<"CONFIG";
1181 virtual=localhost:http
1182     unknown
1183 CONFIG
1184     default_value();
1185     create_config($input) or skip 'cannot create config', 3;
1186     local @ld_gethostservbyname_args = ();
1187     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1188     eval {
1189         read_config();
1190     };
1191     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - unknown config';
1192     is $@, "config_error\n", 'read_config - virtual section - raise config_error(2)';
1193     is_deeply \@config_error_args, [2, 'ERR0120', '    unknown'], 'read_config - virtual section - config_error args(2)';
1194     remove_config();
1195 }
1196 SKIP: {
1197     my $input = <<"CONFIG";
1198 virtual=localhost:http
1199     real="realhost1:ftp"
1200     real="realhost2:ftp"
1201 CONFIG
1202     default_value();
1203     create_config($input) or skip 'cannot create config', 6;
1204     local @ld_gethostservbyname_args = ();
1205     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1206     local @parse_real_args = ();
1207     local $parse_real_return = [ {server => { ip => '127.0.0.2', port => 21 } } ];
1208     eval {
1209         read_config();
1210     };
1211     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - real ok';
1212     is $main::CONFIG{virtual}[0]{real}[0]{server}{ip}, '127.0.0.2', 'read_config - virtual section - set real ip ok(1)';
1213     is $main::CONFIG{virtual}[0]{real}[0]{server}{port}, 21, 'read_config - virtual section - set real port ok(1)';
1214     is $main::CONFIG{virtual}[0]{real}[1]{server}{ip}, '127.0.0.2', 'read_config - virtual section - set real ip ok(2)';
1215     is $main::CONFIG{virtual}[0]{real}[1]{server}{port}, 21, 'read_config - virtual section - set real port ok(2)';
1216     is_deeply \@parse_real_args, [2, 'realhost1:ftp', '    real="realhost1:ftp"',
1217                                   3, 'realhost2:ftp', '    real="realhost2:ftp"'], 'read_config - virtual section - parse_real args';
1218     remove_config();
1219 }
1220 SKIP: {
1221     my $input = <<"CONFIG";
1222 virtual=localhost:http
1223     real
1224 CONFIG
1225     default_value();
1226     create_config($input) or skip 'cannot create config', 3;
1227     local @ld_gethostservbyname_args = ();
1228     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1229     local @parse_real_args = ();
1230     local $parse_real_return = undef;
1231     eval {
1232         read_config();
1233     };
1234     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - real not defined';
1235     is_deeply \@parse_real_args, [2, undef, '    real'], 'read_config - virtual section - parse_real args(3)';
1236     remove_config();
1237 }
1238 SKIP: {
1239     my $input = <<"CONFIG";
1240 virtual=localhost:http
1241     request="/index.html"
1242 CONFIG
1243     default_value();
1244     create_config($input) or skip 'cannot create config', 2;
1245     local @ld_gethostservbyname_args = ();
1246     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1247     eval {
1248         read_config();
1249     };
1250     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - request ok';
1251     is $main::CONFIG{virtual}[0]{request}, '/index.html', 'read_config - virtual section - set request ok';
1252     remove_config();
1253 }
1254 SKIP: {
1255     my $input = <<"CONFIG";
1256 virtual=localhost:http
1257     request =
1258 CONFIG
1259     default_value();
1260     create_config($input) or skip 'cannot create config', 3;
1261     local @ld_gethostservbyname_args = ();
1262     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1263     eval {
1264         read_config();
1265     };
1266     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - request not defined';
1267     is $@, "config_error\n", 'read_config - virtual section - raise config_error(4)';
1268     is_deeply \@config_error_args, [2, 'ERR0103', '    request ='], 'read_config - virtual section - config_error args(4)';
1269     remove_config();
1270 }
1271 SKIP: {
1272     my $input = <<"CONFIG";
1273 virtual=localhost:http
1274     request = ""
1275 CONFIG
1276     default_value();
1277     create_config($input) or skip 'cannot create config', 3;
1278     local @ld_gethostservbyname_args = ();
1279     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1280     eval {
1281         read_config();
1282     };
1283     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - empty request';
1284     is $@, "config_error\n", 'read_config - virtual section - raise config_error(5)';
1285     is_deeply \@config_error_args, [2, 'ERR0103', '    request = ""'], 'read_config - virtual section - config_error args(5)';
1286     remove_config();
1287 }
1288 SKIP: {
1289     my $input = <<"CONFIG";
1290 virtual=localhost:http
1291     receive='body'
1292 CONFIG
1293     default_value();
1294     create_config($input) or skip 'cannot create config', 2;
1295     local @ld_gethostservbyname_args = ();
1296     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1297     eval {
1298         read_config();
1299     };
1300     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - receive ok';
1301     is $main::CONFIG{virtual}[0]{receive}, 'body', 'read_config - virtual section - set receive ok';
1302     remove_config();
1303 }
1304 SKIP: {
1305     my $input = <<"CONFIG";
1306 virtual=localhost:http
1307     receive =
1308 CONFIG
1309     default_value();
1310     create_config($input) or skip 'cannot create config', 3;
1311     local @ld_gethostservbyname_args = ();
1312     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1313     eval {
1314         read_config();
1315     };
1316     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - receive not defined';
1317     is $@, "config_error\n", 'read_config - virtual section - raise config_error(4)';
1318     is_deeply \@config_error_args, [2, 'ERR0103', '    receive ='], 'read_config - virtual section - config_error args(4)';
1319     remove_config();
1320 }
1321 SKIP: {
1322     my $input = <<"CONFIG";
1323 virtual=localhost:http
1324     receive = ""
1325 CONFIG
1326     default_value();
1327     create_config($input) or skip 'cannot create config', 3;
1328     local @ld_gethostservbyname_args = ();
1329     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1330     eval {
1331         read_config();
1332     };
1333     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - empty receive';
1334     is $@, "config_error\n", 'read_config - virtual section - raise config_error(5)';
1335     is_deeply \@config_error_args, [2, 'ERR0103', '    receive = ""'], 'read_config - virtual section - config_error args(5)';
1336     remove_config();
1337 }
1338 SKIP: {
1339     my $input = <<"CONFIG";
1340 virtual=localhost:http
1341     login= anonymous
1342 CONFIG
1343     default_value();
1344     create_config($input) or skip 'cannot create config', 2;
1345     local @ld_gethostservbyname_args = ();
1346     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1347     eval {
1348         read_config();
1349     };
1350     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - login ok';
1351     is $main::CONFIG{virtual}[0]{login}, 'anonymous', 'read_config - virtual section - set login ok';
1352     remove_config();
1353 }
1354 SKIP: {
1355     my $input = <<"CONFIG";
1356 virtual=localhost:http
1357     login =
1358 CONFIG
1359     default_value();
1360     create_config($input) or skip 'cannot create config', 3;
1361     local @ld_gethostservbyname_args = ();
1362     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1363     eval {
1364         read_config();
1365     };
1366     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - login not defined';
1367     is $@, "config_error\n", 'read_config - virtual section - raise config_error(4)';
1368     is_deeply \@config_error_args, [2, 'ERR0103', '    login ='], 'read_config - virtual section - config_error args(4)';
1369     remove_config();
1370 }
1371 SKIP: {
1372     my $input = <<"CONFIG";
1373 virtual=localhost:http
1374     login = ""
1375 CONFIG
1376     default_value();
1377     create_config($input) or skip 'cannot create config', 3;
1378     local @ld_gethostservbyname_args = ();
1379     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1380     eval {
1381         read_config();
1382     };
1383     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - empty login';
1384     is $@, "config_error\n", 'read_config - virtual section - raise config_error(5)';
1385     is_deeply \@config_error_args, [2, 'ERR0103', '    login = ""'], 'read_config - virtual section - config_error args(5)';
1386     remove_config();
1387 }
1388 SKIP: {
1389     my $input = <<"CONFIG";
1390 virtual=localhost:http
1391     passwd = "ftp\@localhost"
1392 CONFIG
1393     default_value();
1394     create_config($input) or skip 'cannot create config', 2;
1395     local @ld_gethostservbyname_args = ();
1396     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1397     eval {
1398         read_config();
1399     };
1400     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - passwd ok';
1401     is $main::CONFIG{virtual}[0]{passwd}, 'ftp@localhost', 'read_config - virtual section - set passwd ok';
1402     remove_config();
1403 }
1404 SKIP: {
1405     my $input = <<"CONFIG";
1406 virtual=localhost:http
1407     passwd =
1408 CONFIG
1409     default_value();
1410     create_config($input) or skip 'cannot create config', 3;
1411     local @ld_gethostservbyname_args = ();
1412     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1413     eval {
1414         read_config();
1415     };
1416     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - passwd not defined';
1417     is $@, "config_error\n", 'read_config - virtual section - raise config_error(4)';
1418     is_deeply \@config_error_args, [2, 'ERR0103', '    passwd ='], 'read_config - virtual section - config_error args(4)';
1419     remove_config();
1420 }
1421 SKIP: {
1422     my $input = <<"CONFIG";
1423 virtual=localhost:http
1424     passwd = ""
1425 CONFIG
1426     default_value();
1427     create_config($input) or skip 'cannot create config', 3;
1428     local @ld_gethostservbyname_args = ();
1429     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1430     eval {
1431         read_config();
1432     };
1433     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - empty passwd';
1434     is $@, "config_error\n", 'read_config - virtual section - raise config_error(5)';
1435     is_deeply \@config_error_args, [2, 'ERR0103', '    passwd = ""'], 'read_config - virtual section - config_error args(5)';
1436     remove_config();
1437 }
1438 SKIP: {
1439     my $input = <<"CONFIG";
1440 virtual=localhost:http
1441     database = "template"
1442 CONFIG
1443     default_value();
1444     create_config($input) or skip 'cannot create config', 2;
1445     local @ld_gethostservbyname_args = ();
1446     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1447     eval {
1448         read_config();
1449     };
1450     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - database ok';
1451     is $main::CONFIG{virtual}[0]{database}, 'template', 'read_config - virtual section - set database ok';
1452     remove_config();
1453 }
1454 SKIP: {
1455     my $input = <<"CONFIG";
1456 virtual=localhost:http
1457     database =
1458 CONFIG
1459     default_value();
1460     create_config($input) or skip 'cannot create config', 3;
1461     local @ld_gethostservbyname_args = ();
1462     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1463     eval {
1464         read_config();
1465     };
1466     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - database not defined';
1467     is $@, "config_error\n", 'read_config - virtual section - raise config_error(4)';
1468     is_deeply \@config_error_args, [2, 'ERR0103', '    database ='], 'read_config - virtual section - config_error args(4)';
1469     remove_config();
1470 }
1471 SKIP: {
1472     my $input = <<"CONFIG";
1473 virtual=localhost:http
1474     database = ""
1475 CONFIG
1476     default_value();
1477     create_config($input) or skip 'cannot create config', 3;
1478     local @ld_gethostservbyname_args = ();
1479     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1480     eval {
1481         read_config();
1482     };
1483     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - empty database';
1484     is $@, "config_error\n", 'read_config - virtual section - raise config_error(5)';
1485     is_deeply \@config_error_args, [2, 'ERR0103', '    database = ""'], 'read_config - virtual section - config_error args(5)';
1486     remove_config();
1487 }
1488 SKIP: {
1489     my $input = <<"CONFIG";
1490 virtual=localhost:http
1491     virtualhost = "vip.domain.com"
1492 CONFIG
1493     default_value();
1494     create_config($input) or skip 'cannot create config', 2;
1495     local @ld_gethostservbyname_args = ();
1496     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1497     eval {
1498         read_config();
1499     };
1500     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - virtualhost ok';
1501     is $main::CONFIG{virtual}[0]{virtualhost}, 'vip.domain.com', 'read_config - virtual section - set virtualhost ok';
1502     remove_config();
1503 }
1504 SKIP: {
1505     my $input = <<"CONFIG";
1506 virtual=localhost:http
1507     virtualhost =
1508 CONFIG
1509     default_value();
1510     create_config($input) or skip 'cannot create config', 3;
1511     local @ld_gethostservbyname_args = ();
1512     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1513     eval {
1514         read_config();
1515     };
1516     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - virtualhost not defined';
1517     is $@, "config_error\n", 'read_config - virtual section - raise config_error(4)';
1518     is_deeply \@config_error_args, [2, 'ERR0103', '    virtualhost ='], 'read_config - virtual section - config_error args(4)';
1519     remove_config();
1520 }
1521 SKIP: {
1522     my $input = <<"CONFIG";
1523 virtual=localhost:http
1524     virtualhost = ""
1525 CONFIG
1526     default_value();
1527     create_config($input) or skip 'cannot create config', 3;
1528     local @ld_gethostservbyname_args = ();
1529     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1530     eval {
1531         read_config();
1532     };
1533     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - empty virtualhost';
1534     is $@, "config_error\n", 'read_config - virtual section - raise config_error(5)';
1535     is_deeply \@config_error_args, [2, 'ERR0103', '    virtualhost = ""'], 'read_config - virtual section - config_error args(5)';
1536     remove_config();
1537 }
1538 SKIP: {
1539     my $input = <<"CONFIG";
1540 virtual=localhost:http
1541     checktype = CoNnEcT
1542 CONFIG
1543     default_value();
1544     create_config($input) or skip 'cannot create config', 2;
1545     local @ld_gethostservbyname_args = ();
1546     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1547     eval {
1548         read_config();
1549     };
1550     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - checktype connect ok';
1551     is $main::CONFIG{virtual}[0]{checktype}, 'connect', 'read_config - virtual section - set checktype connect ok';
1552     remove_config();
1553 }
1554 SKIP: {
1555     my $input = <<"CONFIG";
1556 virtual=localhost:http
1557     checktype = nEgOtIaTe
1558 CONFIG
1559     default_value();
1560     create_config($input) or skip 'cannot create config', 2;
1561     local @ld_gethostservbyname_args = ();
1562     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1563     eval {
1564         read_config();
1565     };
1566     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - checktype negotiate ok';
1567     is $main::CONFIG{virtual}[0]{checktype}, 'negotiate', 'read_config - virtual section - set checktype negotiate ok';
1568     remove_config();
1569 }
1570 SKIP: {
1571     my $input = <<"CONFIG";
1572 virtual=localhost:http
1573     checktype = piNG
1574 CONFIG
1575     default_value();
1576     create_config($input) or skip 'cannot create config', 2;
1577     local @ld_gethostservbyname_args = ();
1578     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1579     eval {
1580         read_config();
1581     };
1582     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - checktype ping ok';
1583     is $main::CONFIG{virtual}[0]{checktype}, 'ping', 'read_config - virtual section - set checktype ping ok';
1584     remove_config();
1585 }
1586 SKIP: {
1587     my $input = <<"CONFIG";
1588 virtual=localhost:http
1589     checktype = Off
1590 CONFIG
1591     default_value();
1592     create_config($input) or skip 'cannot create config', 2;
1593     local @ld_gethostservbyname_args = ();
1594     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1595     eval {
1596         read_config();
1597     };
1598     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - checktype off ok';
1599     is $main::CONFIG{virtual}[0]{checktype}, 'off', 'read_config - virtual section - set checktype off ok';
1600     remove_config();
1601 }
1602 SKIP: {
1603     my $input = <<"CONFIG";
1604 virtual=localhost:http
1605     checktype = oN
1606 CONFIG
1607     default_value();
1608     create_config($input) or skip 'cannot create config', 2;
1609     local @ld_gethostservbyname_args = ();
1610     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1611     eval {
1612         read_config();
1613     };
1614     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - checktype on ok';
1615     is $main::CONFIG{virtual}[0]{checktype}, 'on', 'read_config - virtual section - set checktype on ok';
1616     remove_config();
1617 }
1618 SKIP: {
1619     my $input = <<"CONFIG";
1620 virtual=localhost:http
1621     checktype = 1
1622 CONFIG
1623     default_value();
1624     create_config($input) or skip 'cannot create config', 2;
1625     local @ld_gethostservbyname_args = ();
1626     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1627     eval {
1628         read_config();
1629     };
1630     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - checktype combined ok';
1631     is $main::CONFIG{virtual}[0]{checktype}, '1', 'read_config - virtual section - set checktype combined ok';
1632     remove_config();
1633 }
1634 SKIP: {
1635     my $input = <<"CONFIG";
1636 virtual=localhost:http
1637     checktype =
1638 CONFIG
1639     default_value();
1640     create_config($input) or skip 'cannot create config', 3;
1641     local @ld_gethostservbyname_args = ();
1642     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1643     eval {
1644         read_config();
1645     };
1646     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checktype not defined';
1647     is $@, "config_error\n", 'read_config - virtual section - raise config_error(6)';
1648     is_deeply \@config_error_args, [2, 'ERR0104', '    checktype ='], 'read_config - virtual section - config_error args(6)';
1649     remove_config();
1650 }
1651 SKIP: {
1652     my $input = <<"CONFIG";
1653 virtual=localhost:http
1654     checktype = unknown
1655 CONFIG
1656     default_value();
1657     create_config($input) or skip 'cannot create config', 3;
1658     local @ld_gethostservbyname_args = ();
1659     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1660     eval {
1661         read_config();
1662     };
1663     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checktype not valid';
1664     is $@, "config_error\n", 'read_config - virtual section - raise config_error(7)';
1665     is_deeply \@config_error_args, [2, 'ERR0104', '    checktype = unknown'], 'read_config - virtual section - config_error args(7)';
1666     remove_config();
1667 }
1668 SKIP: {
1669     my $input = <<"CONFIG";
1670 virtual=localhost:http
1671     checktype = 0
1672 CONFIG
1673     default_value();
1674     create_config($input) or skip 'cannot create config', 3;
1675     local @ld_gethostservbyname_args = ();
1676     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1677     eval {
1678         read_config();
1679     };
1680     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checktype is zero';
1681     is $@, "config_error\n", 'read_config - virtual section - raise config_error(8)';
1682     is_deeply \@config_error_args, [2, 'ERR0104', '    checktype = 0'], 'read_config - virtual section - config_error args(8)';
1683     remove_config();
1684 }
1685 SKIP: {
1686     my $input = <<"CONFIG";
1687 virtual=localhost:http
1688     checktimeout = '1'
1689 CONFIG
1690     default_value();
1691     create_config($input) or skip 'cannot create config', 2;
1692     local @ld_gethostservbyname_args = ();
1693     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1694     eval {
1695         read_config();
1696     };
1697     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - checktimeout ok';
1698     is $main::CONFIG{virtual}[0]{checktimeout}, '1', 'read_config - virtual section - set checktimeout ok';
1699     remove_config();
1700 }
1701 SKIP: {
1702     my $input = <<"CONFIG";
1703 virtual=localhost:http
1704     checktimeout
1705 CONFIG
1706     default_value();
1707     create_config($input) or skip 'cannot create config', 3;
1708     local @ld_gethostservbyname_args = ();
1709     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1710     eval {
1711         read_config();
1712     };
1713     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checktimeout not defined';
1714     is $@, "config_error\n", 'read_config - virtual section - raise config_error(9)';
1715     is_deeply \@config_error_args, [2, 'ERR0101', '    checktimeout'], 'read_config - virtual section - config_error args(9)';
1716     remove_config();
1717 }
1718 SKIP: {
1719     my $input = <<"CONFIG";
1720 virtual=localhost:http
1721     checktimeout = yes
1722 CONFIG
1723     default_value();
1724     create_config($input) or skip 'cannot create config', 3;
1725     local @ld_gethostservbyname_args = ();
1726     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1727     eval {
1728         read_config();
1729     };
1730     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checktimeout not numeric';
1731     is $@, "config_error\n", 'read_config - virtual section - raise config_error(10)';
1732     is_deeply \@config_error_args, [2, 'ERR0101', '    checktimeout = yes'], 'read_config - virtual section - config_error args(10)';
1733     remove_config();
1734 }
1735 SKIP: {
1736     my $input = <<"CONFIG";
1737 virtual=localhost:http
1738     checktimeout = 0
1739 CONFIG
1740     default_value();
1741     create_config($input) or skip 'cannot create config', 3;
1742     local @ld_gethostservbyname_args = ();
1743     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1744     eval {
1745         read_config();
1746     };
1747     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checktimeout is zero';
1748     is $@, "config_error\n", 'read_config - virtual section - raise config_error(11)';
1749     is_deeply \@config_error_args, [2, 'ERR0101', '    checktimeout = 0'], 'read_config - virtual section - config_error args(11)';
1750     remove_config();
1751 }
1752 SKIP: {
1753     my $input = <<"CONFIG";
1754 virtual=localhost:http
1755     negotiatetimeout = '1'
1756 CONFIG
1757     default_value();
1758     create_config($input) or skip 'cannot create config', 2;
1759     local @ld_gethostservbyname_args = ();
1760     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1761     eval {
1762         read_config();
1763     };
1764     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - negotiatetimeout ok';
1765     is $main::CONFIG{virtual}[0]{negotiatetimeout}, '1', 'read_config - virtual section - set negotiatetimeout ok';
1766     remove_config();
1767 }
1768 SKIP: {
1769     my $input = <<"CONFIG";
1770 virtual=localhost:http
1771     negotiatetimeout
1772 CONFIG
1773     default_value();
1774     create_config($input) or skip 'cannot create config', 3;
1775     local @ld_gethostservbyname_args = ();
1776     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1777     eval {
1778         read_config();
1779     };
1780     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - negotiatetimeout not defined';
1781     is $@, "config_error\n", 'read_config - virtual section - raise config_error(12)';
1782     is_deeply \@config_error_args, [2, 'ERR0101', '    negotiatetimeout'], 'read_config - virtual section - config_error args(12)';
1783     remove_config();
1784 }
1785 SKIP: {
1786     my $input = <<"CONFIG";
1787 virtual=localhost:http
1788     negotiatetimeout = yes
1789 CONFIG
1790     default_value();
1791     create_config($input) or skip 'cannot create config', 3;
1792     local @ld_gethostservbyname_args = ();
1793     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1794     eval {
1795         read_config();
1796     };
1797     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - negotiatetimeout not numeric';
1798     is $@, "config_error\n", 'read_config - virtual section - raise config_error(13)';
1799     is_deeply \@config_error_args, [2, 'ERR0101', '    negotiatetimeout = yes'], 'read_config - virtual section - config_error args(13)';
1800     remove_config();
1801 }
1802 SKIP: {
1803     my $input = <<"CONFIG";
1804 virtual=localhost:http
1805     negotiatetimeout = 0
1806 CONFIG
1807     default_value();
1808     create_config($input) or skip 'cannot create config', 3;
1809     local @ld_gethostservbyname_args = ();
1810     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1811     eval {
1812         read_config();
1813     };
1814     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - negotiatetimeout is zero';
1815     is $@, "config_error\n", 'read_config - virtual section - raise config_error(14)';
1816     is_deeply \@config_error_args, [2, 'ERR0101', '    negotiatetimeout = 0'], 'read_config - virtual section - config_error args(14)';
1817     remove_config();
1818 }
1819 SKIP: {
1820     my $input = <<"CONFIG";
1821 virtual=localhost:http
1822     checkinterval = '1'
1823 CONFIG
1824     default_value();
1825     create_config($input) or skip 'cannot create config', 2;
1826     local @ld_gethostservbyname_args = ();
1827     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1828     eval {
1829         read_config();
1830     };
1831     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - checkinterval ok';
1832     is $main::CONFIG{virtual}[0]{checkinterval}, '1', 'read_config - virtual section - set checkinterval ok';
1833     remove_config();
1834 }
1835 SKIP: {
1836     my $input = <<"CONFIG";
1837 virtual=localhost:http
1838     checkinterval
1839 CONFIG
1840     default_value();
1841     create_config($input) or skip 'cannot create config', 3;
1842     local @ld_gethostservbyname_args = ();
1843     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1844     eval {
1845         read_config();
1846     };
1847     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checkinterval not defined';
1848     is $@, "config_error\n", 'read_config - virtual section - raise config_error(15)';
1849     is_deeply \@config_error_args, [2, 'ERR0101', '    checkinterval'], 'read_config - virtual section - config_error args(15)';
1850     remove_config();
1851 }
1852 SKIP: {
1853     my $input = <<"CONFIG";
1854 virtual=localhost:http
1855     checkinterval = yes
1856 CONFIG
1857     default_value();
1858     create_config($input) or skip 'cannot create config', 3;
1859     local @ld_gethostservbyname_args = ();
1860     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1861     eval {
1862         read_config();
1863     };
1864     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checkinterval not numeric';
1865     is $@, "config_error\n", 'read_config - virtual section - raise config_error(16)';
1866     is_deeply \@config_error_args, [2, 'ERR0101', '    checkinterval = yes'], 'read_config - virtual section - config_error args(16)';
1867     remove_config();
1868 }
1869 SKIP: {
1870     my $input = <<"CONFIG";
1871 virtual=localhost:http
1872     checkinterval = 0
1873 CONFIG
1874     default_value();
1875     create_config($input) or skip 'cannot create config', 3;
1876     local @ld_gethostservbyname_args = ();
1877     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1878     eval {
1879         read_config();
1880     };
1881     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checkinterval is zero';
1882     is $@, "config_error\n", 'read_config - virtual section - raise config_error(17)';
1883     is_deeply \@config_error_args, [2, 'ERR0101', '    checkinterval = 0'], 'read_config - virtual section - config_error args(17)';
1884     remove_config();
1885 }
1886 SKIP: {
1887     my $input = <<"CONFIG";
1888 virtual=localhost:http
1889     retryinterval = '1'
1890 CONFIG
1891     default_value();
1892     create_config($input) or skip 'cannot create config', 2;
1893     local @ld_gethostservbyname_args = ();
1894     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1895     eval {
1896         read_config();
1897     };
1898     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - retryinterval ok';
1899     is $main::CONFIG{virtual}[0]{retryinterval}, '1', 'read_config - virtual section - set retryinterval ok';
1900     remove_config();
1901 }
1902 SKIP: {
1903     my $input = <<"CONFIG";
1904 virtual=localhost:http
1905     retryinterval
1906 CONFIG
1907     default_value();
1908     create_config($input) or skip 'cannot create config', 3;
1909     local @ld_gethostservbyname_args = ();
1910     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1911     eval {
1912         read_config();
1913     };
1914     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - retryinterval not defined';
1915     is $@, "config_error\n", 'read_config - virtual section - raise config_error(18)';
1916     is_deeply \@config_error_args, [2, 'ERR0101', '    retryinterval'], 'read_config - virtual section - config_error args(18)';
1917     remove_config();
1918 }
1919 SKIP: {
1920     my $input = <<"CONFIG";
1921 virtual=localhost:http
1922     retryinterval = yes
1923 CONFIG
1924     default_value();
1925     create_config($input) or skip 'cannot create config', 3;
1926     local @ld_gethostservbyname_args = ();
1927     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1928     eval {
1929         read_config();
1930     };
1931     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - retryinterval not numeric';
1932     is $@, "config_error\n", 'read_config - virtual section - raise config_error(19)';
1933     is_deeply \@config_error_args, [2, 'ERR0101', '    retryinterval = yes'], 'read_config - virtual section - config_error args(19)';
1934     remove_config();
1935 }
1936 SKIP: {
1937     my $input = <<"CONFIG";
1938 virtual=localhost:http
1939     retryinterval = 0
1940 CONFIG
1941     default_value();
1942     create_config($input) or skip 'cannot create config', 3;
1943     local @ld_gethostservbyname_args = ();
1944     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1945     eval {
1946         read_config();
1947     };
1948     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - retryinterval is zero';
1949     is $@, "config_error\n", 'read_config - virtual section - raise config_error(20)';
1950     is_deeply \@config_error_args, [2, 'ERR0101', '    retryinterval = 0'], 'read_config - virtual section - config_error args(20)';
1951     remove_config();
1952 }
1953 SKIP: {
1954     my $input = <<"CONFIG";
1955 virtual=localhost:http
1956     checkcount = "1"
1957 CONFIG
1958     default_value();
1959     create_config($input) or skip 'cannot create config', 2;
1960     local @ld_gethostservbyname_args = ();
1961     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1962     eval {
1963         read_config();
1964     };
1965     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - checkcount ok';
1966     is $main::CONFIG{virtual}[0]{checkcount}, '1', 'read_config - virtual section - set checkcount ok';
1967     remove_config();
1968 }
1969 SKIP: {
1970     my $input = <<"CONFIG";
1971 virtual=localhost:http
1972     checkcount
1973 CONFIG
1974     default_value();
1975     create_config($input) or skip 'cannot create config', 3;
1976     local @ld_gethostservbyname_args = ();
1977     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1978     eval {
1979         read_config();
1980     };
1981     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checkcount not defined';
1982     is $@, "config_error\n", 'read_config - virtual section - raise config_error(21)';
1983     is_deeply \@config_error_args, [2, 'ERR0101', '    checkcount'], 'read_config - virtual section - config_error args(21)';
1984     remove_config();
1985 }
1986 SKIP: {
1987     my $input = <<"CONFIG";
1988 virtual=localhost:http
1989     checkcount = yes
1990 CONFIG
1991     default_value();
1992     create_config($input) or skip 'cannot create config', 3;
1993     local @ld_gethostservbyname_args = ();
1994     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
1995     eval {
1996         read_config();
1997     };
1998     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checkcount not numeric';
1999     is $@, "config_error\n", 'read_config - virtual section - raise config_error(22)';
2000     is_deeply \@config_error_args, [2, 'ERR0101', '    checkcount = yes'], 'read_config - virtual section - config_error args(22)';
2001     remove_config();
2002 }
2003 SKIP: {
2004     my $input = <<"CONFIG";
2005 virtual=localhost:http
2006     checkcount = 0
2007 CONFIG
2008     default_value();
2009     create_config($input) or skip 'cannot create config', 3;
2010     local @ld_gethostservbyname_args = ();
2011     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2012     eval {
2013         read_config();
2014     };
2015     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checkcount is zero';
2016     is $@, "config_error\n", 'read_config - virtual section - raise config_error(23)';
2017     is_deeply \@config_error_args, [2, 'ERR0101', '    checkcount = 0'], 'read_config - virtual section - config_error args(23)';
2018     remove_config();
2019 }
2020 SKIP: {
2021     my $input = <<"CONFIG";
2022 virtual=localhost:http
2023     maxconn = 0
2024 CONFIG
2025     default_value();
2026     create_config($input) or skip 'cannot create config', 2;
2027     local @ld_gethostservbyname_args = ();
2028     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2029     eval {
2030         read_config();
2031     };
2032     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - maxconn ok';
2033     is $main::CONFIG{virtual}[0]{maxconn}, '0', 'read_config - virtual section - set maxconn ok';
2034     remove_config();
2035 }
2036 SKIP: {
2037     my $input = <<"CONFIG";
2038 virtual=localhost:http
2039     maxconn
2040 CONFIG
2041     default_value();
2042     create_config($input) or skip 'cannot create config', 3;
2043     local @ld_gethostservbyname_args = ();
2044     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2045     eval {
2046         read_config();
2047     };
2048     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - maxconn not defined';
2049     is $@, "config_error\n", 'read_config - virtual section - raise config_error(24)';
2050     is_deeply \@config_error_args, [2, 'ERR0101', '    maxconn'], 'read_config - virtual section - config_error args(24)';
2051     remove_config();
2052 }
2053 SKIP: {
2054     my $input = <<"CONFIG";
2055 virtual=localhost:http
2056     maxconn = yes
2057 CONFIG
2058     default_value();
2059     create_config($input) or skip 'cannot create config', 3;
2060     local @ld_gethostservbyname_args = ();
2061     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2062     eval {
2063         read_config();
2064     };
2065     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - maxconn not numeric';
2066     is $@, "config_error\n", 'read_config - virtual section - raise config_error(25)';
2067     is_deeply \@config_error_args, [2, 'ERR0101', '    maxconn = yes'], 'read_config - virtual section - config_error args(25)';
2068     remove_config();
2069 }
2070 SKIP: {
2071     my $input = <<"CONFIG";
2072 virtual=localhost:http
2073     maxconn = -1
2074 CONFIG
2075     default_value();
2076     create_config($input) or skip 'cannot create config', 3;
2077     local @ld_gethostservbyname_args = ();
2078     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2079     eval {
2080         read_config();
2081     };
2082     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - maxconn is minus';
2083     is $@, "config_error\n", 'read_config - virtual section - raise config_error(26)';
2084     is_deeply \@config_error_args, [2, 'ERR0101', '    maxconn = -1'], 'read_config - virtual section - config_error args(26)';
2085     remove_config();
2086 }
2087 SKIP: {
2088     my $input = <<"CONFIG";
2089 virtual=localhost:http
2090     checkport = "1"
2091 CONFIG
2092     default_value();
2093     create_config($input) or skip 'cannot create config', 2;
2094     local @ld_gethostservbyname_args = ();
2095     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2096     eval {
2097         read_config();
2098     };
2099     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - checkport min ok';
2100     is $main::CONFIG{virtual}[0]{checkport}, '1', 'read_config - virtual section - set checkport min ok';
2101     remove_config();
2102 }
2103 SKIP: {
2104     my $input = <<"CONFIG";
2105 virtual=localhost:http
2106     checkport = 65535
2107 CONFIG
2108     default_value();
2109     create_config($input) or skip 'cannot create config', 2;
2110     local @ld_gethostservbyname_args = ();
2111     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2112     eval {
2113         read_config();
2114     };
2115     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - checkport max ok';
2116     is $main::CONFIG{virtual}[0]{checkport}, '65535', 'read_config - virtual section - set checkport max ok';
2117     remove_config();
2118 }
2119 SKIP: {
2120     my $input = <<"CONFIG";
2121 virtual=localhost:http
2122     checkport
2123 CONFIG
2124     default_value();
2125     create_config($input) or skip 'cannot create config', 3;
2126     local @ld_gethostservbyname_args = ();
2127     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2128     eval {
2129         read_config();
2130     };
2131     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checkport not defined';
2132     is $@, "config_error\n", 'read_config - virtual section - raise config_error(27)';
2133     is_deeply \@config_error_args, [2, 'ERR0108', '    checkport'], 'read_config - virtual section - config_error args(27)';
2134     remove_config();
2135 }
2136 SKIP: {
2137     my $input = <<"CONFIG";
2138 virtual=localhost:http
2139     checkport = yes
2140 CONFIG
2141     default_value();
2142     create_config($input) or skip 'cannot create config', 3;
2143     local @ld_gethostservbyname_args = ();
2144     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2145     eval {
2146         read_config();
2147     };
2148     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checkport not numeric';
2149     is $@, "config_error\n", 'read_config - virtual section - raise config_error(28)';
2150     is_deeply \@config_error_args, [2, 'ERR0108', '    checkport = yes'], 'read_config - virtual section - config_error args(28)';
2151     remove_config();
2152 }
2153 SKIP: {
2154     my $input = <<"CONFIG";
2155 virtual=localhost:http
2156     checkport = 0
2157 CONFIG
2158     default_value();
2159     create_config($input) or skip 'cannot create config', 3;
2160     local @ld_gethostservbyname_args = ();
2161     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2162     eval {
2163         read_config();
2164     };
2165     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checkport is zero';
2166     is $@, "config_error\n", 'read_config - virtual section - raise config_error(29';
2167     is_deeply \@config_error_args, [2, 'ERR0108', '    checkport = 0'], 'read_config - virtual section - config_error args(29)';
2168     remove_config();
2169 }
2170 SKIP: {
2171     my $input = <<"CONFIG";
2172 virtual=localhost:http
2173     checkport = 65536
2174 CONFIG
2175     default_value();
2176     create_config($input) or skip 'cannot create config', 3;
2177     local @ld_gethostservbyname_args = ();
2178     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2179     eval {
2180         read_config();
2181     };
2182     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - checkport is over range';
2183     is $@, "config_error\n", 'read_config - virtual section - raise config_error(30)';
2184     is_deeply \@config_error_args, [2, 'ERR0108', '    checkport = 65536'], 'read_config - virtual section - config_error args(30)';
2185     remove_config();
2186 }
2187 SKIP: {
2188     my $input = <<"CONFIG";
2189 virtual=localhost:http
2190     scheduler = lC
2191 CONFIG
2192     default_value();
2193     create_config($input) or skip 'cannot create config', 2;
2194     local @ld_gethostservbyname_args = ();
2195     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2196     eval {
2197         read_config();
2198     };
2199     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - scheduler lc ok';
2200     is $main::CONFIG{virtual}[0]{scheduler}, 'lc', 'read_config - virtual section - set scheduler lc ok';
2201     remove_config();
2202 }
2203 SKIP: {
2204     my $input = <<"CONFIG";
2205 virtual=localhost:http
2206     scheduler = 'Rr'
2207 CONFIG
2208     default_value();
2209     create_config($input) or skip 'cannot create config', 2;
2210     local @ld_gethostservbyname_args = ();
2211     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2212     eval {
2213         read_config();
2214     };
2215     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - scheduler rr ok';
2216     is $main::CONFIG{virtual}[0]{scheduler}, 'rr', 'read_config - virtual section - set scheduler rr ok';
2217     remove_config();
2218 }
2219 SKIP: {
2220     my $input = <<"CONFIG";
2221 virtual=localhost:http
2222     scheduler = "WRR"
2223 CONFIG
2224     default_value();
2225     create_config($input) or skip 'cannot create config', 2;
2226     local @ld_gethostservbyname_args = ();
2227     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2228     eval {
2229         read_config();
2230     };
2231     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - scheduler wrr ok';
2232     is $main::CONFIG{virtual}[0]{scheduler}, 'wrr', 'read_config - virtual section - set scheduler wrr ok';
2233     remove_config();
2234 }
2235 SKIP: {
2236     my $input = <<"CONFIG";
2237 virtual=localhost:http
2238     scheduler =
2239 CONFIG
2240     default_value();
2241     create_config($input) or skip 'cannot create config', 3;
2242     local @ld_gethostservbyname_args = ();
2243     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2244     eval {
2245         read_config();
2246     };
2247     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - scheduler not defined';
2248     is $@, "config_error\n", 'read_config - virtual section - raise config_error(31)';
2249     is_deeply \@config_error_args, [2, 'ERR0105', '    scheduler ='], 'read_config - virtual section - config_error args(31)';
2250     remove_config();
2251 }
2252 SKIP: {
2253     my $input = <<"CONFIG";
2254 virtual=localhost:http
2255     scheduler = unknown
2256 CONFIG
2257     default_value();
2258     create_config($input) or skip 'cannot create config', 3;
2259     local @ld_gethostservbyname_args = ();
2260     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2261     eval {
2262         read_config();
2263     };
2264     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - scheduler not valid';
2265     is $@, "config_error\n", 'read_config - virtual section - raise config_error(32)';
2266     is_deeply \@config_error_args, [2, 'ERR0105', '    scheduler = unknown'], 'read_config - virtual section - config_error args(32)';
2267     remove_config();
2268 }
2269 SKIP: {
2270     my $input = <<"CONFIG";
2271 virtual=localhost:http
2272     protocol = 'TcP'
2273 CONFIG
2274     default_value();
2275     create_config($input) or skip 'cannot create config', 2;
2276     local @ld_gethostservbyname_args = ();
2277     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2278     eval {
2279         read_config();
2280     };
2281     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - protocol ok';
2282     is $main::CONFIG{virtual}[0]{protocol}, 'tcp', 'read_config - virtual section - set protocol ok';
2283     remove_config();
2284 }
2285 SKIP: {
2286     my $input = <<"CONFIG";
2287 virtual=localhost:http
2288     protocol =
2289 CONFIG
2290     default_value();
2291     create_config($input) or skip 'cannot create config', 3;
2292     local @ld_gethostservbyname_args = ();
2293     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2294     eval {
2295         read_config();
2296     };
2297     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - protocol not defined';
2298     is $@, "config_error\n", 'read_config - virtual section - raise config_error(33)';
2299     is_deeply \@config_error_args, [2, 'ERR0109', '    protocol ='], 'read_config - virtual section - config_error args(33)';
2300     remove_config();
2301 }
2302 SKIP: {
2303     my $input = <<"CONFIG";
2304 virtual=localhost:http
2305     protocol = unknown
2306 CONFIG
2307     default_value();
2308     create_config($input) or skip 'cannot create config', 3;
2309     local @ld_gethostservbyname_args = ();
2310     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2311     eval {
2312         read_config();
2313     };
2314     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - protocol not valid';
2315     is $@, "config_error\n", 'read_config - virtual section - raise config_error(34)';
2316     is_deeply \@config_error_args, [2, 'ERR0109', '    protocol = unknown'], 'read_config - virtual section - config_error args(34)';
2317     remove_config();
2318 }
2319 SKIP: {
2320     my $input = <<"CONFIG";
2321 virtual=localhost:http
2322     service=hTTp
2323 CONFIG
2324     default_value();
2325     create_config($input) or skip 'cannot create config', 2;
2326     local @ld_gethostservbyname_args = ();
2327     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2328     eval {
2329         read_config();
2330     };
2331     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - service http ok';
2332     is $main::CONFIG{virtual}[0]{service}, 'http', 'read_config - virtual section - set service http ok';
2333     remove_config();
2334 }
2335 SKIP: {
2336     my $input = <<"CONFIG";
2337 virtual=localhost:http
2338     service=hTTpS
2339 CONFIG
2340     default_value();
2341     create_config($input) or skip 'cannot create config', 2;
2342     local @ld_gethostservbyname_args = ();
2343     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2344     eval {
2345         read_config();
2346     };
2347     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - service https ok';
2348     is $main::CONFIG{virtual}[0]{service}, 'https', 'read_config - virtual section - set service https ok';
2349     remove_config();
2350 }
2351 SKIP: {
2352     my $input = <<"CONFIG";
2353 virtual=localhost:http
2354     service=LdAp
2355 CONFIG
2356     default_value();
2357     create_config($input) or skip 'cannot create config', 2;
2358     local @ld_gethostservbyname_args = ();
2359     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2360     eval {
2361         read_config();
2362     };
2363     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - service ldap ok';
2364     is $main::CONFIG{virtual}[0]{service}, 'ldap', 'read_config - virtual section - set service ldap ok';
2365     remove_config();
2366 }
2367 SKIP: {
2368     my $input = <<"CONFIG";
2369 virtual=localhost:http
2370     service= "FTP"
2371 CONFIG
2372     default_value();
2373     create_config($input) or skip 'cannot create config', 2;
2374     local @ld_gethostservbyname_args = ();
2375     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2376     eval {
2377         read_config();
2378     };
2379     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - service ftp ok';
2380     is $main::CONFIG{virtual}[0]{service}, 'ftp', 'read_config - virtual section - set service ftp ok';
2381     remove_config();
2382 }
2383 SKIP: {
2384     my $input = <<"CONFIG";
2385 virtual=localhost:http
2386     service=  'SmtP'
2387 CONFIG
2388     default_value();
2389     create_config($input) or skip 'cannot create config', 2;
2390     local @ld_gethostservbyname_args = ();
2391     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2392     eval {
2393         read_config();
2394     };
2395     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - service smtp ok';
2396     is $main::CONFIG{virtual}[0]{service}, 'smtp', 'read_config - virtual section - set service smtp ok';
2397     remove_config();
2398 }
2399 SKIP: {
2400     my $input = <<"CONFIG";
2401 virtual=localhost:http
2402     service =   POp
2403 CONFIG
2404     default_value();
2405     create_config($input) or skip 'cannot create config', 2;
2406     local @ld_gethostservbyname_args = ();
2407     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2408     eval {
2409         read_config();
2410     };
2411     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - service pop ok';
2412     is $main::CONFIG{virtual}[0]{service}, 'pop', 'read_config - virtual section - set service pop ok';
2413     remove_config();
2414 }
2415 SKIP: {
2416     my $input = <<"CONFIG";
2417 virtual=localhost:http
2418     service  = "ImAp"
2419 CONFIG
2420     default_value();
2421     create_config($input) or skip 'cannot create config', 2;
2422     local @ld_gethostservbyname_args = ();
2423     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2424     eval {
2425         read_config();
2426     };
2427     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - service imap ok';
2428     is $main::CONFIG{virtual}[0]{service}, 'imap', 'read_config - virtual section - set service imap ok';
2429     remove_config();
2430 }
2431 SKIP: {
2432     my $input = <<"CONFIG";
2433 virtual=localhost:http
2434     service  =  'NNtp'
2435 CONFIG
2436     default_value();
2437     create_config($input) or skip 'cannot create config', 2;
2438     local @ld_gethostservbyname_args = ();
2439     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2440     eval {
2441         read_config();
2442     };
2443     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - service nntp ok';
2444     is $main::CONFIG{virtual}[0]{service}, 'nntp', 'read_config - virtual section - set service nntp ok';
2445     remove_config();
2446 }
2447 SKIP: {
2448     my $input = <<"CONFIG";
2449 virtual=localhost:http
2450     service =DNS
2451 CONFIG
2452     default_value();
2453     create_config($input) or skip 'cannot create config', 2;
2454     local @ld_gethostservbyname_args = ();
2455     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2456     eval {
2457         read_config();
2458     };
2459     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - service dns ok';
2460     is $main::CONFIG{virtual}[0]{service}, 'dns', 'read_config - virtual section - set service dns ok';
2461     remove_config();
2462 }
2463 SKIP: {
2464     my $input = <<"CONFIG";
2465 virtual=localhost:http
2466     service= mysql
2467 CONFIG
2468     default_value();
2469     create_config($input) or skip 'cannot create config', 2;
2470     local @ld_gethostservbyname_args = ();
2471     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2472     eval {
2473         read_config();
2474     };
2475     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - service mysql ok';
2476     is $main::CONFIG{virtual}[0]{service}, 'mysql', 'read_config - virtual section - set service mysql ok';
2477     remove_config();
2478 }
2479 SKIP: {
2480     my $input = <<"CONFIG";
2481 virtual=localhost:http
2482     service=    'PGSQL'
2483 CONFIG
2484     default_value();
2485     create_config($input) or skip 'cannot create config', 2;
2486     local @ld_gethostservbyname_args = ();
2487     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2488     eval {
2489         read_config();
2490     };
2491     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - service pgsql ok';
2492     is $main::CONFIG{virtual}[0]{service}, 'pgsql', 'read_config - virtual section - set service pgsql ok';
2493     remove_config();
2494 }
2495 SKIP: {
2496     my $input = <<"CONFIG";
2497 virtual=localhost:http
2498     service= sip
2499 CONFIG
2500     default_value();
2501     create_config($input) or skip 'cannot create config', 2;
2502     local @ld_gethostservbyname_args = ();
2503     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2504     eval {
2505         read_config();
2506     };
2507     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - service sip ok';
2508     is $main::CONFIG{virtual}[0]{service}, 'sip', 'read_config - virtual section - set service sip ok';
2509     remove_config();
2510 }
2511 SKIP: {
2512     my $input = <<"CONFIG";
2513 virtual=localhost:http
2514     service=  NONE
2515 CONFIG
2516     default_value();
2517     create_config($input) or skip 'cannot create config', 2;
2518     local @ld_gethostservbyname_args = ();
2519     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2520     eval {
2521         read_config();
2522     };
2523     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - service none ok';
2524     is $main::CONFIG{virtual}[0]{service}, 'none', 'read_config - virtual section - set service none ok';
2525     remove_config();
2526 }
2527 SKIP: {
2528     my $input = <<"CONFIG";
2529 virtual=localhost:http
2530     service =
2531 CONFIG
2532     default_value();
2533     create_config($input) or skip 'cannot create config', 3;
2534     local @ld_gethostservbyname_args = ();
2535     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2536     eval {
2537         read_config();
2538     };
2539     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - service not defined';
2540     is $@, "config_error\n", 'read_config - virtual section - raise config_error(31)';
2541     is_deeply \@config_error_args, [2, 'ERR0106', '    service ='], 'read_config - virtual section - config_error args(31)';
2542     remove_config();
2543 }
2544 SKIP: {
2545     my $input = <<"CONFIG";
2546 virtual=localhost:http
2547     service = unknown
2548 CONFIG
2549     default_value();
2550     create_config($input) or skip 'cannot create config', 3;
2551     local @ld_gethostservbyname_args = ();
2552     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2553     eval {
2554         read_config();
2555     };
2556     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - service not valid';
2557     is $@, "config_error\n", 'read_config - virtual section - raise config_error(32)';
2558     is_deeply \@config_error_args, [2, 'ERR0106', '    service = unknown'], 'read_config - virtual section - config_error args(32)';
2559     remove_config();
2560 }
2561 SKIP: {
2562     my $input = <<"CONFIG";
2563 virtual=localhost:http
2564     httpmethod=get
2565 CONFIG
2566     default_value();
2567     create_config($input) or skip 'cannot create config', 2;
2568     local @ld_gethostservbyname_args = ();
2569     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2570     eval {
2571         read_config();
2572     };
2573     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - httpmethod GET ok';
2574     is $main::CONFIG{virtual}[0]{httpmethod}, 'GET', 'read_config - virtual section - set httpmethod GET ok';
2575     remove_config();
2576 }
2577 SKIP: {
2578     my $input = <<"CONFIG";
2579 virtual=localhost:http
2580     httpmethod= 'HeaD'
2581 CONFIG
2582     default_value();
2583     create_config($input) or skip 'cannot create config', 2;
2584     local @ld_gethostservbyname_args = ();
2585     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2586     eval {
2587         read_config();
2588     };
2589     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - httpmethod HEAD ok';
2590     is $main::CONFIG{virtual}[0]{httpmethod}, 'HEAD', 'read_config - virtual section - set httpmethod HEAD ok';
2591     remove_config();
2592 }
2593 SKIP: {
2594     my $input = <<"CONFIG";
2595 virtual=localhost:http
2596     httpmethod =
2597 CONFIG
2598     default_value();
2599     create_config($input) or skip 'cannot create config', 3;
2600     local @ld_gethostservbyname_args = ();
2601     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2602     eval {
2603         read_config();
2604     };
2605     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - httpmethod not defined';
2606     is $@, "config_error\n", 'read_config - virtual section - raise config_error(31)';
2607     is_deeply \@config_error_args, [2, 'ERR0110', '    httpmethod ='], 'read_config - virtual section - config_error args(31)';
2608     remove_config();
2609 }
2610 SKIP: {
2611     my $input = <<"CONFIG";
2612 virtual=localhost:http
2613     httpmethod = unknown
2614 CONFIG
2615     default_value();
2616     create_config($input) or skip 'cannot create config', 3;
2617     local @ld_gethostservbyname_args = ();
2618     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2619     eval {
2620         read_config();
2621     };
2622     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - httpmethod not valid';
2623     is $@, "config_error\n", 'read_config - virtual section - raise config_error(32)';
2624     is_deeply \@config_error_args, [2, 'ERR0110', '    httpmethod = unknown'], 'read_config - virtual section - config_error args(32)';
2625     remove_config();
2626 }
2627 SKIP: {
2628     my $input = <<"CONFIG";
2629 virtual=localhost:http
2630     fallback
2631 CONFIG
2632     default_value();
2633     create_config($input) or skip 'cannot create config', 2;
2634     local @ld_gethostservbyname_args = ();
2635     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2636     local @parse_fallback_args = ();
2637     local $parse_fallback_return = undef;
2638     eval {
2639         read_config();
2640     };
2641     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - fallback not defined';
2642     is_deeply \@parse_fallback_args, [2, undef, '    fallback'], 'read_config - virtual section - parse_fallback_args(1)';
2643     remove_config();
2644 }
2645 SKIP: {
2646     my $input = <<"CONFIG";
2647 virtual=localhost:http
2648     fallback=localhost:http
2649 CONFIG
2650     default_value();
2651     create_config($input) or skip 'cannot create config', 2;
2652     local @ld_gethostservbyname_args = ();
2653     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2654     local @parse_fallback_args = ();
2655     local $parse_fallback_return = 'fallback';
2656     eval {
2657         read_config();
2658     };
2659     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - fallback ok';
2660     is_deeply \@parse_fallback_args, [2, 'localhost:http', '    fallback=localhost:http'], 'read_config - virtual section - parse_fallback_args(2)';
2661     remove_config();
2662 }
2663 SKIP: {
2664     my $input = <<"CONFIG";
2665 virtual=localhost:http
2666     quiescent= YEs
2667 CONFIG
2668     default_value();
2669     create_config($input) or skip 'cannot create config', 2;
2670     local @ld_gethostservbyname_args = ();
2671     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2672     eval {
2673         read_config();
2674     };
2675     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - quiescent yes ok';
2676     is $main::CONFIG{virtual}[0]{quiescent}, '1', 'read_config - virtual section - set quiescent yes ok';
2677     remove_config();
2678 }
2679 SKIP: {
2680     my $input = <<"CONFIG";
2681 virtual=localhost:http
2682     quiescent= "NO"
2683 CONFIG
2684     default_value();
2685     create_config($input) or skip 'cannot create config', 2;
2686     local @ld_gethostservbyname_args = ();
2687     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2688     eval {
2689         read_config();
2690     };
2691     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - quiescent no ok';
2692     is $main::CONFIG{virtual}[0]{quiescent}, '0', 'read_config - virtual section - set quiescent no ok';
2693     remove_config();
2694 }
2695 SKIP: {
2696     my $input = <<"CONFIG";
2697 virtual=localhost:http
2698     quiescent
2699 CONFIG
2700     default_value();
2701     create_config($input) or skip 'cannot create config', 3;
2702     local @ld_gethostservbyname_args = ();
2703     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2704     eval {
2705         read_config();
2706     };
2707     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - quiescent not defined';
2708     is $@, "config_error\n", 'read_config - virtual section - raise config_error(33)';
2709     is_deeply \@config_error_args, [2, 'ERR0102', '    quiescent'], 'read_config - virtual section - config_error args(33)';
2710     remove_config();
2711 }
2712 SKIP: {
2713     my $input = <<"CONFIG";
2714 virtual=localhost:http
2715     quiescent=YEP
2716 CONFIG
2717     default_value();
2718     create_config($input) or skip 'cannot create config', 3;
2719     local @ld_gethostservbyname_args = ();
2720     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2721     eval {
2722         read_config();
2723     };
2724     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - quiescent not lower yes or no(1)';
2725     is $@, "config_error\n", 'read_config - virtual section - raise config_error(34)';
2726     is_deeply \@config_error_args, [2, 'ERR0102', '    quiescent=YEP'], 'read_config - virtual section - config_error args(34)';
2727     remove_config();
2728 }
2729 SKIP: {
2730     my $input = <<"CONFIG";
2731 virtual=localhost:http
2732     quiescent=0
2733 CONFIG
2734     default_value();
2735     create_config($input) or skip 'cannot create config', 3;
2736     local @ld_gethostservbyname_args = ();
2737     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2738     eval {
2739         read_config();
2740     };
2741     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - quiescent not lower yes or no(2)';
2742     is $@, "config_error\n", 'read_config - virtual section - raise config_error(35)';
2743     is_deeply \@config_error_args, [2, 'ERR0102', '    quiescent=0'], 'read_config - virtual section - config_error args(35)';
2744     remove_config();
2745 }
2746 SKIP: {
2747     my $input = <<"CONFIG";
2748 virtual=localhost:http
2749     module= URL  --reschedule --pattern-match  "foobar"
2750 CONFIG
2751     default_value();
2752     create_config($input) or skip 'cannot create config', 2;
2753     local @ld_gethostservbyname_args = ();
2754     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2755     eval {
2756         read_config();
2757     };
2758     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - module url ok';
2759     is_deeply $main::CONFIG{virtual}[0]{module}, { name => 'url', option => '--reschedule --pattern-match  foobar', key => '--pattern-match foobar' }, 'read_config - virtual section - set module url ok';
2760     remove_config();
2761 }
2762 SKIP: {
2763     my $input = <<"CONFIG";
2764 virtual=localhost:http
2765     module= 'cINSERT --cookie-name 'Monkey' --cookie-expire 864'
2766 CONFIG
2767     default_value();
2768     create_config($input) or skip 'cannot create config', 2;
2769     local @ld_gethostservbyname_args = ();
2770     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2771     eval {
2772         read_config();
2773     };
2774     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - module cinsert ok';
2775     is_deeply $main::CONFIG{virtual}[0]{module}, { name => 'cinsert', option => '--cookie-name Monkey --cookie-expire 864', key => '--cookie-name Monkey' }, 'read_config - virtual section - set module cinsert ok';
2776     remove_config();
2777 }
2778 SKIP: {
2779     my $input = <<"CONFIG";
2780 virtual=localhost:http
2781     module=  "sslID"
2782 CONFIG
2783     default_value();
2784     create_config($input) or skip 'cannot create config', 2;
2785     local @ld_gethostservbyname_args = ();
2786     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2787     eval {
2788         read_config();
2789     };
2790     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - module sslid ok';
2791     is_deeply $main::CONFIG{virtual}[0]{module}, { name => 'sslid', option => undef, key => '' }, 'read_config - virtual section - set module sslid ok';
2792     remove_config();
2793 }
2794 SKIP: {
2795     my $input = <<"CONFIG";
2796 virtual=localhost:http
2797     module=   SessionLess
2798 CONFIG
2799     default_value();
2800     create_config($input) or skip 'cannot create config', 2;
2801     local @ld_gethostservbyname_args = ();
2802     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2803     eval {
2804         read_config();
2805     };
2806     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - module sessionless ok';
2807     is_deeply $main::CONFIG{virtual}[0]{module}, { name => 'sessionless', option => undef, key => '' }, 'read_config - virtual section - set module sessionless ok';
2808     remove_config();
2809 }
2810 SKIP: {
2811     my $input = <<"CONFIG";
2812 virtual=localhost:http
2813     module=  'Cinsert --reschedule'
2814 CONFIG
2815     default_value();
2816     create_config($input) or skip 'cannot create config', 2;
2817     local @ld_gethostservbyname_args = ();
2818     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2819     eval {
2820         read_config();
2821     };
2822     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - module cinsert omit ok';
2823     is_deeply $main::CONFIG{virtual}[0]{module}, { name => 'cinsert', option => '--cookie-name CookieName --reschedule', key => '--cookie-name CookieName' }, 'read_config - virtual section - set module cinsert omit ok';
2824     remove_config();
2825 }
2826 SKIP: {
2827     my $input = <<"CONFIG";
2828 virtual=localhost:http
2829     module
2830 CONFIG
2831     default_value();
2832     create_config($input) or skip 'cannot create config', 3;
2833     local @ld_gethostservbyname_args = ();
2834     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2835     eval {
2836         read_config();
2837     };
2838     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - module not defined';
2839     is $@, "config_error\n", 'read_config - virtual section - raise config_error(36)';
2840     is_deeply \@config_error_args, [2, 'ERR0111', '    module'], 'read_config - virtual section - config_error args(36)';
2841     remove_config();
2842 }
2843 SKIP: {
2844     my $input = <<"CONFIG";
2845 virtual=localhost:http
2846     module = unknown
2847 CONFIG
2848     default_value();
2849     create_config($input) or skip 'cannot create config', 3;
2850     local @ld_gethostservbyname_args = ();
2851     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2852     eval {
2853         read_config();
2854     };
2855     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - unknown module';
2856     is $@, "config_error\n", 'read_config - virtual section - raise config_error(37)';
2857     is_deeply \@config_error_args, [2, 'ERR0111', '    module = unknown'], 'read_config - virtual section - config_error args(37)';
2858     remove_config();
2859 }
2860 SKIP: {
2861     my $input = <<"CONFIG";
2862 virtual=localhost:http
2863     module = url
2864 CONFIG
2865     default_value();
2866     create_config($input) or skip 'cannot create config', 3;
2867     local @ld_gethostservbyname_args = ();
2868     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2869     eval {
2870         read_config();
2871     };
2872     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - url module key not exist';
2873     is $@, "config_error\n", 'read_config - virtual section - raise config_error(39)';
2874     is_deeply \@config_error_args, [2, 'ERR0112', 'url', q{--pattern-match' or `--uri-pattern-match' or `--host-pattern-match}, '    module = url'], 'read_config - virtual section - config_error args(39)';
2875     remove_config();
2876 }
2877 SKIP: {
2878     my $input = <<"CONFIG";
2879 virtual=localhost:http
2880     sorryserver  =  sorryhost:ssh
2881 CONFIG
2882     default_value();
2883     create_config($input) or skip 'cannot create config', 3;
2884     local @ld_gethostservbyname_args = ();
2885     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2886     eval {
2887         read_config();
2888     };
2889     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - sorryserver ok';
2890     is_deeply $main::CONFIG{virtual}[0]{sorryserver}, { ip => '127.0.0.1', port => 80 }, 'read_config - virtual section - set sorryserver ok';
2891     is_deeply \@ld_gethostservbyname_args, ['localhost:http', 'tcp', 'sorryhost:ssh', 'tcp'], 'read_config - virtual section - ld_gethostservbyname args(3)';
2892     remove_config();
2893 }
2894 SKIP: {
2895     my $input = <<"CONFIG";
2896 virtual=localhost:http
2897     sorryserver
2898 CONFIG
2899     default_value();
2900     create_config($input) or skip 'cannot create config', 4;
2901     local @ld_gethostservbyname_args = ();
2902     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2903     local $ld_gethostservbyname_undef  = 2;
2904     eval {
2905         read_config();
2906     };
2907     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - sorryserver not defined';
2908     is $@, "config_error\n", 'read_config - virtual section - raise config_error(40)';
2909     is_deeply \@config_error_args, [2, 'ERR0114', '    sorryserver'], 'read_config - virtual section - config_error args(40)';
2910     is_deeply \@ld_gethostservbyname_args, ['localhost:http', 'tcp', undef, 'tcp'], 'read_config - virtual section - ld_gethostservbyname args(4)';
2911     remove_config();
2912 }
2913 SKIP: {
2914     my $input = <<"CONFIG";
2915 virtual=localhost:http
2916     sorryserver = sorryhost:ftp
2917 CONFIG
2918     default_value();
2919     create_config($input) or skip 'cannot create config', 4;
2920     local @ld_gethostservbyname_args = ();
2921     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2922     local $ld_gethostservbyname_undef  = 2;
2923     eval {
2924         read_config();
2925     };
2926     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - sorryserver not defined';
2927     is $@, "config_error\n", 'read_config - virtual section - raise config_error(41)';
2928     is_deeply \@config_error_args, [2, 'ERR0114', '    sorryserver = sorryhost:ftp'], 'read_config - virtual section - config_error args(41)';
2929     is_deeply \@ld_gethostservbyname_args, ['localhost:http', 'tcp', 'sorryhost:ftp', 'tcp'], 'read_config - virtual section - ld_gethostservbyname args(5)';
2930     remove_config();
2931 }
2932 SKIP: {
2933     my $input = <<"CONFIG";
2934 virtual=localhost:http
2935     qosup = 0
2936 CONFIG
2937     default_value();
2938     create_config($input) or skip 'cannot create config', 2;
2939     local @ld_gethostservbyname_args = ();
2940     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2941     eval {
2942         read_config();
2943     };
2944     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - qosup 0 ok';
2945     is $main::CONFIG{virtual}[0]{qosup}, '0', 'read_config - virtual section - set qosup 0 ok';
2946     remove_config();
2947 }
2948 SKIP: {
2949     my $input = <<"CONFIG";
2950 virtual=localhost:http
2951     qosup = "1k"
2952 CONFIG
2953     default_value();
2954     create_config($input) or skip 'cannot create config', 2;
2955     local @ld_gethostservbyname_args = ();
2956     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2957     eval {
2958         read_config();
2959     };
2960     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - qosup min kilo ok';
2961     is $main::CONFIG{virtual}[0]{qosup}, '1K', 'read_config - virtual section - set qosup min kilo ok';
2962     remove_config();
2963 }
2964 SKIP: {
2965     my $input = <<"CONFIG";
2966 virtual=localhost:http
2967     qosup = '999K'
2968 CONFIG
2969     default_value();
2970     create_config($input) or skip 'cannot create config', 2;
2971     local @ld_gethostservbyname_args = ();
2972     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2973     eval {
2974         read_config();
2975     };
2976     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - qosup max kilo ok';
2977     is $main::CONFIG{virtual}[0]{qosup}, '999K', 'read_config - virtual section - set qosup max kilo ok';
2978     remove_config();
2979 }
2980 SKIP: {
2981     my $input = <<"CONFIG";
2982 virtual=localhost:http
2983     qosup = 1m
2984 CONFIG
2985     default_value();
2986     create_config($input) or skip 'cannot create config', 2;
2987     local @ld_gethostservbyname_args = ();
2988     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
2989     eval {
2990         read_config();
2991     };
2992     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - qosup min mega ok';
2993     is $main::CONFIG{virtual}[0]{qosup}, '1M', 'read_config - virtual section - set qosup min mega ok';
2994     remove_config();
2995 }
2996 SKIP: {
2997     my $input = <<"CONFIG";
2998 virtual=localhost:http
2999     qosup = "999M"
3000 CONFIG
3001     default_value();
3002     create_config($input) or skip 'cannot create config', 2;
3003     local @ld_gethostservbyname_args = ();
3004     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3005     eval {
3006         read_config();
3007     };
3008     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - qosup max mega ok';
3009     is $main::CONFIG{virtual}[0]{qosup}, '999M', 'read_config - virtual section - set qosup max mega ok';
3010     remove_config();
3011 }
3012 SKIP: {
3013     my $input = <<"CONFIG";
3014 virtual=localhost:http
3015     qosup = '1G'
3016 CONFIG
3017     default_value();
3018     create_config($input) or skip 'cannot create config', 2;
3019     local @ld_gethostservbyname_args = ();
3020     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3021     eval {
3022         read_config();
3023     };
3024     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - qosup min giga ok';
3025     is $main::CONFIG{virtual}[0]{qosup}, '1G', 'read_config - virtual section - set qosup min giga ok';
3026     remove_config();
3027 }
3028 SKIP: {
3029     my $input = <<"CONFIG";
3030 virtual=localhost:http
3031     qosup = 999g
3032 CONFIG
3033     default_value();
3034     create_config($input) or skip 'cannot create config', 2;
3035     local @ld_gethostservbyname_args = ();
3036     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3037     eval {
3038         read_config();
3039     };
3040     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - qosup max giga ok';
3041     is $main::CONFIG{virtual}[0]{qosup}, '999G', 'read_config - virtual section - set qosup max giga ok';
3042     remove_config();
3043 }
3044 SKIP: {
3045     my $input = <<"CONFIG";
3046 virtual=localhost:http
3047     qosup
3048 CONFIG
3049     default_value();
3050     create_config($input) or skip 'cannot create config', 3;
3051     local @ld_gethostservbyname_args = ();
3052     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3053     eval {
3054         read_config();
3055     };
3056     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - qosup not defined';
3057     is $@, "config_error\n", 'read_config - virtual section - raise config_error(42)';
3058     is_deeply \@config_error_args, [2, 'ERR0113', '    qosup'], 'read_config - virtual section - config_error args(42)';
3059     remove_config();
3060 }
3061 SKIP: {
3062     my $input = <<"CONFIG";
3063 virtual=localhost:http
3064     qosup=100
3065 CONFIG
3066     default_value();
3067     create_config($input) or skip 'cannot create config', 3;
3068     local @ld_gethostservbyname_args = ();
3069     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3070     eval {
3071         read_config();
3072     };
3073     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - qosup not valid format(1)';
3074     is $@, "config_error\n", 'read_config - virtual section - raise config_error(43-1)';
3075     is_deeply \@config_error_args, [2, 'ERR0113', '    qosup=100'], 'read_config - virtual section - config_error args(43-1)';
3076     remove_config();
3077 }
3078 SKIP: {
3079     my $input = <<"CONFIG";
3080 virtual=localhost:http
3081     qosup=1000K
3082 CONFIG
3083     default_value();
3084     create_config($input) or skip 'cannot create config', 3;
3085     local @ld_gethostservbyname_args = ();
3086     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3087     eval {
3088         read_config();
3089     };
3090     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - qosup not valid format(2)';
3091     is $@, "config_error\n", 'read_config - virtual section - raise config_error(43-2)';
3092     is_deeply \@config_error_args, [2, 'ERR0113', '    qosup=1000K'], 'read_config - virtual section - config_error args(43-2)';
3093     remove_config();
3094 }
3095 SKIP: {
3096     my $input = <<"CONFIG";
3097 virtual=localhost:http
3098     qosdown = 0
3099 CONFIG
3100     default_value();
3101     create_config($input) or skip 'cannot create config', 2;
3102     local @ld_gethostservbyname_args = ();
3103     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3104     eval {
3105         read_config();
3106     };
3107     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - qosdown 0 ok';
3108     is $main::CONFIG{virtual}[0]{qosdown}, '0', 'read_config - virtual section - set qosdown 0 ok';
3109     remove_config();
3110 }
3111 SKIP: {
3112     my $input = <<"CONFIG";
3113 virtual=localhost:http
3114     qosdown = "1k"
3115 CONFIG
3116     default_value();
3117     create_config($input) or skip 'cannot create config', 2;
3118     local @ld_gethostservbyname_args = ();
3119     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3120     eval {
3121         read_config();
3122     };
3123     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - qosdown min kilo ok';
3124     is $main::CONFIG{virtual}[0]{qosdown}, '1K', 'read_config - virtual section - set qosdown min kilo ok';
3125     remove_config();
3126 }
3127 SKIP: {
3128     my $input = <<"CONFIG";
3129 virtual=localhost:http
3130     qosdown = '999K'
3131 CONFIG
3132     default_value();
3133     create_config($input) or skip 'cannot create config', 2;
3134     local @ld_gethostservbyname_args = ();
3135     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3136     eval {
3137         read_config();
3138     };
3139     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - qosdown max kilo ok';
3140     is $main::CONFIG{virtual}[0]{qosdown}, '999K', 'read_config - virtual section - set qosdown max kilo ok';
3141     remove_config();
3142 }
3143 SKIP: {
3144     my $input = <<"CONFIG";
3145 virtual=localhost:http
3146     qosdown = 1m
3147 CONFIG
3148     default_value();
3149     create_config($input) or skip 'cannot create config', 2;
3150     local @ld_gethostservbyname_args = ();
3151     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3152     eval {
3153         read_config();
3154     };
3155     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - qosdown min mega ok';
3156     is $main::CONFIG{virtual}[0]{qosdown}, '1M', 'read_config - virtual section - set qosdown min mega ok';
3157     remove_config();
3158 }
3159 SKIP: {
3160     my $input = <<"CONFIG";
3161 virtual=localhost:http
3162     qosdown = "999M"
3163 CONFIG
3164     default_value();
3165     create_config($input) or skip 'cannot create config', 2;
3166     local @ld_gethostservbyname_args = ();
3167     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3168     eval {
3169         read_config();
3170     };
3171     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - qosdown max mega ok';
3172     is $main::CONFIG{virtual}[0]{qosdown}, '999M', 'read_config - virtual section - set qosdown max mega ok';
3173     remove_config();
3174 }
3175 SKIP: {
3176     my $input = <<"CONFIG";
3177 virtual=localhost:http
3178     qosdown = '1G'
3179 CONFIG
3180     default_value();
3181     create_config($input) or skip 'cannot create config', 2;
3182     local @ld_gethostservbyname_args = ();
3183     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3184     eval {
3185         read_config();
3186     };
3187     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - qosdown min giga ok';
3188     is $main::CONFIG{virtual}[0]{qosdown}, '1G', 'read_config - virtual section - set qosdown min giga ok';
3189     remove_config();
3190 }
3191 SKIP: {
3192     my $input = <<"CONFIG";
3193 virtual=localhost:http
3194     qosdown = 999g
3195 CONFIG
3196     default_value();
3197     create_config($input) or skip 'cannot create config', 2;
3198     local @ld_gethostservbyname_args = ();
3199     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3200     eval {
3201         read_config();
3202     };
3203     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - qosdown max giga ok';
3204     is $main::CONFIG{virtual}[0]{qosdown}, '999G', 'read_config - virtual section - set qosdown max giga ok';
3205     remove_config();
3206 }
3207 SKIP: {
3208     my $input = <<"CONFIG";
3209 virtual=localhost:http
3210     qosdown
3211 CONFIG
3212     default_value();
3213     create_config($input) or skip 'cannot create config', 3;
3214     local @ld_gethostservbyname_args = ();
3215     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3216     eval {
3217         read_config();
3218     };
3219     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - qosdown not defined';
3220     is $@, "config_error\n", 'read_config - virtual section - raise config_error(44)';
3221     is_deeply \@config_error_args, [2, 'ERR0113', '    qosdown'], 'read_config - virtual section - config_error args(44)';
3222     remove_config();
3223 }
3224 SKIP: {
3225     my $input = <<"CONFIG";
3226 virtual=localhost:http
3227     qosdown=100
3228 CONFIG
3229     default_value();
3230     create_config($input) or skip 'cannot create config', 3;
3231     local @ld_gethostservbyname_args = ();
3232     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3233     eval {
3234         read_config();
3235     };
3236     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - qosdown not valid format(1)';
3237     is $@, "config_error\n", 'read_config - virtual section - raise config_error(45-1)';
3238     is_deeply \@config_error_args, [2, 'ERR0113', '    qosdown=100'], 'read_config - virtual section - config_error args(45-1)';
3239     remove_config();
3240 }
3241 SKIP: {
3242     my $input = <<"CONFIG";
3243 virtual=localhost:http
3244     qosdown= 1000M
3245 CONFIG
3246     default_value();
3247     create_config($input) or skip 'cannot create config', 3;
3248     local @ld_gethostservbyname_args = ();
3249     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3250     eval {
3251         read_config();
3252     };
3253     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - qosdown not valid format(2)';
3254     is $@, "config_error\n", 'read_config - virtual section - raise config_error(45-2)';
3255     is_deeply \@config_error_args, [2, 'ERR0113', '    qosdown= 1000M'], 'read_config - virtual section - config_error args(45-2)';
3256     remove_config();
3257 }
3258 SKIP: {
3259     my $input = <<"CONFIG";
3260 virtual=localhost:http
3261     realdowncallback =  '/bin/sh'
3262 CONFIG
3263     default_value();
3264     create_config($input) or skip 'cannot create config', 2;
3265     local @ld_gethostservbyname_args = ();
3266     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3267     eval {
3268         read_config();
3269     };
3270     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - realdowncallback ok';
3271     is $main::CONFIG{virtual}[0]{realdowncallback}, '/bin/sh', 'read_config - virtual section - set realdowncallback ok';
3272     remove_config();
3273 }
3274 SKIP: {
3275     my $input = <<"CONFIG";
3276 virtual=localhost:http
3277     realdowncallback
3278 CONFIG
3279     default_value();
3280     create_config($input) or skip 'cannot create config', 3;
3281     local @ld_gethostservbyname_args = ();
3282     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3283     eval {
3284         read_config();
3285     };
3286     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - realdowncallback not defined';
3287     is $@, "config_error\n", 'read_config - virtual section - raise config_error(46)';
3288     is_deeply \@config_error_args, [2, 'ERR0117', '    realdowncallback'], 'read_config - virtual section - config_error args(46)';
3289     remove_config();
3290 }
3291 SKIP: {
3292     my $input = <<"CONFIG";
3293 virtual=localhost:http
3294     realdowncallback=/proc/1
3295 CONFIG
3296     default_value();
3297     create_config($input) or skip 'cannot create config', 3;
3298     local @ld_gethostservbyname_args = ();
3299     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3300     eval {
3301         read_config();
3302     };
3303     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - realdowncallback cannot execute';
3304     is $@, "config_error\n", 'read_config - virtual section - raise config_error(47)';
3305     is_deeply \@config_error_args, [2, 'ERR0117', '    realdowncallback=/proc/1'], 'read_config - virtual section - config_error args(47)';
3306     remove_config();
3307 }
3308 SKIP: {
3309     my $input = <<"CONFIG";
3310 virtual=localhost:http
3311     realdowncallback=/proc/100000
3312 CONFIG
3313     default_value();
3314     create_config($input) or skip 'cannot create config', 3;
3315     local @ld_gethostservbyname_args = ();
3316     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3317     eval {
3318         read_config();
3319     };
3320     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - realdowncallback no such file';
3321     is $@, "config_error\n", 'read_config - virtual section - raise config_error(48)';
3322     is_deeply \@config_error_args, [2, 'ERR0117', '    realdowncallback=/proc/100000'], 'read_config - virtual section - config_error args(48)';
3323     remove_config();
3324 }
3325 SKIP: {
3326     my $input = <<"CONFIG";
3327 virtual=localhost:http
3328     realdowncallback=/proc
3329 CONFIG
3330     default_value();
3331     create_config($input) or skip 'cannot create config', 3;
3332     local @ld_gethostservbyname_args = ();
3333     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3334     eval {
3335         read_config();
3336     };
3337     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - realdowncallback directory';
3338     is $@, "config_error\n", 'read_config - virtual section - raise config_error(49)';
3339     is_deeply \@config_error_args, [2, 'ERR0117', '    realdowncallback=/proc'], 'read_config - virtual section - config_error args(49)';
3340     remove_config();
3341 }
3342 SKIP: {
3343     my $input = <<"CONFIG";
3344 virtual=localhost:http
3345     realrecovercallback =  '/bin/sh'
3346 CONFIG
3347     default_value();
3348     create_config($input) or skip 'cannot create config', 2;
3349     local @ld_gethostservbyname_args = ();
3350     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3351     eval {
3352         read_config();
3353     };
3354     is $main::PROC_STAT{initialized}, 1, 'read_config - virtual section - realrecovercallback ok';
3355     is $main::CONFIG{virtual}[0]{realrecovercallback}, '/bin/sh', 'read_config - virtual section - set realrecovercallback ok';
3356     remove_config();
3357 }
3358 SKIP: {
3359     my $input = <<"CONFIG";
3360 virtual=localhost:http
3361     realrecovercallback
3362 CONFIG
3363     default_value();
3364     create_config($input) or skip 'cannot create config', 3;
3365     local @ld_gethostservbyname_args = ();
3366     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3367     eval {
3368         read_config();
3369     };
3370     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - realrecovercallback not defined';
3371     is $@, "config_error\n", 'read_config - virtual section - raise config_error(50)';
3372     is_deeply \@config_error_args, [2, 'ERR0117', '    realrecovercallback'], 'read_config - virtual section - config_error args(50)';
3373     remove_config();
3374 }
3375 SKIP: {
3376     my $input = <<"CONFIG";
3377 virtual=localhost:http
3378     realrecovercallback=/proc/1
3379 CONFIG
3380     default_value();
3381     create_config($input) or skip 'cannot create config', 3;
3382     local @ld_gethostservbyname_args = ();
3383     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3384     eval {
3385         read_config();
3386     };
3387     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - realrecovercallback cannot execute';
3388     is $@, "config_error\n", 'read_config - virtual section - raise config_error(51)';
3389     is_deeply \@config_error_args, [2, 'ERR0117', '    realrecovercallback=/proc/1'], 'read_config - virtual section - config_error args(51)';
3390     remove_config();
3391 }
3392 SKIP: {
3393     my $input = <<"CONFIG";
3394 virtual=localhost:http
3395     realrecovercallback=/proc/100000
3396 CONFIG
3397     default_value();
3398     create_config($input) or skip 'cannot create config', 3;
3399     local @ld_gethostservbyname_args = ();
3400     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3401     eval {
3402         read_config();
3403     };
3404     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - realrecovercallback no such file';
3405     is $@, "config_error\n", 'read_config - virtual section - raise config_error(52)';
3406     is_deeply \@config_error_args, [2, 'ERR0117', '    realrecovercallback=/proc/100000'], 'read_config - virtual section - config_error args(52)';
3407     remove_config();
3408 }
3409 SKIP: {
3410     my $input = <<"CONFIG";
3411 virtual=localhost:http
3412     realrecovercallback=/proc
3413 CONFIG
3414     default_value();
3415     create_config($input) or skip 'cannot create config', 3;
3416     local @ld_gethostservbyname_args = ();
3417     local $ld_gethostservbyname_return = { ip => '127.0.0.1', port => 80 };
3418     eval {
3419         read_config();
3420     };
3421     is $main::PROC_STAT{initialized}, 0, 'read_config - virtual section - realrecovercallback directory';
3422     is $@, "config_error\n", 'read_config - virtual section - raise config_error(53)';
3423     is_deeply \@config_error_args, [2, 'ERR0117', '    realrecovercallback=/proc'], 'read_config - virtual section - config_error args(53)';
3424     remove_config();
3425 }
3426 #   - reread_config
3427 {
3428     local *read_config = \&__read_config;
3429     local $main::CONFIG{virtual} = undef;
3430     local $read_config_virtual   = [ foo => 2, bar => 4 ];
3431     local $main::CONFIG{execute} = { 'foo.conf' => 1, 'bar.conf' => 1 };
3432     local $read_config_execute   = { 'foo.conf' => 1, 'hoge.conf' => 1 };
3433     local $system_wrapper_return = 1;
3434     local $system_wrapper_called = 0;
3435     local @ld_cmd_children_args  = ();
3436     reread_config();
3437     is $system_wrapper_called, 2, 'reread_config - virtual is undef';
3438     is_deeply \@ld_cmd_children_args, [ ['stop', {'bar.conf' => 1} ], ['start', {'hoge.conf' => 1} ] ], 'reread_config - 1 old config stop, 1 new config start';
3439 }
3440 {
3441     local *read_config = \&__read_config;
3442     local $main::CONFIG{virtual} = [ foo => 1, bar => 2 ];
3443     local $read_config_virtual   = [ foo => 2, bar => 4 ];
3444     local $main::CONFIG{execute} = undef;
3445     local $read_config_execute   = { 'foo.conf' => 1, 'hoge.conf' => 1 };
3446     local $system_wrapper_return = 1;
3447     local $system_wrapper_called = 0;
3448     local @ld_cmd_children_args  = ();
3449     reread_config();
3450     is $system_wrapper_called, 0, 'reread_config - execute is undef';
3451     is_deeply \@ld_cmd_children_args, [ ['stop', {} ], ['start', {'foo.conf' => 1, 'hoge.conf' => 1} ] ], 'reread_config - 0 old config stop, 2 new config start';
3452 }
3453 {
3454     local *read_config = \&__read_config;
3455     local $main::CONFIG{virtual} = [ foo => 1, bar => 2 ];
3456     local $read_config_virtual   = [ foo => 2, bar => 4 ];
3457     local $main::CONFIG{execute} = { 'foo.conf' => 1, 'bar.conf' => 1 };
3458     local $read_config_execute   = { 'foo.conf' => 1, 'hoge.conf' => 1 };
3459     local $system_wrapper_return = 1;
3460     local $system_wrapper_called = 0;
3461     local @ld_cmd_children_args  = ();
3462     reread_config();
3463     is $system_wrapper_called, 2, 'reread_config - 1 exist config reload, but failed and then start';
3464     is_deeply \@ld_cmd_children_args, [ ['stop', {'bar.conf' => 1} ], ['start', {'hoge.conf' => 1} ] ], 'reread_config - 1 old config stop, 1 new config start';
3465 }
3466 {
3467     local *read_config = \&__read_config;
3468     local $main::CONFIG{virtual} = [ foo => 1, bar => 2 ];
3469     local $read_config_virtual   = [ foo => 2, bar => 4 ];
3470     local $main::CONFIG{execute} = { 'foo.conf' => 1, 'bar.conf' => 1 };
3471     local $read_config_execute   = { 'foo.conf' => 1, 'hoge.conf' => 1 };
3472     local $system_wrapper_return = 0;
3473     local $system_wrapper_called = 0;
3474     local $read_config_die = 1;
3475     local @ld_cmd_children_args  = ();
3476     reread_config();
3477     is $system_wrapper_called, 2, 'reread_config - all old config reload(1)';
3478     is_deeply \@ld_cmd_children_args, [ ['stop', {} ], ['start', {} ] ], 'reread_config - no stop / start command(1)';
3479 }
3480 {
3481     local *read_config = \&__read_config;
3482     local $main::CONFIG{virtual} = [ foo => 1, bar => 2 ];
3483     local $read_config_virtual   = [ foo => 2, bar => 4 ];
3484     local $main::CONFIG{execute} = { 'foo.conf' => 1, 'bar.conf' => 1 };
3485     local $read_config_execute   = { 'foo.conf' => 1, 'hoge.conf' => 1 };
3486     local $system_wrapper_return = 0;
3487     local $system_wrapper_called = 0;
3488     local $read_config_die = 0;
3489     local $ld_setup_die = 1;
3490     local @ld_cmd_children_args  = ();
3491     reread_config();
3492     is $system_wrapper_called, 2, 'reread_config - all old config reload(2)';
3493     is_deeply \@ld_cmd_children_args, [ ['stop', {} ], ['start', {} ] ], 'reread_config - no stop / start command(2)';
3494 }
3495 #   - check_cfgfile
3496 {
3497     local $main::CONFIG_FILE{path} = undef;
3498     my $got = check_cfgfile();
3499     is $got, 0, 'check_cfgfile - config file path is undef';
3500 }
3501 {
3502     default_value();
3503     create_config('sample');
3504     my $got = check_cfgfile();
3505     is $got, 0, 'check_cfgfile - first config file check(1)';
3506     ok $main::CONFIG_FILE{stattime} > 0, 'check_cfgfile - register mtime(1)';
3507     ok length $main::CONFIG_FILE{checksum} > 0, 'check_cfgfile - register checksum(1)';
3508     remove_config();
3509 }
3510 {
3511     default_value();
3512     create_config('sample');
3513     my $got = check_cfgfile();
3514     is $got, 0, 'check_cfgfile - first config file check(2)';
3515     ok $main::CONFIG_FILE{stattime} > 0, 'check_cfgfile - register mtime(2)';
3516     ok length $main::CONFIG_FILE{checksum} > 0, 'check_cfgfile - register checksum(2)';
3517     my $before_mtime = $main::CONFIG_FILE{stattime};
3518     my $before_checksum = $main::CONFIG_FILE{checksum};
3519     sleep 1;
3520     open my $f, ">", $main::CONFIG_FILE{path};
3521     print $f 'sample';
3522     close $f;
3523     $got = check_cfgfile();
3524     is $got, 0, 'check_cfgfile - mtime change but same';
3525     ok $main::CONFIG_FILE{stattime} > $before_mtime, 'check_cfgfile - mtime change';
3526     is $main::CONFIG_FILE{checksum}, $before_checksum, 'check_cfgfile - same checksum';
3527     remove_config();
3528 }
3529 {
3530     default_value();
3531     create_config('sample');
3532     my $got = check_cfgfile();
3533     is $got, 0, 'check_cfgfile - first config file check(3)';
3534     ok $main::CONFIG_FILE{stattime} > 0, 'check_cfgfile - register mtime(3)';
3535     ok length $main::CONFIG_FILE{checksum} > 0, 'check_cfgfile - register checksum(3)';
3536     my $before_mtime = $main::CONFIG_FILE{stattime};
3537     my $before_checksum = $main::CONFIG_FILE{checksum};
3538     sleep 1;
3539     open my $f, ">", $main::CONFIG_FILE{path};
3540     print $f 'sample2';
3541     close $f;
3542     $got = check_cfgfile();
3543     is $got, 0, 'check_cfgfile - config change, no autoreload, no callback';
3544     ok $main::CONFIG_FILE{stattime} > $before_mtime, 'check_cfgfile - mtime change';
3545     ok $main::CONFIG_FILE{checksum} ne $before_checksum, 'check_cfgfile - checksum change';
3546     remove_config();
3547 }
3548 {
3549     default_value();
3550     create_config('sample');
3551     $main::CONFIG{autoreload} = 1;
3552     my $got = check_cfgfile();
3553     is $got, 0, 'check_cfgfile - first config file check(4)';
3554     ok $main::CONFIG_FILE{stattime} > 0, 'check_cfgfile - register mtime(4)';
3555     ok length $main::CONFIG_FILE{checksum} > 0, 'check_cfgfile - register checksum(4)';
3556     my $before_mtime = $main::CONFIG_FILE{stattime};
3557     my $before_checksum = $main::CONFIG_FILE{checksum};
3558     sleep 1;
3559     open my $f, ">", $main::CONFIG_FILE{path};
3560     print $f 'test';
3561     close $f;
3562     $got = check_cfgfile();
3563     is $got, 1, 'check_cfgfile - config change, autoreload, no callback';
3564     ok $main::CONFIG_FILE{stattime} > $before_mtime, 'check_cfgfile - mtime change';
3565     ok $main::CONFIG_FILE{checksum} ne $before_checksum, 'check_cfgfile - checksum change';
3566     remove_config();
3567 }
3568 {
3569     default_value();
3570     create_config('sample');
3571     $main::CONFIG{autoreload} = 1;
3572     $main::CONFIG{callback} = '/bin/sh';
3573     my $got = check_cfgfile();
3574     is $got, 0, 'check_cfgfile - first config file check(4)';
3575     ok $main::CONFIG_FILE{stattime} > 0, 'check_cfgfile - register mtime(4)';
3576     ok length $main::CONFIG_FILE{checksum} > 0, 'check_cfgfile - register checksum(4)';
3577     my $before_mtime = $main::CONFIG_FILE{stattime};
3578     my $before_checksum = $main::CONFIG_FILE{checksum};
3579     sleep 1;
3580     open my $f, ">", $main::CONFIG_FILE{path};
3581     print $f 'callback';
3582     close $f;
3583     local $system_wrapper_called = 0;
3584     $got = check_cfgfile();
3585     is $got, 1, 'check_cfgfile - config change, autoreload, callback';
3586     ok $main::CONFIG_FILE{stattime} > $before_mtime, 'check_cfgfile - mtime change';
3587     ok $main::CONFIG_FILE{checksum} ne $before_checksum, 'check_cfgfile - checksum change';
3588     is $system_wrapper_called, 1, 'check_cfgfile - callback called';
3589     remove_config();
3590 }
3591 # test end
3592 #...............................................
3593
3594 L7lib::comment_in();
3595
3596 sub default_value {
3597     $main::CONFIG_FILE{path} = time;
3598     undef $main::CONFIG_FILE{stattime};
3599     undef $main::CONFIG_FILE{checksum};
3600     $main::PROC_STAT{initialized} = 0;
3601     %main::CONFIG = %main::GLOBAL;
3602 }
3603 sub create_config {
3604     my $input = shift;
3605     open my $f, ">", $main::CONFIG_FILE{path} or return 0;
3606     print $f $input;
3607     close $f;
3608     return 1;
3609 }
3610 sub remove_config {
3611     if (-f $main::CONFIG_FILE{path}) {
3612         unlink $main::CONFIG_FILE{path};
3613     }
3614 }
3615 sub override {
3616     *config_error         = \&__config_error;
3617     *ld_gethostservbyname = \&__ld_gethostservbyname;
3618     *parse_fallback       = \&__parse_fallback;
3619     *parse_real           = \&__parse_real;
3620     *ld_openlog           = \&__ld_openlog;
3621     *_ld_service_resolve  = \&__ld_service_resolve;
3622     *ld_setup             = \&__ld_setup;
3623     *ld_cmd_children      = \&__ld_cmd_children;
3624     *system_wrapper       = \&__system_wrapper;
3625     *ld_log               = \&__ld_log;
3626     *ld_start             = \&__ld_start;
3627     *check_require_module = \&__check_require_module;
3628 }
3629 sub __config_error {
3630     @config_error_args = @_;
3631     die "config_error\n";
3632 }
3633 sub __ld_gethostservbyname {
3634     push @ld_gethostservbyname_args, @_;
3635     if ($ld_gethostservbyname_undef != 0) {
3636         $ld_gethostservbyname_undef--;
3637         if ($ld_gethostservbyname_undef == 0) {
3638             return undef;
3639         }
3640     }
3641     return $ld_gethostservbyname_return;
3642 }
3643 sub __parse_fallback {
3644     push @parse_fallback_args, @_;
3645     return $parse_fallback_return;
3646 }
3647 sub __parse_real {
3648     push @parse_real_args, @_;
3649     return $parse_real_return;
3650 }
3651 sub __ld_openlog {
3652     $ld_openlog_arg = shift;
3653     return $ld_openlog_return;
3654 }
3655 sub __get_hostservbyname {
3656     @get_hostservbyname_args = @_;
3657     return $get_hostservbyname_return;
3658 }
3659 sub __ld_service_resolve {
3660     $_ld_service_resolve_called++;
3661 }
3662 sub __ld_cmd_children {
3663     push @ld_cmd_children_args, [@_];
3664 }
3665 sub __system_wrapper {
3666     $system_wrapper_called++;
3667     return $system_wrapper_return;
3668 }
3669 sub __ld_setup {
3670     die if $ld_setup_die;
3671 }
3672 sub __check_require_module {
3673 }
3674 sub __ld_start {
3675 }
3676 sub __read_config {
3677     $main::CONFIG{virtual} = $read_config_virtual;
3678     $main::CONFIG{execute} = $read_config_execute;
3679     die if $read_config_die;
3680 }
3681 sub __ld_log {
3682 }