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

# User Rev Content
1 root 1.1 #!/usr/bin/perl
2    
3 root 1.4 use Test::More tests => 410;
4 root 1.1
5     use strict qw(vars subs);
6    
7     use AnyEvent::Socket;
8     use AnyEvent::Handle;
9 root 1.3 use AnyEvent::TLS;
10 root 1.1
11 root 1.3 my $ctx = new AnyEvent::TLS cert_file => $0;
12 root 1.1
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 root 1.3 tls_ctx => $ctx,
29 root 1.1 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 root 1.3 tls_ctx => $ctx,
91 root 1.1 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 root 1.3 -----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 root 1.1 -----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