Commit | Line | Data |
4536f655 |
1 | # t/socket/plain.t |
2 | |
3 | use strict ; |
4 | |
5 | use Stem ; |
6 | use Stem::Socket ; |
7 | |
8 | use Test::More tests => 9 ; |
9 | |
10 | my $data = "FOO\n" ; |
11 | |
12 | test_socket() ; |
13 | |
14 | exit 0 ; |
15 | |
16 | sub test_socket { |
17 | |
18 | my( $self, $accept_event, $connect_event ) ; |
19 | |
20 | $self = bless {} ; |
21 | |
22 | $accept_event = Stem::Socket->new( |
23 | 'object' => $self, |
24 | 'port' => 10_000, |
25 | 'server' => 1, |
26 | 'method' => 'accepted', |
27 | ) ; |
28 | |
29 | die $accept_event unless ref $accept_event ; |
30 | $self->{'accept_event'} = $accept_event ; |
31 | ok( 1, 'listen' ) ; |
32 | |
33 | $connect_event = Stem::Socket->new( |
34 | 'object' => $self, |
35 | 'port' => 10_000, |
36 | ) ; |
37 | |
38 | die $connect_event unless ref $connect_event ; |
39 | $self->{'connect_event'} = $connect_event ; |
40 | ok( 1, 'connect' ) ; |
41 | |
42 | Stem::Event::start_loop() ; |
43 | |
44 | ok( 1, 'event loop exit' ) ; |
45 | } |
46 | |
47 | sub accepted { |
48 | |
49 | my( $self, $accepted_sock ) = @_ ; |
50 | |
51 | ok( 1, 'accepted' ) ; |
52 | |
53 | $self->{'accepted_sock'} = $accepted_sock ; |
54 | |
55 | $self->{'accept_event'}->shut_down() ; |
56 | |
57 | ok( 1, 'accept canceled' ) ; |
58 | |
59 | my $read_event = Stem::Event::Read->new( |
60 | 'object' => $self, |
61 | 'fh' => $accepted_sock, |
62 | ) ; |
63 | |
64 | $self->{'read_event'} = $read_event ; |
65 | } |
66 | |
67 | sub readable { |
68 | |
69 | my( $self ) = @_ ; |
70 | |
71 | ok(1, 'read event triggered' ) ; |
72 | |
73 | my $bytes_read = sysread( $self->{'accepted_sock'}, |
74 | my $read_buf, 1000 ) ; |
75 | |
76 | ok( $bytes_read, 'read byte count' ) ; |
77 | |
78 | is( $read_buf, $data, 'read event compare' ) ; |
79 | |
80 | close( $self->{'accepted_sock'} ) ; |
81 | |
82 | $self->{'read_event'}->cancel() ; |
83 | } |
84 | |
85 | sub connected { |
86 | |
87 | my( $self, $connected_sock ) = @_ ; |
88 | |
89 | ok( 1, 'connected' ) ; |
90 | |
91 | my $wcnt = $connected_sock->syswrite( $data ) ; |
92 | #print "SYSWR C $wcnt\n" ; |
93 | |
94 | $self->{'connect_event'}->shut_down() ; |
95 | } |