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.5 by root, Sat Jul 18 00:05:29 2009 UTC vs.
Revision 1.10 by root, Thu Apr 5 06:14:10 2012 UTC

1#!/usr/bin/perl 1#!/usr/bin/perl
2 2
3BEGIN { eval "use Net::SSLeay (); 1" or ((print "1..0 # SKIP no Net::SSLeay\n"), exit 0) } 3BEGIN { eval "use Net::SSLeay 1.33 (); 1" or ((print "1..0 # SKIP no usable Net::SSLeay\n"), exit 0) }
4 4
5use Test::More tests => 410; 5use Test::More tests => 415;
6 6
7no warnings;
7use strict qw(vars subs); 8use strict qw(vars subs);
8 9
9use AnyEvent::Socket; 10use AnyEvent::Socket;
10use AnyEvent::Handle; 11use AnyEvent::Handle;
11use AnyEvent::TLS; 12use AnyEvent::TLS;
12 13
13my $ctx = new AnyEvent::TLS cert_file => $0; 14my $ctx = new AnyEvent::TLS cert_file => $0;
14 15
15for my $mode (1..5) { 16for my $mode (1..5) {
17 ok (1, "mode $mode");
18
16 my $server_done = AnyEvent->condvar; 19 my $server_done = AnyEvent->condvar;
17 my $client_done = AnyEvent->condvar; 20 my $client_done = AnyEvent->condvar;
18 21
19 my $server_port = AnyEvent->condvar; 22 my $server_port = AnyEvent->condvar;
20 23
29 tls => "accept", 32 tls => "accept",
30 tls_ctx => $ctx, 33 tls_ctx => $ctx,
31 fh => $fh, 34 fh => $fh,
32 timeout => 8, 35 timeout => 8,
33 on_error => sub { 36 on_error => sub {
34 ok (0, "server_error <$!>"); 37 ok (0, "server_error <$_[2]>");
35 $server_done->send; undef $hd; 38 $server_done->send; undef $hd;
36 }, 39 },
37 on_eof => sub { 40 on_eof => sub {
38 ok (1, "server_eof"); 41 ok (1, "server_eof");
39 $server_done->send; undef $hd; 42 $server_done->send; undef $hd;
80 83
81 }, sub { 84 }, sub {
82 $server_port->send ($_[2]); 85 $server_port->send ($_[2]);
83 }; 86 };
84 87
85 tcp_connect "localhost", $server_port->recv, sub {
86 my ($fh) = @_;
87
88 ok (1, "client_connect $mode");
89
90 my $hd; $hd = new AnyEvent::Handle 88 my $hd; $hd = new AnyEvent::Handle
89 connect => ["127.0.0.1", $server_port->recv],
91 tls => "connect", 90 tls => "connect",
92 tls_ctx => $ctx, 91 tls_ctx => $ctx,
93 fh => $fh,
94 timeout => 8, 92 timeout => 8,
93 on_connect => sub {
94 ok (1, "client_connect $mode");
95 },
95 on_error => sub { 96 on_error => sub {
96 ok (0, "client_error <$!>"); 97 ok (0, "client_error <$_[2]>");
97 $client_done->send; undef $hd; 98 $client_done->send; undef $hd;
98 }, 99 },
99 on_eof => sub { 100 on_eof => sub {
100 ok (1, "client_eof"); 101 ok (1, "client_eof");
101 $client_done->send; undef $hd; 102 $client_done->send; undef $hd;
102 }; 103 };
103 104
104 if ($mode == 1) { 105 if ($mode == 1) {
106 $hd->push_write ("1\n");
107 $hd->on_drain (sub {
108 ok (1, "client_drain");
109 $client_done->send; undef $hd;
110 });
111 } elsif ($mode == 2) {
112 $hd->push_read (line => sub {
113 ok ($_[1] eq "2", "line 2 <$_[1]>");
114 });
115 } elsif ($mode == 3) {
116 $hd->push_write ("3\n");
117 $hd->push_read (line => sub {
118 ok ($_[1] eq "4", "line 4 <$_[1]>");
119 });
120 } elsif ($mode == 4) {
121 $hd->push_read (line => sub {
122 ok ($_[1] eq "5", "line 5 <$_[1]>");
105 $hd->push_write ("1\n"); 123 $hd->push_write ("6\n");
106 $hd->on_drain (sub { 124 $hd->on_drain (sub {
107 ok (1, "client_drain"); 125 ok (1, "client_drain");
108 $client_done->send; undef $hd; 126 $client_done->send; undef $hd;
109 }); 127 });
128 });
110 } elsif ($mode == 2) { 129 } elsif ($mode == 5) {
111 $hd->push_read (line => sub { 130 # some randomly-sized blocks
112 ok ($_[1] eq "2", "line 2 <$_[1]>"); 131 srand 0;
113 }); 132 my $cnt = 64;
114 } elsif ($mode == 3) { 133 my $block; $block = sub {
134 my $len = (16 << int rand 14) - 16 + int rand 32;
135 ok (1, "write $len");
115 $hd->push_write ("3\n"); 136 $hd->push_write ("$len\n");
116 $hd->push_read (line => sub { 137 $hd->push_write (packstring => "N", "\x00" x $len);
117 ok ($_[1] eq "4", "line 4 <$_[1]>");
118 }); 138 };
119 } elsif ($mode == 4) { 139
140 for my $i (1..$cnt) {
141 $hd->push_read (line => sub {
142 my ($i, $cnt, $block) = ($i, $cnt, $block); # 5.8.9. bug workaround
143 my $len = $_[1];
144 ok (1, "client block $len/1");
120 $hd->push_read (line => sub { 145 $hd->unshift_read (packstring => "N", sub {
121 ok ($_[1] eq "5", "line 5 <$_[1]>"); 146 ok ($len == length $_[1], "client block $len/2");
122 $hd->push_write ("6\n"); 147
123 $hd->on_drain (sub { 148 if ($i != $cnt) {
149 $block->();
150 } else {
124 ok (1, "client_drain"); 151 ok (1, "client_drain 5");
125 $client_done->send; undef $hd; 152 $client_done->send; undef $hd;
153 }
126 }); 154 });
127 }); 155 });
128 } elsif ($mode == 5) {
129 # some randomly-sized blocks
130 srand 0;
131 my $cnt = 64;
132 my $block; $block = sub {
133 my $len = (16 << int rand 14) - 16 + int rand 32;
134 ok (1, "write $len");
135 $hd->push_write ("$len\n");
136 $hd->push_write (packstring => "N", "\x00" x $len);
137 };
138
139 for my $i (1..$cnt) {
140 $hd->push_read (line => sub {
141 my $len = $_[1];
142 ok (1, "client block $len/1");
143 $hd->unshift_read (packstring => "N", sub {
144 ok ($len == length $_[1], "client block $len/2");
145
146 if ($i != $cnt) {
147 $block->();
148 } else {
149 ok (1, "client_drain");
150 $client_done->send; undef $hd;
151 }
152 });
153 });
154 }
155
156 $block->();
157 } 156 }
157
158 $block->();
158 }; 159 }
159 160
160 $server_done->recv; 161 $server_done->recv;
161 $client_done->recv; 162 $client_done->recv;
162} 163}
163 164
164__END__ 165__END__
165-----BEGIN RSA PRIVATE KEY----- 166-----BEGIN RSA PRIVATE KEY-----
166MIIBOwIBAAJBAL3Qbshr1ENmAzHxIRIvUaIG8+PCjc7xdXLBm+asBPMu0APQVQXJ 167MIIEpAIBAAKCAQEA02VwAqlQzCrPenkxUjawHcXzJreJ9LDhX7Bkg3E/RB6Ilm4D
167RTL3DueRUB51hAgSPgzSnj+ryZVzdcDER+UCAwEAAQJAGRftDWHz9dUOpxORo63N 168LBeilCmzkY7avp57+WCiVw2qkg+kH4Ef2sd+r10UCGPh/1diLehRAzp3Ho1bixyg
168xPXWWE3oIWuac0lVKvGi1eMoI4UCW/Y7qM4rXsUXqasUo3mxV24+QqJHDQid1qi6 169w+zkDm79OnN3uHxuKigkAxx3GGz9HhQA83U+RUns+39/OnFh0RY6/f5rV2ziA9jD
169AQIhAN5BtiqfjFjb97uUbdE6aiqE+nSG0eXlkeHKNpBNtiUxAiEA2qHNZ5fcQTqT 1706HK3Mnsuxocd46YbVdiqlQK430CgiGj8dV44JG6+R6x3r5qXDbbRtGubC29kQOUq
1704qlnYhbI+g6bTwuR7QnzzGTlHUGxsPUCIQDLfvTw37Zb4cNYb1WBPW/ZUHoU2SAz 171kYslbpTo7ml8ShyqAP6qa8BpeSIaNG1CQQ/7JkAdxSWyFHqMQ0HR3BUiaEfUElZt
17101cXmdMNmumL8QIhAJMGTENl9FBJPDopAcUM3YqLWBYICdIF51WEZC8QhpYhAiBe 172DFgXcCkKB5F8jx+wYoLzlPHHZaUvfP2nueYjcwIDAQABAoIBAQCtRDMuu0ByV5R/
172KcoNT51hv3pKK8oZtPJGsKFjmGVVnZeNNzyQmt/YWw== 173Od5nGFP500mcrkrwuBnBqH56DdRhLPWe9sS62xRyhEuePoykOJo8qCvnVlg8J33K
174JLfLRkBb09qbleKiuyjJn+Tm1IDWFd62gtxyOjQicG41/nZeS/6vpv79XdNvvcUp
175ZhPxeGN1v0XyTWomqNAX5DSuAl5Q5HxkaRYNeuLZaPYkqmEVTgYqNSes/wRLKUb6
176MaVrZ9AA/oHJMmmV4evf06s7l7ICjxAWeas7CI6UGkEz8ZFoVRJsLk5xtTsnZLgf
177f24/pqHz1vApPs7CsJhK2HsLZcxMPD+hmTNI/Njl51WoH8zGhkv+p88vDzybpNSF
178Hpkl+ZlBAoGBAOyfjVLD0OznJKSFksoCZKS4dlPHgXUb47Qb/XchIySQ/DNO6ff9
179AA6r6doDFp51A8N1GRtGQN4LKujFPOdZ5ah7zbc2PfuOJGHku0Oby+ydgHJ19eW4
180s3CIM20TuzLndFPrEGFgOrt+i5qKisti2OOZhjsDwfd48vsBm9U20lUpAoGBAOS1
181Chm+vA7JevPzl+acbDSiyELaNRAXZ73CX4NIxJURjsgDeOurnBtLQEQyagZbNHcx
182W4pc59Ql5KDLzu/Sne8oC3pxhaWeIPhc2d3cd/8UyGtQLtN2QnilwkjHgi3x1JGb
183RPRsgAV6nwn10qUrze1XLkHsTCRI4QYD/k0uXcs7AoGBAMStJaFag2i2Ax4ArG7e
184KFtFu4yNckwtv0kwTrBbScOWAxp+iDiJASgwunJsSLuylUs8JH8oGLi23ZaWgrXl
185Yd918BpNqp1Rm2oG3aQndguZKm95Hscvi26Itv39/YYlHeq2omndu1OmrlDowM6m
186vZIIRKr+x5Vz4brCro09QPxpAoGARJAdghBTEl/Gc2HgdOsJ6VGvlZMS+0r498NQ
187nOvwuvuzgTTBSG1+9BPAJXGzpUosVVs/pSArA8eEXcwbsnvCixLHNiLYPQlFuw8i
1885UcV1iul1b4I+63lSYPv1Z+x4BIydqBEsL3iN0JGcVb3mjqilndfT7YGMY6DnykN
189UJgI2EcCgYAMfZHnD06XFM8ny+NsFILItpGqjCmAhkEPGwl1Zhy5Hx16CFDPDwGt
190CmIbxNSLsDyiiK+i5tuSUFhV2Bw/iT539979INTIdNL1ughfhATR8MVNiOKCvZBa
191uoEeE19szmG7Mj2eV2IDH0e8iaikjRFcfN89s39tNn1AjBNmEccUJA==
173-----END RSA PRIVATE KEY----- 192-----END RSA PRIVATE KEY-----
193-----
174-----BEGIN CERTIFICATE----- 194-----BEGIN CERTIFICATE-----
175MIIDJjCCAtCgAwIBAgIJAJ3NPnD6z5+2MA0GCSqGSIb3DQEBBQUAMIGWMQswCQYD 195MIIDHTCCAgWgAwIBAgIJAPASTbY2HCx0MA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
176VQQGEwJYTjETMBEGA1UECBMKU29tZS1TdGF0ZTESMBAGA1UEBxMJU29tZS1DaXR5 196BAMTCEFueUV2ZW50MB4XDTEyMDQwNTA1NTk1MFoXDTM3MDQwNTA1NTk1MFowEzER
177MRUwEwYDVQQKEwxTb21lLUNvbXBhbnkxEjAQBgNVBAsTCVNvbWUtVW5pdDEQMA4G 197MA8GA1UEAxMIQW55RXZlbnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
178A1UEAxMHU29tZS1DTjEhMB8GCSqGSIb3DQEJARYSc29tZUBlbWFpbC5pbnZhbGlk 198AQDTZXACqVDMKs96eTFSNrAdxfMmt4n0sOFfsGSDcT9EHoiWbgMsF6KUKbORjtq+
179MB4XDTA4MTAwMTA3NDk1OFoXDTM5MDMwODA3NDk1OFowgZYxCzAJBgNVBAYTAlhO 199nnv5YKJXDaqSD6QfgR/ax36vXRQIY+H/V2It6FEDOncejVuLHKDD7OQObv06c3e4
180MRMwEQYDVQQIEwpTb21lLVN0YXRlMRIwEAYDVQQHEwlTb21lLUNpdHkxFTATBgNV 200fG4qKCQDHHcYbP0eFADzdT5FSez7f386cWHRFjr9/mtXbOID2MPocrcyey7Ghx3j
181BAoTDFNvbWUtQ29tcGFueTESMBAGA1UECxMJU29tZS1Vbml0MRAwDgYDVQQDEwdT 201phtV2KqVArjfQKCIaPx1Xjgkbr5HrHevmpcNttG0a5sLb2RA5SqRiyVulOjuaXxK
182b21lLUNOMSEwHwYJKoZIhvcNAQkBFhJzb21lQGVtYWlsLmludmFsaWQwXDANBgkq 202HKoA/qprwGl5Iho0bUJBD/smQB3FJbIUeoxDQdHcFSJoR9QSVm0MWBdwKQoHkXyP
183hkiG9w0BAQEFAANLADBIAkEAvdBuyGvUQ2YDMfEhEi9Rogbz48KNzvF1csGb5qwE 203H7BigvOU8cdlpS98/ae55iNzAgMBAAGjdDByMB0GA1UdDgQWBBTHphJ9Il0PtIWD
1848y7QA9BVBclFMvcO55FQHnWECBI+DNKeP6vJlXN1wMRH5QIDAQABo4H+MIH7MB0G 204DI9aueToXo9DYzBDBgNVHSMEPDA6gBTHphJ9Il0PtIWDDI9aueToXo9DY6EXpBUw
185A1UdDgQWBBScspJuXxPCTlFAyiMeXa6j/zW8ATCBywYDVR0jBIHDMIHAgBScspJu 205EzERMA8GA1UEAxMIQW55RXZlbnSCCQDwEk22NhwsdDAMBgNVHRMEBTADAQH/MA0G
186XxPCTlFAyiMeXa6j/zW8AaGBnKSBmTCBljELMAkGA1UEBhMCWE4xEzARBgNVBAgT 206CSqGSIb3DQEBBQUAA4IBAQA/vY+qg2xjNeOuDySW/VOsStEwcaiAm/t24z3TYoZG
187ClNvbWUtU3RhdGUxEjAQBgNVBAcTCVNvbWUtQ2l0eTEVMBMGA1UEChMMU29tZS1D 2072ZzyKuvFXolhXsalCahNPcyUxZqDAekODPRaq+geFaZrOn41cq/LABTKv5Theukv
188b21wYW55MRIwEAYDVQQLEwlTb21lLVVuaXQxEDAOBgNVBAMTB1NvbWUtQ04xITAf 208H7IruIFARBo1pTPFCKMnDqESBdHvV1xTOcKGxGH5I9iMgiUrd/NnlAaloT/cCNFI
189BgkqhkiG9w0BCQEWEnNvbWVAZW1haWwuaW52YWxpZIIJAJ3NPnD6z5+2MAwGA1Ud 209OwhEPsF9kBsZwJBGWrjjVttU2lzMzizS7vaSIWLBuEDObWbSXiU+IdG+nODOe2Dv
190EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADQQA48HjY23liyBMmh3cNo9TC+/bu/G3E 210W7PL43yd4fz4HQvN4IaZrtwkd7XiKodRR1gWjLjW/3y5kuXL+DA/jkTjrRgiH8K7
191oT5npm3+Lh6VA/4kKMyMu2mP31BToTZfl7vUcBJCQBhPFYOiPd/HnwzW 211lVjm7gvkULRV2POQqtc2DUVXLubQmmGSjmQmxSwFX65t
192-----END CERTIFICATE----- 212-----END CERTIFICATE-----
193
194
195

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines