ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/t/80_ssltest.t
Revision: 1.2
Committed: Fri Jul 3 08:51:48 2009 UTC (15 years ago) by root
Content type: application/x-troff
Branch: MAIN
CVS Tags: rel-4_8
Changes since 1.1: +3 -2 lines
Log Message:
*** empty log message ***

File Contents

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