ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/t/handle/02_write.t
Revision: 1.9
Committed: Wed Dec 29 04:16:34 2010 UTC (13 years, 6 months ago) by root
Content type: application/x-troff
Branch: MAIN
CVS Tags: rel-6_0, rel-5_3, rel-5_31
Changes since 1.8: +2 -1 lines
Log Message:
first round of ioasync rewrite

File Contents

# User Rev Content
1 elmex 1.1 #!perl
2 root 1.5
3 elmex 1.1 use strict;
4 root 1.5
5 root 1.9 use AnyEvent;
6     BEGIN { require AnyEvent::Impl::Perl unless $ENV{PERL_ANYEVENT_MODEL} }
7 elmex 1.1 use AnyEvent::Handle;
8     use Socket;
9    
10 elmex 1.3 print "1..7\n";
11    
12 elmex 1.1 my $cv = AnyEvent->condvar;
13    
14     socketpair my $rd, my $wr, AF_UNIX, SOCK_STREAM, PF_UNSPEC;
15    
16 elmex 1.3 my $rd_ae =
17     AnyEvent::Handle->new (
18     fh => $rd,
19     on_eof => sub {
20     warn "reader got EOF";
21     $cv->broadcast
22     }
23     );
24    
25     my $wr_ae =
26     AnyEvent::Handle->new (
27     fh => $wr,
28     on_eof => sub {
29     warn "writer got EOF\n";
30     $cv->broadcast
31     }
32     );
33 elmex 1.1
34     my $dat = '';
35    
36 root 1.6 $rd_ae->push_read (chunk => 5132, sub {
37 elmex 1.1 my ($rd_ae, $data) = @_;
38     $dat = substr $data, 0, 2;
39     $dat .= substr $data, -5;
40 elmex 1.3
41     print "ok 4 - first read chunk\n";
42 elmex 1.7 my $n = 5;
43 elmex 1.3 $wr_ae->push_write ("A" x 5000);
44     $wr_ae->on_drain (sub {
45     my ($wr_ae) = @_;
46     $wr_ae->on_drain;
47 elmex 1.7 print "ok " . $n++ . " - fourth write\n";
48 elmex 1.3
49 elmex 1.7 });
50    
51 elmex 1.8 $rd_ae->push_read (chunk => 5000, sub {
52 elmex 1.7 print "ok " . $n++ . " - second read chunk\n";
53     $cv->broadcast
54 elmex 1.3 });
55 elmex 1.1 });
56    
57 elmex 1.3 $wr_ae->push_write ("A" x 5000);
58     $wr_ae->push_write ("X" x 130);
59 elmex 1.1
60 elmex 1.3 # and now some extreme CPS action:
61     $wr_ae->on_drain (sub {
62     my ($wr_ae) = @_;
63     $wr_ae->on_drain;
64     print "ok 1 - first write\n";
65    
66     $wr_ae->push_write ("Y");
67     $wr_ae->on_drain (sub {
68     my ($wr_ae) = @_;
69     $wr_ae->on_drain;
70     print "ok 2 - second write\n";
71    
72     $wr_ae->push_write ("Z");
73     $wr_ae->on_drain (sub {
74     my ($wr_ae) = @_;
75     $wr_ae->on_drain;
76     print "ok 3 - third write\n";
77     });
78     });
79     });
80 elmex 1.1
81     $cv->wait;
82    
83 elmex 1.3 if ($dat eq "AAXXXYZ") {
84     print "ok 7 - received data\n";
85     } else {
86     warn "dat was '$dat'\n";
87     print "not ok 7 - received data\n";
88     }