OSDN Git Service

Initial commit from 2.1.2-1
[ultramonkey-l7/ultramonkey-l7-v2.git] / l7directord / t / 23_sql.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 => 14;
9 use IO::Socket::INET;
10
11 L7lib::chdir();
12 L7lib::comment_out();
13 require './l7directord';
14 override();
15
16 our $dbi_error = 0;
17 eval { require DBI; };
18 if ($@) {
19     $dbi_error = 1;
20 }
21 our $pg_error = 0;
22 eval { require DBD::Pg; };
23 if ($@) {
24     $pg_error = 1;
25 }
26 our $mysql_error = 0;
27 eval { require DBD::mysql; };
28 if ($@) {
29     $mysql_error = 1;
30 }
31
32 #...............................................
33 # test start
34 #   - check_sql
35 #   - check_mysql
36 TODO: {
37     todo_skip q{Can't locate DBI.pm in @INC}, 1 if $dbi_error;
38     todo_skip q{Can't locate DBD/mysql.pm in @INC}, 1 if $mysql_error;
39     todo_skip 'not ready mysql response', 1;
40 #SKIP: {
41     my $port = 63334;
42     my $sock = create_sock($port);
43     skip 'cannot create socket', 1 if !$sock;
44     my $response = ''; # TODO create mysql response
45     my $pid = prepare_child($sock, [$response]);
46     set_default();
47     my $v = { server => {ip => '127.0.0.1'}, negotiatetimeout => 3, login => 'postgres', passwd => '', database => 'template1' };
48     my $r = { server => {ip => '127.0.0.1', port => $port }, fail_counts => 0 };
49     my $got = check_mysql($v, $r);
50     is $got, $main::SERVICE_UP, 'check_mysql - connect ok';
51     close_child($pid);
52     close $sock;
53 }
54 TODO: {
55     todo_skip q{Can't locate DBI.pm in @INC}, 1 if $dbi_error;
56     todo_skip q{Can't locate DBD/mysql.pm in @INC}, 1 if $mysql_error;
57     todo_skip 'not ready mysql response', 1;
58 #SKIP: {
59     my $port = 63334;
60     my $sock = create_sock($port);
61     skip 'cannot create socket', 1 if !$sock;
62     my $response = ''; # TODO create mysql response
63     my $pid = prepare_child($sock, [$response]);
64     set_default();
65     my $v = { server => {ip => '127.0.0.1'}, checkport => $port, negotiatetimeout => 3, login => 'postgres', passwd => '', database => 'template1' };
66     my $r = { server => {ip => '127.0.0.1', port => 10000 }, fail_counts => 0 };
67     my $got = check_mysql($v, $r);
68     is $got, $main::SERVICE_UP, 'check_mysql - checkport connect ok';
69     close_child($pid);
70     close $sock;
71 }
72 TODO: {
73     todo_skip q{Can't locate DBI.pm in @INC}, 1 if $dbi_error;
74     todo_skip q{Can't locate DBD/mysql.pm in @INC}, 1 if $mysql_error;
75     todo_skip 'not ready mysql response', 1;
76 #SKIP: {
77     my $port = 63334;
78     my $sock = create_sock($port);
79     skip 'cannot create socket', 1 if !$sock;
80     my $response = ''; # TODO create mysql response
81     my $query_response = ''; # TODO create mysql query response
82     my $pid = prepare_child($sock, [$response, $query_response]);
83     set_default();
84     my $v = { server => {ip => '127.0.0.1'}, negotiatetimeout => 3, login => 'postgres', passwd => '', database => 'template1' };
85     my $r = { server => {ip => '127.0.0.1', port => $port }, request => 'SELECT * from foo', fail_counts => 0 };
86     my $got = check_mysql($v, $r);
87     is $got, $main::SERVICE_UP, 'check_mysql - request ok';
88     close_child($pid);
89     close $sock;
90 }
91 SKIP: {
92     skip q{Can't locate DBI.pm in @INC}, 1 if $dbi_error;
93     skip q{Can't locate DBD/mysql.pm in @INC}, 1 if $mysql_error;
94     my $port = 63334;
95     my $sock = create_sock($port);
96     skip 'cannot create socket', 1 if !$sock;
97     my $response = ''; # TODO create mysql response
98     my $pid = prepare_child($sock, [$response], 5);
99     set_default();
100     my $v = { server => {ip => '127.0.0.1'}, negotiatetimeout => 1, login => 'postgres', passwd => '', database => 'template1' };
101     my $r = { server => {ip => '127.0.0.1', port => $port }, request => 'SELECT * from foo', fail_counts => 0 };
102     my $got = check_mysql($v, $r);
103     is $got, $main::SERVICE_DOWN, 'check_mysql - timeout';
104     close_child($pid);
105     close $sock;
106 }
107 TODO: {
108     todo_skip q{Can't locate DBI.pm in @INC}, 1 if $dbi_error;
109     todo_skip q{Can't locate DBD/mysql.pm in @INC}, 1 if $mysql_error;
110     todo_skip 'not ready mysql response', 1;
111 #SKIP: {
112     my $port = 63334;
113     my $sock = create_sock($port);
114     skip 'cannot create socket', 1 if !$sock;
115     my $response = ''; # TODO create mysql response
116     my $query_response = ''; # TODO create mysql query response (3rows)
117     my $pid = prepare_child($sock, [$response, $query_response]);
118     set_default();
119     my $v = { server => {ip => '127.0.0.1'}, negotiatetimeout => 3, login => 'postgres', passwd => '', database => 'template1' };
120     my $r = { server => {ip => '127.0.0.1', port => $port }, request => 'SELECT * from foo', receive => 3, fail_counts => 0 };
121     my $got = check_mysql($v, $r);
122     is $got, $main::SERVICE_UP, 'check_mysql - receive ok';
123     close_child($pid);
124     close $sock;
125 }
126 TODO: {
127     todo_skip q{Can't locate DBI.pm in @INC}, 1 if $dbi_error;
128     todo_skip q{Can't locate DBD/mysql.pm in @INC}, 1 if $mysql_error;
129     todo_skip 'not ready mysql response', 1;
130 #SKIP: {
131     my $port = 63334;
132     my $sock = create_sock($port);
133     skip 'cannot create socket', 1 if !$sock;
134     my $response = ''; # TODO create mysql response
135     my $query_response = ''; # TODO create mysql query response (3rows)
136     my $pid = prepare_child($sock, [$response, $query_response]);
137     set_default();
138     my $v = { server => {ip => '127.0.0.1'}, negotiatetimeout => 3, login => 'postgres', passwd => '', database => 'template1' };
139     my $r = { server => {ip => '127.0.0.1', port => $port }, request => 'SELECT * from foo', receive => 5, fail_counts => 0 };
140     my $got = check_mysql($v, $r);
141     is $got, $main::SERVICE_DOWN, 'check_mysql - receive error';
142     close_child($pid);
143     close $sock;
144 }
145 SKIP: {
146     skip q{Can't locate DBI.pm in @INC}, 1 if $dbi_error;
147     skip q{Can't locate DBD/mysql.pm in @INC}, 1 if $mysql_error;
148     my $port = 63334;
149     set_default();
150     my $v = {negotiatetimeout => 1, checkport => $port };
151     my $r = { server => {ip => '127.0.0.1', port => 10000 }, fail_counts => 0 };
152     my $got = check_mysql($v, $r);
153     is $got, $main::SERVICE_DOWN, 'check_mysql - connect error';
154 }
155 #   - check_pgsql
156 TODO: {
157     todo_skip q{Can't locate DBI.pm in @INC}, 1 if $dbi_error;
158     todo_skip q{Can't locate DBD/Pg.pm in @INC}, 1 if $pg_error;
159     todo_skip 'not ready pgsql response', 1;
160 #SKIP: {
161     my $port = 63334;
162     my $sock = create_sock($port);
163     skip 'cannot create socket', 1 if !$sock;
164     my $response = ''; # TODO create pgsql response
165     my $pid = prepare_child($sock, [$response]);
166     set_default();
167     my $v = { server => {ip => '127.0.0.1'}, negotiatetimeout => 3, login => 'postgres', passwd => '', database => 'template1' };
168     my $r = { server => {ip => '127.0.0.1', port => $port }, fail_counts => 0 };
169     my $got = check_pgsql($v, $r);
170     is $got, $main::SERVICE_UP, 'check_pgsql - connect ok';
171     close_child($pid);
172     close $sock;
173 }
174 TODO: {
175     todo_skip q{Can't locate DBI.pm in @INC}, 1 if $dbi_error;
176     todo_skip q{Can't locate DBD/Pg.pm in @INC}, 1 if $pg_error;
177     todo_skip 'not ready pgsql response', 1;
178 #SKIP: {
179     my $port = 63334;
180     my $sock = create_sock($port);
181     skip 'cannot create socket', 1 if !$sock;
182     my $response = ''; # TODO create pgsql response
183     my $pid = prepare_child($sock, [$response]);
184     set_default();
185     my $v = { server => {ip => '127.0.0.1'}, checkport => $port, negotiatetimeout => 3, login => 'postgres', passwd => '', database => 'template1' };
186     my $r = { server => {ip => '127.0.0.1', port => 10000 }, fail_counts => 0 };
187     my $got = check_pgsql($v, $r);
188     is $got, $main::SERVICE_UP, 'check_pgsql - checkport connect ok';
189     close_child($pid);
190     close $sock;
191 }
192 TODO: {
193     todo_skip q{Can't locate DBI.pm in @INC}, 1 if $dbi_error;
194     todo_skip q{Can't locate DBD/Pg.pm in @INC}, 1 if $pg_error;
195     todo_skip 'not ready pgsql response', 1;
196 #SKIP: {
197     my $port = 63334;
198     my $sock = create_sock($port);
199     skip 'cannot create socket', 1 if !$sock;
200     my $response = ''; # TODO create pgsql response
201     my $query_response = ''; # TODO create pgsql query response
202     my $pid = prepare_child($sock, [$response, $query_response]);
203     set_default();
204     my $v = { server => {ip => '127.0.0.1'}, negotiatetimeout => 3, login => 'postgres', passwd => '', database => 'template1' };
205     my $r = { server => {ip => '127.0.0.1', port => $port }, request => 'SELECT * from foo', fail_counts => 0 };
206     my $got = check_pgsql($v, $r);
207     is $got, $main::SERVICE_UP, 'check_pgsql - request ok';
208     close_child($pid);
209     close $sock;
210 }
211 SKIP: {
212     skip q{Can't locate DBI.pm in @INC}, 1 if $dbi_error;
213     skip q{Can't locate DBD/Pg.pm in @INC}, 1 if $pg_error;
214     my $port = 63334;
215     my $sock = create_sock($port);
216     skip 'cannot create socket', 1 if !$sock;
217     my $response = ''; # TODO create pgsql response
218     my $pid = prepare_child($sock, [$response], 5);
219     set_default();
220     my $v = { server => {ip => '127.0.0.1'}, negotiatetimeout => 1, login => 'postgres', passwd => '', database => 'template1' };
221     my $r = { server => {ip => '127.0.0.1', port => $port }, request => 'SELECT * from foo', fail_counts => 0 };
222     my $got = check_pgsql($v, $r);
223     is $got, $main::SERVICE_DOWN, 'check_pgsql - timeout';
224     close_child($pid);
225     close $sock;
226 }
227 TODO: {
228     todo_skip q{Can't locate DBI.pm in @INC}, 1 if $dbi_error;
229     todo_skip q{Can't locate DBD/Pg.pm in @INC}, 1 if $pg_error;
230     todo_skip 'not ready pgsql response', 1;
231 #SKIP: {
232     my $port = 63334;
233     my $sock = create_sock($port);
234     skip 'cannot create socket', 1 if !$sock;
235     my $response = ''; # TODO create pgsql response
236     my $query_response = ''; # TODO create pgsql query response (3rows)
237     my $pid = prepare_child($sock, [$response, $query_response]);
238     set_default();
239     my $v = { server => {ip => '127.0.0.1'}, negotiatetimeout => 3, login => 'postgres', passwd => '', database => 'template1' };
240     my $r = { server => {ip => '127.0.0.1', port => $port }, request => 'SELECT * from foo', receive => 3, fail_counts => 0 };
241     my $got = check_pgsql($v, $r);
242     is $got, $main::SERVICE_UP, 'check_pgsql - receive ok';
243     close_child($pid);
244     close $sock;
245 }
246 TODO: {
247     todo_skip q{Can't locate DBI.pm in @INC}, 1 if $dbi_error;
248     todo_skip q{Can't locate DBD/Pg.pm in @INC}, 1 if $pg_error;
249     todo_skip 'not ready pgsql response', 1;
250 #SKIP: {
251     my $port = 63334;
252     my $sock = create_sock($port);
253     skip 'cannot create socket', 1 if !$sock;
254     my $response = ''; # TODO create pgsql response
255     my $query_response = ''; # TODO create pgsql query response (3rows)
256     my $pid = prepare_child($sock, [$response, $query_response]);
257     set_default();
258     my $v = { server => {ip => '127.0.0.1'}, negotiatetimeout => 3, login => 'postgres', passwd => '', database => 'template1' };
259     my $r = { server => {ip => '127.0.0.1', port => $port }, request => 'SELECT * from foo', receive => 5, fail_counts => 0 };
260     my $got = check_pgsql($v, $r);
261     is $got, $main::SERVICE_DOWN, 'check_pgsql - receive error';
262     close_child($pid);
263     close $sock;
264 }
265 SKIP: {
266     skip q{Can't locate DBI.pm in @INC}, 1 if $dbi_error;
267     skip q{Can't locate DBD/Pg.pm in @INC}, 1 if $pg_error;
268     my $port = 63334;
269     set_default();
270     my $v = {negotiatetimeout => 1, checkport => $port };
271     my $r = { server => {ip => '127.0.0.1', port => 10000 }, fail_counts => 0 };
272     my $got = check_pgsql($v, $r);
273     is $got, $main::SERVICE_DOWN, 'check_pgsql - connect error';
274 }
275 # test end
276 #...............................................
277
278 L7lib::comment_in();
279
280 sub create_sock {
281     my $port = shift;
282     my $sock = IO::Socket::INET->new(
283         Listen => 5,
284         LocalAddr => 'localhost',
285         LocalPort => $port,
286         ReuseAddr => 1,
287         Proto => 'tcp');
288     return $sock;
289 }
290 sub prepare_child {
291     my $sock = shift;
292     my $res = shift;
293     my $sleep = shift;
294     my $pid = fork();
295     if ($pid == 0) {
296         my $s = $sock->accept;
297         if ($sleep) { sleep $sleep; }
298         for (@$res) {
299             print $s $_;
300 #            <$s>;
301         }
302         close $s;
303         exit;
304     }
305     return $pid;
306 }
307 sub close_child {
308     my $pid = shift;
309     kill 15, $pid;
310     waitpid $pid, 0;
311 }
312 sub set_default {
313 }
314 sub override {
315     *ld_log = \&__ld_log;
316     *get_status = \&__get_status;
317 }
318 sub __get_status {
319     return $main::SERVICE_UP;
320 }
321 sub __ld_log {
322 }