ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/t/80_ssltest.t
Revision: 1.5
Committed: Sat Jul 18 00:05:29 2009 UTC (14 years, 10 months ago) by root
Content type: application/x-troff
Branch: MAIN
CVS Tags: rel-4_86, rel-0_85
Changes since 1.4: +2 -0 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #!/usr/bin/perl
2
3 BEGIN { eval "use Net::SSLeay (); 1" or ((print "1..0 # SKIP no Net::SSLeay\n"), exit 0) }
4
5 use Test::More tests => 410;
6
7 use strict qw(vars subs);
8
9 use AnyEvent::Socket;
10 use AnyEvent::Handle;
11 use AnyEvent::TLS;
12
13 my $ctx = new AnyEvent::TLS cert_file => $0;
14
15 for my $mode (1..5) {
16 my $server_done = AnyEvent->condvar;
17 my $client_done = AnyEvent->condvar;
18
19 my $server_port = AnyEvent->condvar;
20
21 tcp_server "127.0.0.1", undef, sub {
22 my ($fh, $host, $port) = @_;
23
24 die unless $host eq "127.0.0.1";
25
26 ok (1, "server_connect $mode");
27
28 my $hd; $hd = new AnyEvent::Handle
29 tls => "accept",
30 tls_ctx => $ctx,
31 fh => $fh,
32 timeout => 8,
33 on_error => sub {
34 ok (0, "server_error <$!>");
35 $server_done->send; undef $hd;
36 },
37 on_eof => sub {
38 ok (1, "server_eof");
39 $server_done->send; undef $hd;
40 };
41
42 if ($mode == 1) {
43 $hd->push_read (line => sub {
44 ok ($_[1] eq "1", "line 1 <$_[1]>");
45 });
46 } elsif ($mode == 2) {
47 $hd->push_write ("2\n");
48 $hd->on_drain (sub {
49 ok (1, "server_drain");
50 $server_done->send; undef $hd;
51 });
52 } elsif ($mode == 3) {
53 $hd->push_read (line => sub {
54 ok ($_[1] eq "3", "line 3 <$_[1]>");
55 $hd->push_write ("4\n");
56 $hd->on_drain (sub {
57 ok (1, "server_drain");
58 $server_done->send; undef $hd;
59 });
60 });
61 } elsif ($mode == 4) {
62 $hd->push_write ("5\n");
63 $hd->push_read (line => sub {
64 ok ($_[1] eq "6", "line 6 <$_[1]>");
65 });
66 } elsif ($mode == 5) {
67 $hd->on_read (sub {
68 ok (1, "on_read");
69 $hd->push_read (line => sub {
70 my $len = $_[1];
71 ok (1, "push_read $len");
72 $hd->push_read (packstring => "N", sub {
73 ok ($len == length $_[1], "block server $len");
74 $hd->push_write ("$len\n");
75 $hd->push_write (packstring => "N", $_[1]);
76 });
77 });
78 });
79 }
80
81 }, sub {
82 $server_port->send ($_[2]);
83 };
84
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
91 tls => "connect",
92 tls_ctx => $ctx,
93 fh => $fh,
94 timeout => 8,
95 on_error => sub {
96 ok (0, "client_error <$!>");
97 $client_done->send; undef $hd;
98 },
99 on_eof => sub {
100 ok (1, "client_eof");
101 $client_done->send; undef $hd;
102 };
103
104 if ($mode == 1) {
105 $hd->push_write ("1\n");
106 $hd->on_drain (sub {
107 ok (1, "client_drain");
108 $client_done->send; undef $hd;
109 });
110 } elsif ($mode == 2) {
111 $hd->push_read (line => sub {
112 ok ($_[1] eq "2", "line 2 <$_[1]>");
113 });
114 } elsif ($mode == 3) {
115 $hd->push_write ("3\n");
116 $hd->push_read (line => sub {
117 ok ($_[1] eq "4", "line 4 <$_[1]>");
118 });
119 } elsif ($mode == 4) {
120 $hd->push_read (line => sub {
121 ok ($_[1] eq "5", "line 5 <$_[1]>");
122 $hd->push_write ("6\n");
123 $hd->on_drain (sub {
124 ok (1, "client_drain");
125 $client_done->send; undef $hd;
126 });
127 });
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 }
158 };
159
160 $server_done->recv;
161 $client_done->recv;
162 }
163
164 __END__
165 -----BEGIN RSA PRIVATE KEY-----
166 MIIBOwIBAAJBAL3Qbshr1ENmAzHxIRIvUaIG8+PCjc7xdXLBm+asBPMu0APQVQXJ
167 RTL3DueRUB51hAgSPgzSnj+ryZVzdcDER+UCAwEAAQJAGRftDWHz9dUOpxORo63N
168 xPXWWE3oIWuac0lVKvGi1eMoI4UCW/Y7qM4rXsUXqasUo3mxV24+QqJHDQid1qi6
169 AQIhAN5BtiqfjFjb97uUbdE6aiqE+nSG0eXlkeHKNpBNtiUxAiEA2qHNZ5fcQTqT
170 4qlnYhbI+g6bTwuR7QnzzGTlHUGxsPUCIQDLfvTw37Zb4cNYb1WBPW/ZUHoU2SAz
171 01cXmdMNmumL8QIhAJMGTENl9FBJPDopAcUM3YqLWBYICdIF51WEZC8QhpYhAiBe
172 KcoNT51hv3pKK8oZtPJGsKFjmGVVnZeNNzyQmt/YWw==
173 -----END RSA PRIVATE KEY-----
174 -----BEGIN CERTIFICATE-----
175 MIIDJjCCAtCgAwIBAgIJAJ3NPnD6z5+2MA0GCSqGSIb3DQEBBQUAMIGWMQswCQYD
176 VQQGEwJYTjETMBEGA1UECBMKU29tZS1TdGF0ZTESMBAGA1UEBxMJU29tZS1DaXR5
177 MRUwEwYDVQQKEwxTb21lLUNvbXBhbnkxEjAQBgNVBAsTCVNvbWUtVW5pdDEQMA4G
178 A1UEAxMHU29tZS1DTjEhMB8GCSqGSIb3DQEJARYSc29tZUBlbWFpbC5pbnZhbGlk
179 MB4XDTA4MTAwMTA3NDk1OFoXDTM5MDMwODA3NDk1OFowgZYxCzAJBgNVBAYTAlhO
180 MRMwEQYDVQQIEwpTb21lLVN0YXRlMRIwEAYDVQQHEwlTb21lLUNpdHkxFTATBgNV
181 BAoTDFNvbWUtQ29tcGFueTESMBAGA1UECxMJU29tZS1Vbml0MRAwDgYDVQQDEwdT
182 b21lLUNOMSEwHwYJKoZIhvcNAQkBFhJzb21lQGVtYWlsLmludmFsaWQwXDANBgkq
183 hkiG9w0BAQEFAANLADBIAkEAvdBuyGvUQ2YDMfEhEi9Rogbz48KNzvF1csGb5qwE
184 8y7QA9BVBclFMvcO55FQHnWECBI+DNKeP6vJlXN1wMRH5QIDAQABo4H+MIH7MB0G
185 A1UdDgQWBBScspJuXxPCTlFAyiMeXa6j/zW8ATCBywYDVR0jBIHDMIHAgBScspJu
186 XxPCTlFAyiMeXa6j/zW8AaGBnKSBmTCBljELMAkGA1UEBhMCWE4xEzARBgNVBAgT
187 ClNvbWUtU3RhdGUxEjAQBgNVBAcTCVNvbWUtQ2l0eTEVMBMGA1UEChMMU29tZS1D
188 b21wYW55MRIwEAYDVQQLEwlTb21lLVVuaXQxEDAOBgNVBAMTB1NvbWUtQ04xITAf
189 BgkqhkiG9w0BCQEWEnNvbWVAZW1haWwuaW52YWxpZIIJAJ3NPnD6z5+2MAwGA1Ud
190 EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADQQA48HjY23liyBMmh3cNo9TC+/bu/G3E
191 oT5npm3+Lh6VA/4kKMyMu2mP31BToTZfl7vUcBJCQBhPFYOiPd/HnwzW
192 -----END CERTIFICATE-----
193
194
195