ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/t/80_ssltest.t
Revision: 1.4
Committed: Thu Jul 9 18:58:19 2009 UTC (14 years, 11 months ago) by root
Content type: application/x-troff
Branch: MAIN
CVS Tags: rel-4_82, rel-4_83
Changes since 1.3: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

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