ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/t/80_ssltest.t
(Generate patch)

Comparing AnyEvent/t/80_ssltest.t (file contents):
Revision 1.1 by root, Thu Oct 2 08:43:58 2008 UTC vs.
Revision 1.7 by root, Fri Aug 12 18:41:31 2011 UTC

1#!/usr/bin/perl 1#!/usr/bin/perl
2 2
3use Test::More qw(no_plan); 3BEGIN { eval "use Net::SSLeay 1.33 (); 1" or ((print "1..0 # SKIP no usable Net::SSLeay\n"), exit 0) }
4
5use Test::More tests => 410;
4 6
5use strict qw(vars subs); 7use strict qw(vars subs);
6 8
7use AnyEvent::Socket; 9use AnyEvent::Socket;
8use AnyEvent::Handle; 10use AnyEvent::Handle;
11use AnyEvent::TLS;
9 12
10{ 13my $ctx = new AnyEvent::TLS cert_file => $0;
11 my $ctx = AnyEvent::Handle::TLS_CTX;
12 Net::SSLeay::CTX_use_certificate_chain_file ($ctx, $0)
13 or die "unable to set certificate chain file";
14 Net::SSLeay::CTX_use_PrivateKey_file ($ctx, $0, Net::SSLeay::FILETYPE_PEM ())
15 or die "unable to set private key file";
16}
17 14
18for my $mode (1..5) { 15for my $mode (1..5) {
19 my $server_done = AnyEvent->condvar; 16 my $server_done = AnyEvent->condvar;
20 my $client_done = AnyEvent->condvar; 17 my $client_done = AnyEvent->condvar;
21 18
28 25
29 ok (1, "server_connect $mode"); 26 ok (1, "server_connect $mode");
30 27
31 my $hd; $hd = new AnyEvent::Handle 28 my $hd; $hd = new AnyEvent::Handle
32 tls => "accept", 29 tls => "accept",
30 tls_ctx => $ctx,
33 fh => $fh, 31 fh => $fh,
34 timeout => 8, 32 timeout => 8,
35 on_error => sub { 33 on_error => sub {
36 ok (0, "server_error <$!>"); 34 ok (0, "server_error <$!>");
37 $server_done->send; undef $hd; 35 $server_done->send; undef $hd;
82 80
83 }, sub { 81 }, sub {
84 $server_port->send ($_[2]); 82 $server_port->send ($_[2]);
85 }; 83 };
86 84
85 my $hd; $hd = new AnyEvent::Handle
87 tcp_connect "localhost", $server_port->recv, sub { 86 connect => ["localhost", $server_port->recv],
88 my ($fh) = @_; 87 tls => "connect",
88 tls_ctx => $ctx,
89 timeout => 8,
90 on_connect => sub {
91 ok (1, "client_connect $mode");
92 },
93 on_error => sub {
94 ok (0, "client_error <$!>");
95 $client_done->send; undef $hd;
96 },
97 on_eof => sub {
98 ok (1, "client_eof");
99 $client_done->send; undef $hd;
100 };
89 101
90 ok (1, "client_connect $mode"); 102 if ($mode == 1) {
91 103 $hd->push_write ("1\n");
92 my $hd; $hd = new AnyEvent::Handle 104 $hd->on_drain (sub {
93 tls => "connect",
94 fh => $fh,
95 timeout => 8,
96 on_error => sub {
97 ok (0, "client_error <$!>"); 105 ok (1, "client_drain");
98 $client_done->send; undef $hd; 106 $client_done->send; undef $hd;
99 },
100 on_eof => sub {
101 ok (1, "client_eof");
102 $client_done->send; undef $hd;
103 }; 107 });
104
105 if ($mode == 1) { 108 } elsif ($mode == 2) {
109 $hd->push_read (line => sub {
110 ok ($_[1] eq "2", "line 2 <$_[1]>");
111 });
112 } elsif ($mode == 3) {
113 $hd->push_write ("3\n");
114 $hd->push_read (line => sub {
115 ok ($_[1] eq "4", "line 4 <$_[1]>");
116 });
117 } elsif ($mode == 4) {
118 $hd->push_read (line => sub {
119 ok ($_[1] eq "5", "line 5 <$_[1]>");
106 $hd->push_write ("1\n"); 120 $hd->push_write ("6\n");
107 $hd->on_drain (sub { 121 $hd->on_drain (sub {
108 ok (1, "client_drain"); 122 ok (1, "client_drain");
109 $client_done->send; undef $hd; 123 $client_done->send; undef $hd;
110 }); 124 });
125 });
111 } elsif ($mode == 2) { 126 } elsif ($mode == 5) {
127 # some randomly-sized blocks
128 srand 0;
129 my $cnt = 64;
130 my $block; $block = sub {
131 my $len = (16 << int rand 14) - 16 + int rand 32;
132 ok (1, "write $len");
133 $hd->push_write ("$len\n");
134 $hd->push_write (packstring => "N", "\x00" x $len);
135 };
136
137 for my $i (1..$cnt) {
112 $hd->push_read (line => sub { 138 $hd->push_read (line => sub {
113 ok ($_[1] eq "2", "line 2 <$_[1]>"); 139 my $len = $_[1];
114 }); 140 ok (1, "client block $len/1");
115 } elsif ($mode == 3) {
116 $hd->push_write ("3\n");
117 $hd->push_read (line => sub { 141 $hd->unshift_read (packstring => "N", sub {
118 ok ($_[1] eq "4", "line 4 <$_[1]>"); 142 ok ($len == length $_[1], "client block $len/2");
119 }); 143
120 } elsif ($mode == 4) { 144 if ($i != $cnt) {
121 $hd->push_read (line => sub { 145 $block->();
122 ok ($_[1] eq "5", "line 5 <$_[1]>"); 146 } else {
123 $hd->push_write ("6\n");
124 $hd->on_drain (sub {
125 ok (1, "client_drain"); 147 ok (1, "client_drain");
126 $client_done->send; undef $hd; 148 $client_done->send; undef $hd;
149 }
127 }); 150 });
128 }); 151 });
129 } elsif ($mode == 5) {
130 # some randomly-sized blocks
131 srand 0;
132 my $cnt = 64;
133 my $block; $block = sub {
134 my $len = (16 << int rand 14) - 16 + int rand 32;
135 ok (1, "write $len");
136 $hd->push_write ("$len\n");
137 $hd->push_write (packstring => "N", "\x00" x $len);
138 }; 152 }
139 153
140 for my $i (1..$cnt) {
141 $hd->push_read (line => sub {
142 my $len = $_[1];
143 ok (1, "client block $len/1");
144 $hd->unshift_read (packstring => "N", sub {
145 ok ($len == length $_[1], "client block $len/2");
146
147 if ($i != $cnt) {
148 $block->();
149 } else {
150 ok (1, "client_drain");
151 $client_done->send; undef $hd;
152 }
153 });
154 });
155 }
156
157 $block->(); 154 $block->();
158 }
159 }; 155 }
160 156
161 $server_done->recv; 157 $server_done->recv;
162 $client_done->recv; 158 $client_done->recv;
163} 159}
164 160
165__END__ 161__END__
162-----BEGIN RSA PRIVATE KEY-----
163MIIBOwIBAAJBAL3Qbshr1ENmAzHxIRIvUaIG8+PCjc7xdXLBm+asBPMu0APQVQXJ
164RTL3DueRUB51hAgSPgzSnj+ryZVzdcDER+UCAwEAAQJAGRftDWHz9dUOpxORo63N
165xPXWWE3oIWuac0lVKvGi1eMoI4UCW/Y7qM4rXsUXqasUo3mxV24+QqJHDQid1qi6
166AQIhAN5BtiqfjFjb97uUbdE6aiqE+nSG0eXlkeHKNpBNtiUxAiEA2qHNZ5fcQTqT
1674qlnYhbI+g6bTwuR7QnzzGTlHUGxsPUCIQDLfvTw37Zb4cNYb1WBPW/ZUHoU2SAz
16801cXmdMNmumL8QIhAJMGTENl9FBJPDopAcUM3YqLWBYICdIF51WEZC8QhpYhAiBe
169KcoNT51hv3pKK8oZtPJGsKFjmGVVnZeNNzyQmt/YWw==
170-----END RSA PRIVATE KEY-----
166-----BEGIN CERTIFICATE----- 171-----BEGIN CERTIFICATE-----
167MIIDJjCCAtCgAwIBAgIJAJ3NPnD6z5+2MA0GCSqGSIb3DQEBBQUAMIGWMQswCQYD 172MIIDJjCCAtCgAwIBAgIJAJ3NPnD6z5+2MA0GCSqGSIb3DQEBBQUAMIGWMQswCQYD
168VQQGEwJYTjETMBEGA1UECBMKU29tZS1TdGF0ZTESMBAGA1UEBxMJU29tZS1DaXR5 173VQQGEwJYTjETMBEGA1UECBMKU29tZS1TdGF0ZTESMBAGA1UEBxMJU29tZS1DaXR5
169MRUwEwYDVQQKEwxTb21lLUNvbXBhbnkxEjAQBgNVBAsTCVNvbWUtVW5pdDEQMA4G 174MRUwEwYDVQQKEwxTb21lLUNvbXBhbnkxEjAQBgNVBAsTCVNvbWUtVW5pdDEQMA4G
170A1UEAxMHU29tZS1DTjEhMB8GCSqGSIb3DQEJARYSc29tZUBlbWFpbC5pbnZhbGlk 175A1UEAxMHU29tZS1DTjEhMB8GCSqGSIb3DQEJARYSc29tZUBlbWFpbC5pbnZhbGlk
180b21wYW55MRIwEAYDVQQLEwlTb21lLVVuaXQxEDAOBgNVBAMTB1NvbWUtQ04xITAf 185b21wYW55MRIwEAYDVQQLEwlTb21lLVVuaXQxEDAOBgNVBAMTB1NvbWUtQ04xITAf
181BgkqhkiG9w0BCQEWEnNvbWVAZW1haWwuaW52YWxpZIIJAJ3NPnD6z5+2MAwGA1Ud 186BgkqhkiG9w0BCQEWEnNvbWVAZW1haWwuaW52YWxpZIIJAJ3NPnD6z5+2MAwGA1Ud
182EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADQQA48HjY23liyBMmh3cNo9TC+/bu/G3E 187EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADQQA48HjY23liyBMmh3cNo9TC+/bu/G3E
183oT5npm3+Lh6VA/4kKMyMu2mP31BToTZfl7vUcBJCQBhPFYOiPd/HnwzW 188oT5npm3+Lh6VA/4kKMyMu2mP31BToTZfl7vUcBJCQBhPFYOiPd/HnwzW
184-----END CERTIFICATE----- 189-----END CERTIFICATE-----
185-----BEGIN RSA PRIVATE KEY-----
186MIIBOwIBAAJBAL3Qbshr1ENmAzHxIRIvUaIG8+PCjc7xdXLBm+asBPMu0APQVQXJ
187RTL3DueRUB51hAgSPgzSnj+ryZVzdcDER+UCAwEAAQJAGRftDWHz9dUOpxORo63N
188xPXWWE3oIWuac0lVKvGi1eMoI4UCW/Y7qM4rXsUXqasUo3mxV24+QqJHDQid1qi6
189AQIhAN5BtiqfjFjb97uUbdE6aiqE+nSG0eXlkeHKNpBNtiUxAiEA2qHNZ5fcQTqT
1904qlnYhbI+g6bTwuR7QnzzGTlHUGxsPUCIQDLfvTw37Zb4cNYb1WBPW/ZUHoU2SAz
19101cXmdMNmumL8QIhAJMGTENl9FBJPDopAcUM3YqLWBYICdIF51WEZC8QhpYhAiBe
192KcoNT51hv3pKK8oZtPJGsKFjmGVVnZeNNzyQmt/YWw==
193-----END RSA PRIVATE KEY-----
194 190
195 191
196 192

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines