eventmachine 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,132 @@
1
+ # $Id: test_httpclient.rb 518 2007-08-30 10:17:02Z blackhedd $
2
+ #
3
+ # Author:: Francis Cianfrocca (gmail: blackhedd)
4
+ # Homepage:: http://rubyeventmachine.com
5
+ # Date:: 8 April 2006
6
+ #
7
+ # See EventMachine and EventMachine::Connection for documentation and
8
+ # usage examples.
9
+ #
10
+ #----------------------------------------------------------------------------
11
+ #
12
+ # Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
13
+ # Gmail: blackhedd
14
+ #
15
+ # This program is free software; you can redistribute it and/or modify
16
+ # it under the terms of either: 1) the GNU General Public License
17
+ # as published by the Free Software Foundation; either version 2 of the
18
+ # License, or (at your option) any later version; or 2) Ruby's License.
19
+ #
20
+ # See the file COPYING for complete licensing information.
21
+ #
22
+ #---------------------------------------------------------------------------
23
+ #
24
+ #
25
+ #
26
+
27
+ $:.unshift "../lib"
28
+ require 'eventmachine'
29
+
30
+ class TestHttpClient2 < Test::Unit::TestCase
31
+ Localhost = "127.0.0.1"
32
+ Localport = 9801
33
+
34
+ def setup
35
+ end
36
+
37
+ def teardown
38
+ end
39
+
40
+
41
+ class TestServer < EM::Connection
42
+ end
43
+
44
+ # #connect returns an object which has made a connection to an HTTP server
45
+ # and exposes methods for making HTTP requests on that connection.
46
+ # #connect can take either a pair of parameters (a host and a port),
47
+ # or a single parameter which is a Hash.
48
+ #
49
+ def test_connect
50
+ EM.run {
51
+ EM.start_server Localhost, Localport, TestServer
52
+ http1 = EM::P::HttpClient2.connect Localhost, Localport
53
+ http2 = EM::P::HttpClient2.connect( :host=>Localhost, :port=>Localport )
54
+ EM.stop
55
+ }
56
+ end
57
+
58
+
59
+ def test_bad_port
60
+ EM.run {
61
+ EM.start_server Localhost, Localport, TestServer
62
+ assert_raise( ArgumentError ) {
63
+ EM::P::HttpClient2.connect Localhost, "xxx"
64
+ }
65
+ EM.stop
66
+ }
67
+ end
68
+
69
+ def test_bad_server
70
+ EM.run {
71
+ http = EM::P::HttpClient2.connect Localhost, 9999
72
+ d = http.get "/"
73
+ d.errback {p d.internal_error; EM.stop }
74
+ }
75
+ end
76
+
77
+ def test_get
78
+ EM.run {
79
+ http = EM::P::HttpClient2.connect "www.bayshorenetworks.com", 80
80
+ d = http.get "/"
81
+ d.callback {
82
+ p d.content
83
+ EM.stop
84
+ }
85
+ }
86
+ end
87
+
88
+ # Not a pipelined request because we wait for one response before we request the next.
89
+ def test_get_multiple
90
+ EM.run {
91
+ http = EM::P::HttpClient2.connect "www.bayshorenetworks.com", 80
92
+ d = http.get "/"
93
+ d.callback {
94
+ e = http.get "/"
95
+ e.callback {
96
+ p e.content
97
+ EM.stop
98
+ }
99
+ }
100
+ }
101
+ end
102
+
103
+ def test_get_pipeline
104
+ EM.run {
105
+ http = EM::P::HttpClient2.connect "www.microsoft.com", 80
106
+ d = http.get("/")
107
+ d.callback {
108
+ p d.headers
109
+ }
110
+ e = http.get("/")
111
+ e.callback {
112
+ p e.headers
113
+ }
114
+ EM::Timer.new(1) {EM.stop}
115
+ }
116
+ end
117
+
118
+
119
+ def test_authheader
120
+ EM.run {
121
+ EM.start_server Localhost, Localport, TestServer
122
+ http = EM::P::HttpClient2.connect Localhost, 18842
123
+ d = http.get :url=>"/", :authorization=>"Basic xxx"
124
+ d.callback {EM.stop}
125
+ d.errback {EM.stop}
126
+ }
127
+ end
128
+
129
+
130
+ end
131
+
132
+
@@ -0,0 +1,127 @@
1
+ # $Id: test_pure.rb 604 2007-12-06 12:31:39Z blackhedd $
2
+ #
3
+ # Author:: Francis Cianfrocca (gmail: blackhedd)
4
+ # Homepage:: http://rubyeventmachine.com
5
+ # Date:: 8 April 2006
6
+ #
7
+ # See EventMachine and EventMachine::Connection for documentation and
8
+ # usage examples.
9
+ #
10
+ #----------------------------------------------------------------------------
11
+ #
12
+ # Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
13
+ # Gmail: blackhedd
14
+ #
15
+ # This program is free software; you can redistribute it and/or modify
16
+ # it under the terms of either: 1) the GNU General Public License
17
+ # as published by the Free Software Foundation; either version 2 of the
18
+ # License, or (at your option) any later version; or 2) Ruby's License.
19
+ #
20
+ # See the file COPYING for complete licensing information.
21
+ #
22
+ #---------------------------------------------------------------------------
23
+ #
24
+ #
25
+ #
26
+
27
+ $:.unshift "../lib"
28
+ require 'eventmachine'
29
+
30
+ class TestPure < Test::Unit::TestCase
31
+
32
+
33
+ Host,Port = "0.0.0.0", 9060
34
+
35
+
36
+ # These tests are intended to exercise problems that come up in the
37
+ # pure-Ruby implementation. However, we DON'T constrain them such that
38
+ # they only run in pure-Ruby. These tests need to work identically in
39
+ # any implementation.
40
+
41
+ def setup
42
+ end
43
+
44
+ def teardown
45
+ end
46
+
47
+ #-------------------------------------
48
+
49
+ # The EM reactor needs to run down open connections and release other resources
50
+ # when it stops running. Make sure this happens even if user code throws a Ruby
51
+ # exception.
52
+ # One way to see this is to run identical tests that open a TCP server and throw
53
+ # an exception. (We do this twice because an exception aborts a test. We make the
54
+ # two tests identical except for the method name because we can't predict the order
55
+ # in which the test harness will run them.)
56
+ # If exception handling is incorrect, the second test will fail with a no-bind error
57
+ # because the TCP server opened in the first test will not have been closed.
58
+ #
59
+ def run_exception
60
+ EM.run {
61
+ EM.start_server Host, Port
62
+ raise "an exception"
63
+ }
64
+ end
65
+ def test_exception_1
66
+ assert_raise( RuntimeError ) { run_exception }
67
+ end
68
+ def test_exception_2
69
+ assert_raise( RuntimeError ) { run_exception }
70
+ end
71
+
72
+
73
+
74
+ # Under some circumstances, the pure Ruby library would emit an Errno::ECONNREFUSED
75
+ # exception on certain kinds of TCP connect-errors.
76
+ # It's always been something of an open question whether EM should throw an exception
77
+ # in these cases but the defined answer has always been to catch it the unbind method.
78
+ # With a connect failure, the latter will always fire, but connection_completed will
79
+ # never fire. So even though the point is arguable, it's incorrect for the pure Ruby
80
+ # version to throw an exception.
81
+ module TestConnrefused
82
+ def unbind
83
+ EM.stop
84
+ end
85
+ def connection_completed
86
+ raise "should never get here"
87
+ end
88
+ end
89
+ def test_connrefused
90
+ EM.run {
91
+ EM.connect "0.0.0.0", 60001, TestConnrefused
92
+ }
93
+ end
94
+
95
+
96
+ # Make sure connection_completed gets called as expected with TCP clients. This is the
97
+ # opposite of test_connrefused.
98
+ # If the test fails, it will hang because EM.stop never gets called.
99
+ #
100
+ module TestConnaccepted
101
+ def connection_completed
102
+ EM.stop
103
+ end
104
+ end
105
+ def test_connaccepted
106
+ timeout = false
107
+ EM.run {
108
+ EM.start_server "0.0.0.0", 60002
109
+ EM.connect "0.0.0.0", 60002, TestConnaccepted
110
+ EM::Timer.new(1) {timeout = true; EM.stop}
111
+ }
112
+ assert_equal( false, timeout )
113
+ end
114
+
115
+
116
+
117
+ def test_reactor_running
118
+ a = false
119
+ EM.run {
120
+ a = EM.reactor_running?
121
+ EM.next_tick {EM.stop}
122
+ }
123
+ assert a
124
+ end
125
+
126
+
127
+ end
@@ -1,4 +1,4 @@
1
- # $Id: test_timers.rb 323 2007-05-22 22:22:43Z blackhedd $
1
+ # $Id: test_timers.rb 597 2007-12-05 12:48:36Z blackhedd $
2
2
  #
3
3
  # Author:: Francis Cianfrocca (gmail: blackhedd)
4
4
  # Homepage:: http://rubyeventmachine.com
@@ -105,5 +105,34 @@ class TestTimers < Test::Unit::TestCase
105
105
  assert( x == 4 )
106
106
  end
107
107
 
108
+
109
+ # This test is only applicable to compiled versions of the reactor.
110
+ # Pure ruby versions have no built-in limit on the number of outstanding timers.
111
+ #
112
+ def test_timer_change_max_outstanding
113
+ ten_thousand_timers = proc {
114
+ 10000.times {
115
+ EM.add_timer(5) {}
116
+ }
117
+ }
118
+ EM.run {
119
+ if EM.library_type == :pure_ruby
120
+ ten_thousand_timers.call
121
+ else
122
+ assert_raise( RuntimeError ) {
123
+ ten_thousand_timers.call
124
+ }
125
+ end
126
+ EM.stop
127
+ }
128
+
129
+ EM.set_max_timers( 10001 )
130
+
131
+ EM.run {
132
+ ten_thousand_timers.call
133
+ EM.stop
134
+ }
135
+ end
136
+
108
137
  end
109
138
 
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: eventmachine
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.9.0
7
- date: 2007-09-17 00:00:00 -04:00
6
+ version: 0.10.0
7
+ date: 2007-12-09 00:00:00 -05:00
8
8
  summary: Ruby/EventMachine library
9
9
  require_paths:
10
10
  - lib
@@ -30,48 +30,52 @@ authors:
30
30
  - Francis Cianfrocca
31
31
  files:
32
32
  - tests/test_httpclient.rb
33
+ - tests/test_exc.rb
34
+ - tests/test_running.rb
35
+ - tests/test_ltp2.rb
33
36
  - tests/test_basic.rb
34
- - tests/testem.rb
37
+ - tests/test_smtpclient.rb
38
+ - tests/test_send_file.rb
39
+ - tests/test_next_tick.rb
35
40
  - tests/test_eventables.rb
36
- - tests/test_ud.rb
37
- - tests/test_ltp.rb
41
+ - tests/test_spawn.rb
42
+ - tests/test_servers.rb
38
43
  - tests/test_hc.rb
44
+ - tests/test_kb.rb
39
45
  - tests/test_futures.rb
40
- - tests/test_exc.rb
46
+ - tests/test_ltp.rb
47
+ - tests/test_httpclient2.rb
48
+ - tests/testem.rb
41
49
  - tests/test_timers.rb
42
- - tests/test_epoll.rb
43
- - tests/test_next_tick.rb
44
- - tests/test_servers.rb
45
- - tests/test_send_file.rb
46
- - tests/test_kb.rb
47
- - tests/test_ltp2.rb
48
- - tests/test_running.rb
49
- - tests/test_spawn.rb
50
- - tests/test_smtpclient.rb
50
+ - tests/test_ud.rb
51
51
  - tests/test_smtpserver.rb
52
+ - tests/test_pure.rb
53
+ - tests/test_epoll.rb
54
+ - tests/test_errors.rb
52
55
  - lib/em
53
56
  - lib/protocols
54
57
  - lib/evma
58
+ - lib/jeventmachine.rb
55
59
  - lib/eventmachine.rb
56
60
  - lib/pr_eventmachine.rb
57
61
  - lib/evma.rb
58
62
  - lib/eventmachine_version.rb
59
- - lib/jeventmachine.rb
60
- - lib/svn-commit.tmp
63
+ - lib/em/streamer.rb
61
64
  - lib/em/eventable.rb
62
- - lib/em/deferrable.rb
65
+ - lib/em/messages.rb
63
66
  - lib/em/future.rb
67
+ - lib/em/deferrable.rb
64
68
  - lib/em/spawnable.rb
65
- - lib/em/messages.rb
66
- - lib/em/streamer.rb
67
- - lib/protocols/httpclient.rb
68
- - lib/protocols/tcptest.rb
69
69
  - lib/protocols/line_and_text.rb
70
- - lib/protocols/header_and_content.rb
71
- - lib/protocols/buftok.rb
72
- - lib/protocols/stomp.rb
70
+ - lib/protocols/httpclient.rb
73
71
  - lib/protocols/linetext2.rb
74
72
  - lib/protocols/smtpclient.rb
73
+ - lib/protocols/stomp.rb
74
+ - lib/protocols/header_and_content.rb
75
+ - lib/protocols/saslauth.rb
76
+ - lib/protocols/tcptest.rb
77
+ - lib/protocols/httpcli2.rb
78
+ - lib/protocols/buftok.rb
75
79
  - lib/protocols/smtpserver.rb
76
80
  - lib/evma/reactor.rb
77
81
  - lib/evma/protocol.rb
@@ -88,24 +92,23 @@ files:
88
92
  - ext/files.h
89
93
  - ext/binder.h
90
94
  - ext/sigs.h
91
- - ext/project.h
92
95
  - ext/eventmachine.h
96
+ - ext/epoll.cpp
97
+ - ext/project.h
93
98
  - ext/page.cpp
99
+ - ext/eventmachine_cpp.h
94
100
  - ext/emwin.cpp
101
+ - ext/epoll.h
95
102
  - ext/page.h
96
103
  - ext/emwin.h
97
104
  - ext/rubymain.cpp
98
105
  - ext/extconf.rb
99
106
  - ext/cmain.cpp
100
107
  - ext/ed.cpp
101
- - ext/ed.h
102
- - ext/eee
103
- - ext/pipe.cpp
104
- - ext/epoll.cpp
105
- - ext/epoll.h
106
108
  - ext/cplusplus.cpp
107
109
  - ext/kb.cpp
108
- - ext/eventmachine_cpp.h
110
+ - ext/ed.h
111
+ - ext/pipe.cpp
109
112
  - README
110
113
  - RELEASE_NOTES
111
114
  - COPYING
@@ -115,6 +118,7 @@ files:
115
118
  - TODO
116
119
  - KEYBOARD
117
120
  - LIGHTWEIGHT_CONCURRENCY
121
+ - PURE_RUBY
118
122
  - SMTP
119
123
  - SPAWNED_PROCESSES
120
124
  - DEFERRABLES
@@ -136,6 +140,7 @@ extra_rdoc_files:
136
140
  - TODO
137
141
  - KEYBOARD
138
142
  - LIGHTWEIGHT_CONCURRENCY
143
+ - PURE_RUBY
139
144
  - SMTP
140
145
  - SPAWNED_PROCESSES
141
146
  - DEFERRABLES
data/ext/eee DELETED
@@ -1,173 +0,0 @@
1
- # $Id: extconf.rb 501 2007-08-18 18:32:16Z blackhedd $
2
- #
3
- #----------------------------------------------------------------------------
4
- #
5
- # Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
6
- # Gmail: blackhedd
7
- #
8
- # This program is free software; you can redistribute it and/or modify
9
- # it under the terms of either: 1) the GNU General Public License
10
- # as published by the Free Software Foundation; either version 2 of the
11
- # License, or (at your option) any later version; or 2) Ruby's License.
12
- #
13
- # See the file COPYING for complete licensing information.
14
- #
15
- #---------------------------------------------------------------------------
16
- #
17
- # extconf.rb for Ruby/EventMachine
18
- # We have to munge LDSHARED because this code needs a C++ link.
19
- #
20
-
21
- require 'mkmf'
22
-
23
- flags = []
24
-
25
- case RUBY_PLATFORM.split('-',2)[1]
26
- when 'mswin32', 'mingw32', 'bccwin32'
27
- unless have_header('windows.h') and
28
- have_header('winsock.h') and
29
- have_library('kernel32') and
30
- have_library('rpcrt4') and
31
- have_library('gdi32')
32
- exit
33
- end
34
-
35
- flags << "-D OS_WIN32"
36
- flags << '-D BUILD_FOR_RUBY'
37
- flags << "-EHs"
38
- flags << "-GR"
39
-
40
- dir_config('ssl')
41
- if have_library('ssleay32') and
42
- have_library('libeay32') and
43
- have_header('openssl/ssl.h') and
44
- have_header('openssl/err.h')
45
- flags << '-D WITH_SSL'
46
- else
47
- flags << '-D WITHOUT_SSL'
48
- end
49
-
50
- when /solaris/
51
- unless have_library('pthread') and
52
- have_library('nsl') and
53
- have_library('socket')
54
- exit
55
- end
56
-
57
- flags << '-D OS_UNIX'
58
- flags << '-D OS_SOLARIS8'
59
- flags << '-D BUILD_FOR_RUBY'
60
-
61
- dir_config('ssl')
62
- if have_library('ssl') and
63
- have_library('crypto') and
64
- have_header('openssl/ssl.h') and
65
- have_header('openssl/err.h')
66
- flags << '-D WITH_SSL'
67
- else
68
- flags << '-D WITHOUT_SSL'
69
- end
70
-
71
- # on Unix we need a g++ link, not gcc.
72
- CONFIG['LDSHARED'] = "$(CXX) -shared"
73
-
74
- # Patch by Tim Pease, fixes SUNWspro compile problems.
75
- if CONFIG['CC'] == 'cc'
76
- $CFLAGS = CONFIG['CFLAGS'] = "-g -O2 -fPIC"
77
- CONFIG['CCDLFLAGS'] = "-fPIC"
78
- end
79
-
80
- when /darwin/
81
- flags << '-DOS_UNIX'
82
- flags << '-DBUILD_FOR_RUBY'
83
-
84
- dir_config('ssl')
85
- if have_library('ssl') and
86
- have_library('crypto') and
87
- have_library('C') and
88
- have_header('openssl/ssl.h') and
89
- have_header('openssl/err.h')
90
- flags << '-DWITH_SSL'
91
- else
92
- flags << '-DWITHOUT_SSL'
93
- end
94
- # on Unix we need a g++ link, not gcc.
95
- # Ff line contributed by Daniel Harple.
96
- CONFIG['LDSHARED'] = "$(CXX) " + CONFIG['LDSHARED'].split[1..-1].join(' ')
97
-
98
- when /linux/
99
- unless have_library('pthread')
100
- exit
101
- end
102
-
103
- flags << '-DOS_UNIX'
104
- flags << '-DBUILD_FOR_RUBY'
105
-
106
- # Original epoll test is inadequate because 2.4 kernels have the header
107
- # but not the code.
108
- #flags << '-DHAVE_EPOLL' if have_header('sys/epoll.h')
109
- if have_header('sys/epoll.h')
110
- File.open("hasEpollTest.c", "w") {|f|
111
- f.puts "#include <sys/epoll.h>"
112
- f.puts "int main() { epoll_create(1024); return 0;}"
113
- }
114
- (e = system( "gcc hasEpollTest.c -o hasEpollTest " )) and (e = $?.to_i)
115
- `rm -f hasEpollTest.c hasEpollTest`
116
- flags << '-DHAVE_EPOLL' if e == 0
117
- end
118
-
119
- dir_config('ssl', "#{ENV['OPENSSL']}/include", ENV['OPENSSL'])
120
- # Check for libcrypto twice, before and after ssl. That's because on some platforms
121
- # and openssl versions, libssl will emit unresolved externals from crypto. It
122
- # would be cleaner to simply check crypto first, but that doesn't always work in
123
- # Ruby. The order we check them doesn't seem to control the order in which they're
124
- # emitted into the link command. This is pretty weird, I have to admit.
125
- if have_library('crypto') and
126
- have_library('ssl') and
127
- have_library('crypto') and
128
- have_header('openssl/ssl.h') and
129
- have_header('openssl/err.h')
130
- flags << '-DWITH_SSL'
131
- else
132
- flags << '-DWITHOUT_SSL'
133
- end
134
- # on Unix we need a g++ link, not gcc.
135
- CONFIG['LDSHARED'] = "$(CXX) -shared"
136
-
137
- # Modify the mkmf constant LINK_SO so the generated shared object is stripped.
138
- # You might think modifying CONFIG['LINK_SO'] would be a better way to do this,
139
- # but it doesn't work because mkmf doesn't look at CONFIG['LINK_SO'] again after
140
- # it initializes.
141
- linkso = Object.send :remove_const, "LINK_SO"
142
- LINK_SO = linkso + "; strip $@"
143
-
144
- else
145
- unless have_library('pthread')
146
- exit
147
- end
148
-
149
- flags << '-DOS_UNIX'
150
- flags << '-DBUILD_FOR_RUBY'
151
-
152
- dir_config('ssl')
153
- if have_library('ssl') and
154
- have_library('crypto') and
155
- have_header('openssl/ssl.h') and
156
- have_header('openssl/err.h')
157
- flags << '-DWITH_SSL'
158
- else
159
- flags << '-DWITHOUT_SSL'
160
- end
161
- # on Unix we need a g++ link, not gcc.
162
- CONFIG['LDSHARED'] = "$(CXX) -shared"
163
-
164
- end
165
-
166
- if $CPPFLAGS
167
- $CPPFLAGS += ' ' + flags.join(' ')
168
- else
169
- $CFLAGS += ' ' + flags.join(' ')
170
- end
171
-
172
-
173
- create_makefile "rubyeventmachine"