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, 11 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

# User Rev Content
1 root 1.1 #!/usr/bin/perl
2    
3 root 1.5 BEGIN { eval "use Net::SSLeay (); 1" or ((print "1..0 # SKIP no Net::SSLeay\n"), exit 0) }
4    
5 root 1.4 use Test::More tests => 410;
6 root 1.1
7     use strict qw(vars subs);
8    
9     use AnyEvent::Socket;
10     use AnyEvent::Handle;
11 root 1.3 use AnyEvent::TLS;
12 root 1.1
13 root 1.3 my $ctx = new AnyEvent::TLS cert_file => $0;
14 root 1.1
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 root 1.3 tls_ctx => $ctx,
31 root 1.1 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 root 1.3 tls_ctx => $ctx,
93 root 1.1 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 root 1.3 -----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 root 1.1 -----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