OSDN Git Service

Fixed chkconfig option
[ultramonkey-l7/ultramonkey-l7-v2.git] / l7directord / t / 18_smtp.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 => 5;
9 use IO::Socket::INET;
10
11 L7lib::chdir();
12 L7lib::comment_out();
13 require './l7directord';
14 override();
15
16 #...............................................
17 # test start
18 #   - check_smtp
19 SKIP: {
20     my $port = 63334;
21     my $sock = create_sock($port);
22     skip 'cannot create socket', 1 if !$sock;
23     my $pid = prepare_child($sock, "220\n250\n");
24     set_default();
25     my $v = {negotiatetimeout => 3};
26     my $r = { server => {ip => '127.0.0.1', port => $port }, fail_counts => 0 };
27     my $got = check_smtp($v, $r);
28     is $got, $main::SERVICE_UP, 'check_smtp - connect ok';
29     close_child($pid);
30     close $sock;
31 }
32 SKIP: {
33     my $port = 63334;
34     my $sock = create_sock($port);
35     skip 'cannot create socket', 1 if !$sock;
36     my $pid = prepare_child($sock, "220\n250\n");
37     set_default();
38     my $v = {negotiatetimeout => 3, checkport => $port };
39     my $r = { server => {ip => '127.0.0.1', port => 10000 }, fail_counts => 0 };
40     my $got = check_smtp($v, $r);
41     is $got, $main::SERVICE_UP, 'check_smtp - checkport connect ok';
42     close_child($pid);
43     close $sock;
44 }
45 SKIP: {
46     my $port = 63334;
47     my $sock = create_sock($port);
48     skip 'cannot create socket', 1 if !$sock;
49     my $pid = prepare_child($sock, "420\n");
50     set_default();
51     my $v = {negotiatetimeout => 1, checkport => $port };
52     my $r = { server => {ip => '127.0.0.1', port => 10000 }, fail_counts => 0 };
53     my $got = check_smtp($v, $r);
54     is $got, $main::SERVICE_DOWN, 'check_smtp - error response';
55     close_child($pid);
56     close $sock;
57 }
58 SKIP: {
59     my $port = 63334;
60     my $sock = create_sock($port);
61     skip 'cannot create socket', 1 if !$sock;
62     my $pid = prepare_child($sock, "220\n250\n", 2);
63     set_default();
64     my $v = {negotiatetimeout => 1, checkport => $port };
65     my $r = { server => {ip => '127.0.0.1', port => 10000 }, fail_counts => 0 };
66     my $got = check_smtp($v, $r);
67     is $got, $main::SERVICE_DOWN, 'check_smtp - timeout';
68     close_child($pid);
69     close $sock;
70 }
71 {
72     my $port = 63334;
73     set_default();
74     my $v = {negotiatetimeout => 1, checkport => $port };
75     my $r = { server => {ip => '127.0.0.1', port => 10000 }, fail_counts => 0 };
76     my $got = check_smtp($v, $r);
77     is $got, $main::SERVICE_DOWN, 'check_smtp - connect error';
78 }
79 # test end
80 #...............................................
81
82 L7lib::comment_in();
83
84 sub create_sock {
85     my $port = shift;
86     my $sock = IO::Socket::INET->new(
87         Listen => 5,
88         LocalAddr => 'localhost',
89         LocalPort => $port,
90         ReuseAddr => 1,
91         Proto => 'tcp');
92     return $sock;
93 }
94 sub prepare_child {
95     my $sock = shift;
96     my $res = shift;
97     my $sleep = shift;
98     my $pid = fork();
99     if ($pid == 0) {
100         my $s = $sock->accept;
101         if ($sleep) { sleep $sleep; }
102         print $s $res;
103         close $s;
104         exit;
105     }
106     return $pid;
107 }
108 sub close_child {
109     my $pid = shift;
110     kill 15, $pid;
111     waitpid $pid, 0;
112 }
113 sub set_default {
114 }
115 sub override {
116     *ld_log = \&__ld_log;
117     *get_status = \&__get_status;
118 }
119 sub __get_status {
120     return $main::SERVICE_UP;
121 }
122 sub __ld_log {
123 }