Cleaned up demos, various build fixes
[urisagit/Stem.git] / t / socket / plain.t
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 }