eventmachine 0.12.10-x86-mswin32-60 → 1.0.0.beta.2-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.
Files changed (150) hide show
  1. data/.gitignore +2 -0
  2. data/Gemfile +1 -0
  3. data/README +80 -81
  4. data/Rakefile +7 -370
  5. data/docs/COPYING +60 -60
  6. data/docs/ChangeLog +211 -211
  7. data/docs/DEFERRABLES +246 -133
  8. data/docs/EPOLL +141 -141
  9. data/docs/GNU +281 -281
  10. data/docs/INSTALL +13 -13
  11. data/docs/KEYBOARD +42 -38
  12. data/docs/LEGAL +25 -25
  13. data/docs/LIGHTWEIGHT_CONCURRENCY +130 -70
  14. data/docs/PURE_RUBY +75 -75
  15. data/docs/RELEASE_NOTES +94 -94
  16. data/docs/SMTP +4 -2
  17. data/docs/SPAWNED_PROCESSES +148 -89
  18. data/docs/TODO +8 -8
  19. data/eventmachine.gemspec +19 -26
  20. data/examples/ex_channel.rb +42 -42
  21. data/examples/ex_queue.rb +2 -2
  22. data/examples/ex_tick_loop_array.rb +15 -0
  23. data/examples/ex_tick_loop_counter.rb +32 -0
  24. data/examples/helper.rb +1 -1
  25. data/ext/binder.cpp +0 -1
  26. data/ext/cmain.cpp +36 -25
  27. data/ext/ed.cpp +104 -113
  28. data/ext/ed.h +24 -30
  29. data/ext/em.cpp +349 -283
  30. data/ext/em.h +25 -29
  31. data/ext/eventmachine.h +5 -4
  32. data/ext/extconf.rb +58 -49
  33. data/ext/fastfilereader/extconf.rb +5 -3
  34. data/ext/fastfilereader/mapper.cpp +214 -214
  35. data/ext/fastfilereader/mapper.h +59 -59
  36. data/ext/fastfilereader/rubymain.cpp +127 -127
  37. data/ext/kb.cpp +1 -3
  38. data/ext/page.cpp +107 -107
  39. data/ext/page.h +51 -51
  40. data/ext/pipe.cpp +9 -11
  41. data/ext/project.h +12 -8
  42. data/ext/rubymain.cpp +138 -104
  43. data/java/.classpath +8 -8
  44. data/java/.project +17 -17
  45. data/java/src/com/rubyeventmachine/EmReactor.java +1 -0
  46. data/java/src/com/rubyeventmachine/EmReactorException.java +40 -40
  47. data/lib/em/buftok.rb +138 -138
  48. data/lib/em/callback.rb +25 -25
  49. data/lib/em/channel.rb +1 -1
  50. data/lib/em/connection.rb +6 -1
  51. data/lib/em/deferrable.rb +16 -2
  52. data/lib/em/file_watch.rb +53 -53
  53. data/lib/em/future.rb +61 -61
  54. data/lib/em/iterator.rb +270 -0
  55. data/lib/em/messages.rb +66 -66
  56. data/lib/em/process_watch.rb +43 -43
  57. data/lib/em/protocols.rb +1 -1
  58. data/lib/em/protocols/header_and_content.rb +138 -138
  59. data/lib/em/protocols/httpclient.rb +267 -262
  60. data/lib/em/protocols/line_protocol.rb +28 -0
  61. data/lib/em/protocols/memcache.rb +322 -322
  62. data/lib/em/protocols/postgres3.rb +247 -247
  63. data/lib/em/protocols/saslauth.rb +175 -175
  64. data/lib/em/protocols/smtpserver.rb +640 -547
  65. data/lib/em/protocols/stomp.rb +200 -200
  66. data/lib/em/protocols/tcptest.rb +52 -52
  67. data/lib/{pr_eventmachine.rb → em/pure_ruby.rb} +1013 -1022
  68. data/lib/em/queue.rb +1 -0
  69. data/lib/em/spawnable.rb +85 -85
  70. data/lib/em/streamer.rb +130 -130
  71. data/lib/em/tick_loop.rb +85 -0
  72. data/lib/em/timers.rb +2 -1
  73. data/lib/em/version.rb +1 -1
  74. data/lib/eventmachine.rb +40 -84
  75. data/lib/jeventmachine.rb +2 -1
  76. data/lib/rubyeventmachine.rb +2 -0
  77. data/setup.rb +1585 -1585
  78. data/tasks/doc.rake +30 -0
  79. data/tasks/package.rake +85 -0
  80. data/tasks/test.rake +6 -0
  81. data/tests/client.crt +31 -31
  82. data/tests/client.key +51 -51
  83. data/tests/test_attach.rb +13 -3
  84. data/tests/test_basic.rb +60 -95
  85. data/tests/test_channel.rb +3 -2
  86. data/tests/test_defer.rb +49 -47
  87. data/tests/test_deferrable.rb +35 -0
  88. data/tests/test_error_handler.rb +35 -35
  89. data/tests/test_errors.rb +82 -82
  90. data/tests/test_exc.rb +55 -55
  91. data/tests/test_file_watch.rb +49 -49
  92. data/tests/test_futures.rb +198 -198
  93. data/tests/test_handler_check.rb +36 -36
  94. data/tests/test_hc.rb +190 -218
  95. data/tests/test_httpclient.rb +227 -218
  96. data/tests/test_httpclient2.rb +3 -2
  97. data/tests/test_inactivity_timeout.rb +3 -3
  98. data/tests/test_kb.rb +60 -60
  99. data/tests/test_ltp.rb +13 -5
  100. data/tests/test_ltp2.rb +317 -317
  101. data/tests/test_next_tick.rb +1 -1
  102. data/tests/test_object_protocol.rb +36 -36
  103. data/tests/test_pending_connect_timeout.rb +2 -2
  104. data/tests/test_process_watch.rb +50 -48
  105. data/tests/test_proxy_connection.rb +52 -0
  106. data/tests/test_pure.rb +134 -125
  107. data/tests/test_queue.rb +44 -44
  108. data/tests/test_running.rb +42 -42
  109. data/tests/test_sasl.rb +72 -72
  110. data/tests/test_send_file.rb +251 -242
  111. data/tests/test_servers.rb +76 -76
  112. data/tests/test_smtpclient.rb +83 -83
  113. data/tests/test_smtpserver.rb +85 -85
  114. data/tests/test_spawn.rb +322 -322
  115. data/tests/test_ssl_methods.rb +49 -49
  116. data/tests/test_ssl_verify.rb +82 -82
  117. data/tests/test_tick_loop.rb +59 -0
  118. data/tests/test_timers.rb +13 -15
  119. data/tests/test_ud.rb +36 -36
  120. data/tests/testem.rb +31 -31
  121. metadata +66 -51
  122. data/ext/cplusplus.cpp +0 -202
  123. data/ext/emwin.cpp +0 -300
  124. data/ext/emwin.h +0 -94
  125. data/ext/epoll.cpp +0 -26
  126. data/ext/epoll.h +0 -25
  127. data/ext/eventmachine_cpp.h +0 -96
  128. data/ext/files.cpp +0 -94
  129. data/ext/files.h +0 -65
  130. data/ext/sigs.cpp +0 -89
  131. data/ext/sigs.h +0 -32
  132. data/java/src/com/rubyeventmachine/application/Application.java +0 -194
  133. data/java/src/com/rubyeventmachine/application/Connection.java +0 -74
  134. data/java/src/com/rubyeventmachine/application/ConnectionFactory.java +0 -37
  135. data/java/src/com/rubyeventmachine/application/DefaultConnectionFactory.java +0 -46
  136. data/java/src/com/rubyeventmachine/application/PeriodicTimer.java +0 -38
  137. data/java/src/com/rubyeventmachine/application/Timer.java +0 -54
  138. data/java/src/com/rubyeventmachine/tests/ApplicationTest.java +0 -109
  139. data/java/src/com/rubyeventmachine/tests/ConnectTest.java +0 -148
  140. data/java/src/com/rubyeventmachine/tests/EMTest.java +0 -80
  141. data/java/src/com/rubyeventmachine/tests/TestDatagrams.java +0 -53
  142. data/java/src/com/rubyeventmachine/tests/TestServers.java +0 -75
  143. data/java/src/com/rubyeventmachine/tests/TestTimers.java +0 -90
  144. data/lib/evma.rb +0 -32
  145. data/lib/evma/callback.rb +0 -32
  146. data/lib/evma/container.rb +0 -75
  147. data/lib/evma/factory.rb +0 -77
  148. data/lib/evma/protocol.rb +0 -87
  149. data/lib/evma/reactor.rb +0 -48
  150. data/web/whatis +0 -7
@@ -1,37 +1,37 @@
1
- $:.unshift "../lib"
2
- require 'eventmachine'
3
- require 'test/unit'
4
-
5
- class TestHandlerCheck < Test::Unit::TestCase
6
-
7
- class Foo < EM::Connection; end;
8
- module TestModule; end;
9
-
10
- def test_with_correct_class
11
- assert_nothing_raised do
12
- EM.run {
13
- EM.connect("127.0.0.1", 80, Foo)
14
- EM.stop_event_loop
15
- }
16
- end
17
- end
18
-
19
- def test_with_incorrect_class
20
- assert_raise(ArgumentError) do
21
- EM.run {
22
- EM.connect("127.0.0.1", 80, String)
23
- EM.stop_event_loop
24
- }
25
- end
26
- end
27
-
28
- def test_with_module
29
- assert_nothing_raised do
30
- EM.run {
31
- EM.connect("127.0.0.1", 80, TestModule)
32
- EM.stop_event_loop
33
- }
34
- end
35
- end
36
-
1
+ $:.unshift "../lib"
2
+ require 'eventmachine'
3
+ require 'test/unit'
4
+
5
+ class TestHandlerCheck < Test::Unit::TestCase
6
+
7
+ class Foo < EM::Connection; end;
8
+ module TestModule; end;
9
+
10
+ def test_with_correct_class
11
+ assert_nothing_raised do
12
+ EM.run {
13
+ EM.connect("127.0.0.1", 80, Foo)
14
+ EM.stop_event_loop
15
+ }
16
+ end
17
+ end
18
+
19
+ def test_with_incorrect_class
20
+ assert_raise(ArgumentError) do
21
+ EM.run {
22
+ EM.connect("127.0.0.1", 80, String)
23
+ EM.stop_event_loop
24
+ }
25
+ end
26
+ end
27
+
28
+ def test_with_module
29
+ assert_nothing_raised do
30
+ EM.run {
31
+ EM.connect("127.0.0.1", 80, TestModule)
32
+ EM.stop_event_loop
33
+ }
34
+ end
35
+ end
36
+
37
37
  end
@@ -1,218 +1,190 @@
1
- # $Id$
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
- require 'test/unit'
30
-
31
- class TestHeaderAndContentProtocol < Test::Unit::TestCase
32
-
33
- TestHost = "127.0.0.1"
34
- TestPort = 8905
35
-
36
- class SimpleTest < EventMachine::Protocols::HeaderAndContentProtocol
37
- attr_reader :first_header, :my_headers, :request
38
-
39
- def receive_first_header_line hdr
40
- @first_header ||= []
41
- @first_header << hdr
42
- end
43
- def receive_headers hdrs
44
- @my_headers ||= []
45
- @my_headers << hdrs
46
- end
47
- def receive_request hdrs, content
48
- @request ||= []
49
- @request << [hdrs, content]
50
- end
51
- end
52
-
53
- def test_no_content
54
- the_connection = nil
55
- EventMachine.run {
56
- EventMachine.start_server( TestHost, TestPort, SimpleTest ) do |conn|
57
- the_connection = conn
58
- end
59
- EventMachine.add_timer(4) {raise "test timed out"}
60
-
61
- client = Module.new do
62
- def unbind
63
- EM.add_timer(0.1) { EM.stop }
64
- end
65
-
66
- def post_init
67
- send_data [ "aaa\n", "bbb\r\n", "ccc\n", "\n" ].join
68
- close_connection_after_writing
69
- end
70
- end
71
-
72
- EventMachine.connect( TestHost, TestPort, client )
73
- }
74
- assert_equal( ["aaa"], the_connection.first_header )
75
- assert_equal( [%w(aaa bbb ccc)], the_connection.my_headers )
76
- assert_equal( [[%w(aaa bbb ccc), ""]], the_connection.request )
77
- end
78
-
79
- def test_content
80
- the_connection = nil
81
- content = "A" * 50
82
- headers = ["aaa", "bbb", "Content-length: #{content.length}", "ccc"]
83
- EventMachine.run {
84
- EventMachine.start_server( TestHost, TestPort, SimpleTest ) do |conn|
85
- the_connection = conn
86
- end
87
- EventMachine.add_timer(4) { assert(false, 'test timeout'); EM.stop }
88
-
89
- client = Module.new do
90
- define_method(:headers) { headers }
91
- define_method(:content) { content }
92
-
93
- def unbind
94
- EM.add_timer(0.1) { EM.stop }
95
- end
96
-
97
- def post_init
98
- headers.each { |h| send_data "#{h}\r\n" }
99
- send_data "\n"
100
- send_data content
101
- close_connection_after_writing
102
- end
103
- end
104
-
105
- EventMachine.connect( TestHost, TestPort, client )
106
-
107
- }
108
- assert_equal( ["aaa"], the_connection.first_header )
109
- assert_equal( [headers], the_connection.my_headers )
110
- assert_equal( [[headers, content]], the_connection.request )
111
- end
112
-
113
- def test_several_requests
114
- the_connection = nil
115
- content = "A" * 50
116
- headers = ["aaa", "bbb", "Content-length: #{content.length}", "ccc"]
117
- EventMachine.run {
118
- EventMachine.start_server( TestHost, TestPort, SimpleTest ) do |conn|
119
- the_connection = conn
120
- end
121
- EventMachine.add_timer(4) { assert(false, 'test timeout'); EM.stop }
122
-
123
- client = Module.new do
124
- define_method(:headers) { headers }
125
- define_method(:content) { content }
126
-
127
- def unbind
128
- EM.add_timer(0.1) { EM.stop }
129
- end
130
-
131
- def post_init
132
- 5.times do
133
- headers.each { |h| send_data "#{h}\r\n" }
134
- send_data "\n"
135
- send_data content
136
- end
137
- close_connection_after_writing
138
- end
139
- end
140
-
141
- EventMachine.connect( TestHost, TestPort, client )
142
- }
143
- assert_equal( ["aaa"] * 5, the_connection.first_header )
144
- assert_equal( [headers] * 5, the_connection.my_headers )
145
- assert_equal( [[headers, content]] * 5, the_connection.request )
146
- end
147
-
148
-
149
- # def x_test_multiple_content_length_headers
150
- # # This is supposed to throw a RuntimeError but it throws a C++ exception instead.
151
- # the_connection = nil
152
- # content = "A" * 50
153
- # headers = ["aaa", "bbb", ["Content-length: #{content.length}"]*2, "ccc"].flatten
154
- # EventMachine.run {
155
- # EventMachine.start_server( TestHost, TestPort, SimpleTest ) do |conn|
156
- # the_connection = conn
157
- # end
158
- # EventMachine.add_timer(4) {raise "test timed out"}
159
- # test_proc = proc {
160
- # t = TCPSocket.new TestHost, TestPort
161
- # headers.each {|h| t.write "#{h}\r\n" }
162
- # t.write "\n"
163
- # t.write content
164
- # t.close
165
- # }
166
- # EventMachine.defer test_proc, proc {
167
- # EventMachine.stop
168
- # }
169
- # }
170
- # end
171
-
172
- def test_interpret_headers
173
- the_connection = nil
174
- content = "A" * 50
175
- headers = [
176
- "GET / HTTP/1.0",
177
- "Accept: aaa",
178
- "User-Agent: bbb",
179
- "Host: ccc",
180
- "x-tempest-header:ddd"
181
- ]
182
-
183
- EventMachine.run {
184
- EventMachine.start_server( TestHost, TestPort, SimpleTest ) do |conn|
185
- the_connection = conn
186
- end
187
- EventMachine.add_timer(4) {raise "test timed out"}
188
-
189
- client = Module.new do
190
- define_method(:headers) { headers }
191
- define_method(:content) { content }
192
-
193
- def unbind
194
- EM.add_timer(0.1) { EM.stop }
195
- end
196
-
197
- def post_init
198
- headers.each { |h| send_data "#{h}\r\n" }
199
- send_data "\n"
200
- send_data content
201
- close_connection_after_writing
202
- end
203
- end
204
-
205
- EventMachine.connect( TestHost, TestPort, client )
206
- }
207
-
208
- hsh = the_connection.headers_2_hash( the_connection.my_headers.shift )
209
- expect = {
210
- :accept => "aaa",
211
- :user_agent => "bbb",
212
- :host => "ccc",
213
- :x_tempest_header => "ddd"
214
- }
215
- assert_equal(expect, hsh)
216
- end
217
-
218
- end
1
+ # $Id$
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
+ require 'eventmachine'
28
+ require 'test/unit'
29
+
30
+ class TestHeaderAndContentProtocol < Test::Unit::TestCase
31
+
32
+ TestHost = "127.0.0.1"
33
+ TestPort = 8905
34
+
35
+ class SimpleTest < EventMachine::Protocols::HeaderAndContentProtocol
36
+ attr_reader :first_header, :my_headers, :request
37
+
38
+ def receive_first_header_line hdr
39
+ @first_header ||= []
40
+ @first_header << hdr
41
+ end
42
+ def receive_headers hdrs
43
+ @my_headers ||= []
44
+ @my_headers << hdrs
45
+ end
46
+ def receive_request hdrs, content
47
+ @request ||= []
48
+ @request << [hdrs, content]
49
+ end
50
+ end
51
+
52
+ class StopOnUnbind < EM::Connection
53
+ def unbind
54
+ EM.add_timer(0.1) { EM.stop }
55
+ end
56
+ end
57
+
58
+ def test_no_content
59
+ the_connection = nil
60
+ EM.run {
61
+ EM.start_server( TestHost, TestPort, SimpleTest ) do |conn|
62
+ the_connection = conn
63
+ end
64
+ setup_timeout
65
+
66
+ EM.connect TestHost, TestPort, StopOnUnbind do |c|
67
+ c.send_data [ "aaa\n", "bbb\r\n", "ccc\n", "\n" ].join
68
+ c.close_connection_after_writing
69
+ end
70
+ }
71
+ assert_equal( ["aaa"], the_connection.first_header )
72
+ assert_equal( [%w(aaa bbb ccc)], the_connection.my_headers )
73
+ assert_equal( [[%w(aaa bbb ccc), ""]], the_connection.request )
74
+ end
75
+
76
+ def test_content
77
+ the_connection = nil
78
+ content = "A" * 50
79
+ headers = ["aaa", "bbb", "Content-length: #{content.length}", "ccc"]
80
+ EventMachine.run {
81
+ EventMachine.start_server( TestHost, TestPort, SimpleTest ) do |conn|
82
+ the_connection = conn
83
+ end
84
+ setup_timeout
85
+
86
+ EM.connect TestHost, TestPort, StopOnUnbind do |c|
87
+ headers.each { |h| c.send_data "#{h}\r\n" }
88
+ c.send_data "\n"
89
+ c.send_data content
90
+ c.close_connection_after_writing
91
+ end
92
+ }
93
+ assert_equal( ["aaa"], the_connection.first_header )
94
+ assert_equal( [headers], the_connection.my_headers )
95
+ assert_equal( [[headers, content]], the_connection.request )
96
+ end
97
+
98
+ def test_several_requests
99
+ the_connection = nil
100
+ content = "A" * 50
101
+ headers = ["aaa", "bbb", "Content-length: #{content.length}", "ccc"]
102
+ EventMachine.run {
103
+ EventMachine.start_server( TestHost, TestPort, SimpleTest ) do |conn|
104
+ the_connection = conn
105
+ end
106
+ setup_timeout
107
+
108
+ EventMachine.connect( TestHost, TestPort, StopOnUnbind ) do |c|
109
+ 5.times do
110
+ headers.each { |h| c.send_data "#{h}\r\n" }
111
+ c.send_data "\n"
112
+ c.send_data content
113
+ end
114
+ c.close_connection_after_writing
115
+ end
116
+ }
117
+ assert_equal( ["aaa"] * 5, the_connection.first_header )
118
+ assert_equal( [headers] * 5, the_connection.my_headers )
119
+ assert_equal( [[headers, content]] * 5, the_connection.request )
120
+ end
121
+
122
+
123
+ # def x_test_multiple_content_length_headers
124
+ # # This is supposed to throw a RuntimeError but it throws a C++ exception instead.
125
+ # the_connection = nil
126
+ # content = "A" * 50
127
+ # headers = ["aaa", "bbb", ["Content-length: #{content.length}"]*2, "ccc"].flatten
128
+ # EventMachine.run {
129
+ # EventMachine.start_server( TestHost, TestPort, SimpleTest ) do |conn|
130
+ # the_connection = conn
131
+ # end
132
+ # EventMachine.add_timer(4) {raise "test timed out"}
133
+ # test_proc = proc {
134
+ # t = TCPSocket.new TestHost, TestPort
135
+ # headers.each {|h| t.write "#{h}\r\n" }
136
+ # t.write "\n"
137
+ # t.write content
138
+ # t.close
139
+ # }
140
+ # EventMachine.defer test_proc, proc {
141
+ # EventMachine.stop
142
+ # }
143
+ # }
144
+ # end
145
+
146
+ def test_interpret_headers
147
+ the_connection = nil
148
+ content = "A" * 50
149
+ headers = [
150
+ "GET / HTTP/1.0",
151
+ "Accept: aaa",
152
+ "User-Agent: bbb",
153
+ "Host: ccc",
154
+ "x-tempest-header:ddd"
155
+ ]
156
+
157
+ EventMachine.run {
158
+ EventMachine.start_server( TestHost, TestPort, SimpleTest ) do |conn|
159
+ the_connection = conn
160
+ end
161
+ setup_timeout
162
+
163
+ EventMachine.connect( TestHost, TestPort, StopOnUnbind ) do |c|
164
+ headers.each { |h| c.send_data "#{h}\r\n" }
165
+ c.send_data "\n"
166
+ c.send_data content
167
+ c.close_connection_after_writing
168
+ end
169
+ }
170
+
171
+ hsh = the_connection.headers_2_hash( the_connection.my_headers.shift )
172
+ expect = {
173
+ :accept => "aaa",
174
+ :user_agent => "bbb",
175
+ :host => "ccc",
176
+ :x_tempest_header => "ddd"
177
+ }
178
+ assert_equal(expect, hsh)
179
+ end
180
+
181
+ def setup_timeout(timeout = 4)
182
+ EM.schedule {
183
+ start_time = EM.current_time
184
+ EM.add_periodic_timer(0.01) {
185
+ raise "timeout" if EM.current_time - start_time >= timeout
186
+ }
187
+ }
188
+ end
189
+
190
+ end