annotate upstream.t @ 289:cbd4f6eca676

Tests: check if started process is alive while starting nginx. This allows faster test execution in case of startup failures, e.g. due to configuration errors. Note that just adding waitpid() to waitforfile() causes hang on win32 in wait(). To fix this, wait() calls were changed to waitpid() with pid specified.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 27 May 2013 17:15:17 +0400
parents ba5b92378653
children 719285b89d7e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
287
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for upstream module and balancers.
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 BEGIN { use FindBin; chdir($FindBin::Bin); }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 use lib 'lib';
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use Test::Nginx;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 ###############################################################################
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 select STDERR; $| = 1;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 select STDOUT; $| = 1;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 my $t = Test::Nginx->new()->has(qw/http proxy/)->plan(3);
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 $t->write_file_expand('nginx.conf', <<'EOF');
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 %%TEST_GLOBALS%%
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 daemon off;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 events {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 http {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 %%TEST_GLOBALS_HTTP%%
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 upstream u {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 server 127.0.0.1:8081 max_fails=3 fail_timeout=10s;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 server 127.0.0.1:8082 max_fails=3 fail_timeout=10s;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 upstream u2 {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 server 127.0.0.1:8081 max_fails=3 fail_timeout=10s;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 server 127.0.0.1:8082 max_fails=3 fail_timeout=10s;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 server {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 listen 127.0.0.1:8080;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 server_name localhost;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 location / {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 proxy_pass http://u;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 location /close2 {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 proxy_pass http://u2;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 EOF
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 $t->run_daemon(\&http_daemon, 8081);
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 $t->run_daemon(\&http_daemon, 8082);
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 $t->run();
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 ###############################################################################
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 is(many('/', 30), '8081: 15, 8082: 15', 'balanced');
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 # from 9 first requests to 8081, only 6 will be successfull,
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 # 3rd, 6th, and 9th requests will fail; after this the backend
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 # will be considered down and won't be used till fail_timeout passes
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 is(many('/close', 30), '8081: 6, 8082: 24', 'failures');
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 SKIP: {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 local $TODO = 'broken in 1.3.0';
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 skip 'long test', 1 unless $ENV{TEST_NGINX_UNSAFE};
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 # bug: failures counter is reset if first request in a second succeeds
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 #
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 # delay added to make sure first 9 requests will take more than 1s;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 # note that the test is racy and may unexpectedly succeed
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 is(many('/close2', 30, delay => 0.2), '8081: 6, 8082: 24', 'failures delay');
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 ###############################################################################
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 sub many {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 my ($uri, $count, %opts) = @_;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 my %ports;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 for (1 .. 30) {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 if (http_get($uri) =~ /X-Port: (\d+)/) {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 $ports{$1} = 0 unless defined $ports{$1};
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 $ports{$1}++;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 select undef, undef, undef, $opts{delay} if $opts{delay};
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 return join ', ', map { $_ . ": " . $ports{$_} } sort keys %ports;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 ###############################################################################
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 sub http_daemon {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 my ($port) = @_;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 my $count = 1;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 my $server = IO::Socket::INET->new(
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 Proto => 'tcp',
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 LocalHost => '127.0.0.1',
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 LocalPort => $port,
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 Listen => 5,
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 Reuse => 1
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 )
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 or die "Can't create listening socket: $!\n";
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124 while (my $client = $server->accept()) {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 $client->autoflush(1);
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 my $headers = '';
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 my $uri = '';
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 while (<$client>) {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 $headers .= $_;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 last if (/^\x0d?\x0a?$/);
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135 $uri = $1 if $headers =~ /^\S+\s+([^ ]+)\s+HTTP/i;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 if ($uri =~ 'close' && $port == 8081 && $count++ % 3 == 0) {
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 next;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 print $client <<EOF;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142 HTTP/1.1 200 OK
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 Connection: close
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144 X-Port: $port
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 OK
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147 EOF
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 close $client;
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
150 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151 }
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152
ba5b92378653 Tests: add some basic upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153 ###############################################################################