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 (14 years, 11 months 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

# User Rev Content
1 root 1.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 root 1.2
13     Net::SSLeay::CTX_use_certificate_chain_file ($ctx->ctx, $0)
14 root 1.1 or die "unable to set certificate chain file";
15 root 1.2 Net::SSLeay::CTX_use_PrivateKey_file ($ctx->ctx, $0, Net::SSLeay::FILETYPE_PEM ())
16 root 1.1 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