wj_eventmachine 1.3.0.dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +179 -0
  3. data/GNU +281 -0
  4. data/LICENSE +60 -0
  5. data/README.md +110 -0
  6. data/docs/DocumentationGuidesIndex.md +27 -0
  7. data/docs/GettingStarted.md +520 -0
  8. data/docs/old/ChangeLog +211 -0
  9. data/docs/old/DEFERRABLES +246 -0
  10. data/docs/old/EPOLL +141 -0
  11. data/docs/old/INSTALL +13 -0
  12. data/docs/old/KEYBOARD +42 -0
  13. data/docs/old/LEGAL +25 -0
  14. data/docs/old/LIGHTWEIGHT_CONCURRENCY +130 -0
  15. data/docs/old/PURE_RUBY +75 -0
  16. data/docs/old/RELEASE_NOTES +94 -0
  17. data/docs/old/SMTP +4 -0
  18. data/docs/old/SPAWNED_PROCESSES +148 -0
  19. data/docs/old/TODO +8 -0
  20. data/examples/guides/getting_started/01_eventmachine_echo_server.rb +18 -0
  21. data/examples/guides/getting_started/02_eventmachine_echo_server_that_recognizes_exit_command.rb +22 -0
  22. data/examples/guides/getting_started/03_simple_chat_server.rb +149 -0
  23. data/examples/guides/getting_started/04_simple_chat_server_step_one.rb +27 -0
  24. data/examples/guides/getting_started/05_simple_chat_server_step_two.rb +43 -0
  25. data/examples/guides/getting_started/06_simple_chat_server_step_three.rb +98 -0
  26. data/examples/guides/getting_started/07_simple_chat_server_step_four.rb +121 -0
  27. data/examples/guides/getting_started/08_simple_chat_server_step_five.rb +141 -0
  28. data/examples/old/ex_channel.rb +43 -0
  29. data/examples/old/ex_queue.rb +2 -0
  30. data/examples/old/ex_tick_loop_array.rb +15 -0
  31. data/examples/old/ex_tick_loop_counter.rb +32 -0
  32. data/examples/old/helper.rb +2 -0
  33. data/ext/binder.cpp +124 -0
  34. data/ext/binder.h +52 -0
  35. data/ext/cmain.cpp +1046 -0
  36. data/ext/ed.cpp +2238 -0
  37. data/ext/ed.h +460 -0
  38. data/ext/em.cpp +2378 -0
  39. data/ext/em.h +266 -0
  40. data/ext/eventmachine.h +152 -0
  41. data/ext/extconf.rb +285 -0
  42. data/ext/fastfilereader/extconf.rb +120 -0
  43. data/ext/fastfilereader/mapper.cpp +214 -0
  44. data/ext/fastfilereader/mapper.h +59 -0
  45. data/ext/fastfilereader/rubymain.cpp +126 -0
  46. data/ext/kb.cpp +79 -0
  47. data/ext/page.cpp +107 -0
  48. data/ext/page.h +51 -0
  49. data/ext/pipe.cpp +354 -0
  50. data/ext/project.h +174 -0
  51. data/ext/rubymain.cpp +1610 -0
  52. data/ext/ssl.cpp +627 -0
  53. data/ext/ssl.h +103 -0
  54. data/ext/wait_for_single_fd.h +36 -0
  55. data/java/.classpath +8 -0
  56. data/java/.project +17 -0
  57. data/java/src/com/rubyeventmachine/EmReactor.java +625 -0
  58. data/java/src/com/rubyeventmachine/EmReactorException.java +40 -0
  59. data/java/src/com/rubyeventmachine/EmReactorInterface.java +70 -0
  60. data/java/src/com/rubyeventmachine/EventableChannel.java +72 -0
  61. data/java/src/com/rubyeventmachine/EventableDatagramChannel.java +201 -0
  62. data/java/src/com/rubyeventmachine/EventableSocketChannel.java +415 -0
  63. data/java/src/com/rubyeventmachine/NullEmReactor.java +157 -0
  64. data/java/src/com/rubyeventmachine/NullEventableChannel.java +81 -0
  65. data/lib/em/buftok.rb +59 -0
  66. data/lib/em/callback.rb +58 -0
  67. data/lib/em/channel.rb +69 -0
  68. data/lib/em/completion.rb +307 -0
  69. data/lib/em/connection.rb +776 -0
  70. data/lib/em/deferrable.rb +210 -0
  71. data/lib/em/deferrable/pool.rb +2 -0
  72. data/lib/em/file_watch.rb +73 -0
  73. data/lib/em/future.rb +61 -0
  74. data/lib/em/io_streamer.rb +68 -0
  75. data/lib/em/iterator.rb +252 -0
  76. data/lib/em/messages.rb +66 -0
  77. data/lib/em/pool.rb +151 -0
  78. data/lib/em/process_watch.rb +45 -0
  79. data/lib/em/processes.rb +123 -0
  80. data/lib/em/protocols.rb +37 -0
  81. data/lib/em/protocols/header_and_content.rb +138 -0
  82. data/lib/em/protocols/httpclient.rb +303 -0
  83. data/lib/em/protocols/httpclient2.rb +602 -0
  84. data/lib/em/protocols/line_and_text.rb +125 -0
  85. data/lib/em/protocols/line_protocol.rb +33 -0
  86. data/lib/em/protocols/linetext2.rb +179 -0
  87. data/lib/em/protocols/memcache.rb +331 -0
  88. data/lib/em/protocols/object_protocol.rb +46 -0
  89. data/lib/em/protocols/postgres3.rb +246 -0
  90. data/lib/em/protocols/saslauth.rb +175 -0
  91. data/lib/em/protocols/smtpclient.rb +394 -0
  92. data/lib/em/protocols/smtpserver.rb +666 -0
  93. data/lib/em/protocols/socks4.rb +66 -0
  94. data/lib/em/protocols/stomp.rb +205 -0
  95. data/lib/em/protocols/tcptest.rb +54 -0
  96. data/lib/em/pure_ruby.rb +1299 -0
  97. data/lib/em/queue.rb +80 -0
  98. data/lib/em/resolver.rb +232 -0
  99. data/lib/em/spawnable.rb +84 -0
  100. data/lib/em/streamer.rb +118 -0
  101. data/lib/em/threaded_resource.rb +90 -0
  102. data/lib/em/tick_loop.rb +85 -0
  103. data/lib/em/timers.rb +61 -0
  104. data/lib/em/version.rb +3 -0
  105. data/lib/eventmachine.rb +1602 -0
  106. data/lib/jeventmachine.rb +318 -0
  107. data/rakelib/package.rake +120 -0
  108. data/rakelib/test.rake +6 -0
  109. data/rakelib/test_pure.rake +11 -0
  110. data/tests/client.crt +31 -0
  111. data/tests/client.key +51 -0
  112. data/tests/dhparam.pem +13 -0
  113. data/tests/em_ssl_handlers.rb +153 -0
  114. data/tests/em_test_helper.rb +198 -0
  115. data/tests/jruby/test_jeventmachine.rb +38 -0
  116. data/tests/test_attach.rb +199 -0
  117. data/tests/test_basic.rb +321 -0
  118. data/tests/test_channel.rb +75 -0
  119. data/tests/test_completion.rb +178 -0
  120. data/tests/test_connection_count.rb +83 -0
  121. data/tests/test_connection_write.rb +35 -0
  122. data/tests/test_defer.rb +35 -0
  123. data/tests/test_deferrable.rb +35 -0
  124. data/tests/test_epoll.rb +141 -0
  125. data/tests/test_error_handler.rb +38 -0
  126. data/tests/test_exc.rb +37 -0
  127. data/tests/test_file_watch.rb +86 -0
  128. data/tests/test_fork.rb +75 -0
  129. data/tests/test_futures.rb +170 -0
  130. data/tests/test_handler_check.rb +35 -0
  131. data/tests/test_hc.rb +155 -0
  132. data/tests/test_httpclient.rb +238 -0
  133. data/tests/test_httpclient2.rb +132 -0
  134. data/tests/test_idle_connection.rb +31 -0
  135. data/tests/test_inactivity_timeout.rb +102 -0
  136. data/tests/test_io_streamer.rb +47 -0
  137. data/tests/test_ipv4.rb +96 -0
  138. data/tests/test_ipv6.rb +107 -0
  139. data/tests/test_iterator.rb +122 -0
  140. data/tests/test_kb.rb +28 -0
  141. data/tests/test_keepalive.rb +113 -0
  142. data/tests/test_line_protocol.rb +33 -0
  143. data/tests/test_ltp.rb +155 -0
  144. data/tests/test_ltp2.rb +332 -0
  145. data/tests/test_many_fds.rb +21 -0
  146. data/tests/test_next_tick.rb +104 -0
  147. data/tests/test_object_protocol.rb +36 -0
  148. data/tests/test_pause.rb +109 -0
  149. data/tests/test_pending_connect_timeout.rb +52 -0
  150. data/tests/test_pool.rb +196 -0
  151. data/tests/test_process_watch.rb +50 -0
  152. data/tests/test_processes.rb +128 -0
  153. data/tests/test_proxy_connection.rb +180 -0
  154. data/tests/test_pure.rb +156 -0
  155. data/tests/test_queue.rb +64 -0
  156. data/tests/test_resolver.rb +129 -0
  157. data/tests/test_running.rb +14 -0
  158. data/tests/test_sasl.rb +46 -0
  159. data/tests/test_send_file.rb +217 -0
  160. data/tests/test_servers.rb +32 -0
  161. data/tests/test_shutdown_hooks.rb +23 -0
  162. data/tests/test_smtpclient.rb +75 -0
  163. data/tests/test_smtpserver.rb +90 -0
  164. data/tests/test_sock_opt.rb +53 -0
  165. data/tests/test_spawn.rb +290 -0
  166. data/tests/test_ssl_args.rb +41 -0
  167. data/tests/test_ssl_dhparam.rb +57 -0
  168. data/tests/test_ssl_ecdh_curve.rb +57 -0
  169. data/tests/test_ssl_extensions.rb +24 -0
  170. data/tests/test_ssl_methods.rb +31 -0
  171. data/tests/test_ssl_protocols.rb +190 -0
  172. data/tests/test_ssl_verify.rb +52 -0
  173. data/tests/test_stomp.rb +38 -0
  174. data/tests/test_system.rb +46 -0
  175. data/tests/test_threaded_resource.rb +68 -0
  176. data/tests/test_tick_loop.rb +58 -0
  177. data/tests/test_timers.rb +150 -0
  178. data/tests/test_ud.rb +8 -0
  179. data/tests/test_unbind_reason.rb +40 -0
  180. metadata +384 -0
@@ -0,0 +1,31 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFRDCCAywCAQEwDQYJKoZIhvcNAQEFBQAwaDELMAkGA1UEBhMCRU0xFTATBgNV
3
+ BAgTDEV2ZW50TWFjaGluZTEVMBMGA1UEChMMRXZlbnRNYWNoaW5lMRQwEgYDVQQL
4
+ EwtEZXZlbG9wbWVudDEVMBMGA1UEAxMMRXZlbnRNYWNoaW5lMB4XDTA5MDMyOTAy
5
+ MzE0NloXDTEwMDMyOTAyMzE0NlowaDELMAkGA1UEBhMCRU0xFTATBgNVBAgTDEV2
6
+ ZW50TWFjaGluZTEVMBMGA1UEChMMRXZlbnRNYWNoaW5lMRQwEgYDVQQLEwtEZXZl
7
+ bG9wbWVudDEVMBMGA1UEAxMMRXZlbnRNYWNoaW5lMIICIjANBgkqhkiG9w0BAQEF
8
+ AAOCAg8AMIICCgKCAgEAv1FSOIX1z7CQtVBFlrB0A3/V29T+22STKKmiRWYkKL5b
9
+ +hkrp9IZ5J4phZHgUVM2VDPOO2Oc2PU6dlGGZISg+UPERunTogxQKezCV0vcE9cK
10
+ OwzxCFDRvv5rK8aKMscfBLbNKocAXywuRRQmdxPiVRzbyPrl+qCr/EDLXAX3D77l
11
+ S8n2AwDg19VyI+IgFUE+Dy5e1eLoY6nV+Mq+vNXdn3ttF3t+ngac5pj5Q9h+pD5p
12
+ 67baDHSnf/7cy2fa/LKrLolVHQR9G2K6cEfeM99NtcsMbkoPs4iI3FA05OVTQHXg
13
+ C8C8cRxrb9APl95I/ep65OIaCJgcdYxJ3QD3qOtQo6/NQsGnjbyiUxaEpjfqyT1N
14
+ uzWD81Q8uXGNS8yD6dDynt/lseBjyp2nfC3uQ5fY18VdIcu0MJ9pezBUKrNuhlsy
15
+ XXEZ2DXj4sY8QOvIcBqSB/zmS1nGEK55xrtkaiaNrY8fe8wRVpcPLxy+P225NFw+
16
+ B69FJRA0Lj6Jt9BM4hV/3MSIEWwTVhuw4E02ywDYTzz1wq3ITf0tsbIPn0hXQMxD
17
+ ohhAoKioM6u+yHtqsxD0eYaAWmHTVn5oDvOSGpvCpBfWHyA7FP5UQak0fKABEAgK
18
+ iQYEnb294AXwXymJttfGTIV/Ne4tLN5dIpNma8UO8rlThlcr6xnTQDbR3gkTDRsC
19
+ AwEAATANBgkqhkiG9w0BAQUFAAOCAgEAj7J8fy1LUWoVWnrXDAC9jwJ1nI/YjoSU
20
+ 6ywke3o04+nZC5S+dPnuVy+HAwsU940CoNvP6RStI/bH6JL+NIqEFmwM3M8xIEWV
21
+ MYVPkfvQUxxGvDnaY7vv93u+6Q77HV3qlhAQBHChyuXyO7TG3+WzsiT9AnBNtAP0
22
+ 4jClt5kCAQXLO/p0SFEZQ8Ru9SM8d1i73Z0VDVzs8jYWlBhiherSgbw1xK4wBOpJ
23
+ 43XmjZsBSrDpiAXd07Ak3UL2GjfT7eStgebL3UIe39ThE/s/+l43bh0M6WbOBvyQ
24
+ i/rZ50kd1GvN0xnZhtv07hIJWO85FGWi7Oet8AzdUZJ17v1Md/f2vdhPVTFN9q+w
25
+ mQ6LxjackqCvaJaQfBEbqsn2Tklxk4tZuDioiQbOElT2e6vljQVJWIfNx38Ny2LM
26
+ aiXQPQu+4CI7meAh5gXM5nyJGbZvRPsxj89CqYzyHCYs5HBP3AsviBvn26ziOF+c
27
+ 544VmHd9HkIv8UTC29hh+R64RlgMQQQdaXFaUrFPTs/do0k8n/c2bPc0iTdfi5Q2
28
+ gq6Vi8q6Ay5wGgTtRRbn/mWKuCFjEh94z6pF9Xr06NX0PuEOdf+Ls9vI5vz6G0w6
29
+ 0Li7devEN7EKBY+7Mcjg918yq9i5tEiMkUgT68788t3fTC+4iUQ5fDtdrHsaOlIR
30
+ 8bs/XQVNE/s=
31
+ -----END CERTIFICATE-----
@@ -0,0 +1,51 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ 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
51
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,13 @@
1
+ -----BEGIN DH PARAMETERS-----
2
+ MIICCAKCAgEAikiatXa5aAteOtd6hOO33npjCvJByD3dwuM8rWzz0DFZdUH9nFJi
3
+ b0VvTVweVECb6XZBsrDNLqGQykCrm43swSk5D9XQCGJLxFERD6yk3b90xaeCm3/a
4
+ b0Ek5ZVvV73Cc/YbVmpBiOHoTFpUFJLZ7pLMQUSn8y3qUlNcY9/88HuwFi1s1lRM
5
+ ovihSRyZMYAuYWOD4yuOuIcroKVjD6gWFrsW9XrALWny6vUXQrhk8Q3rj+wM6ZtE
6
+ 5afcB0b6ZJtphrDfk3dFjOVG/zVT37VWgrY8GABrpo2ey0W0WIQJ7rDKLaPaI4kc
7
+ voOgC2K8Z3kSARZK+jULnwmBeYECz4EH/FF6FEp3GOKtkL4mqEkvh1n5EAesDOGl
8
+ iiX+RZXcUrZliSeifSXBTMJWWFVC0fkGIMb9PTZfZHyAC54lpuxzVki0HIyQG9Fs
9
+ 41zBJ5e8eEoXXlfUYtduUC35YGy2IxSzYLAJE76rctAZSWghha9xLOCDFoLjMr8h
10
+ FosKeHKJcBQ0bc8ymOpRIfrYLWhc0Pz2zkpJ/4eYw9t7NYg7S+jP19IE0gUnuM9v
11
+ SpoYMtS28tP9nEdokdwuBKD0D3bJEBBefDlHgfXoMgvy9Hivc9PBGGNTNpyFPpwF
12
+ sWVAkfhoNMJMC5V7LZsze+lftiDtzVoLSPDa9bO4BK7b/MgwCxfOhGsCAQI=
13
+ -----END DH PARAMETERS-----
@@ -0,0 +1,153 @@
1
+ # frozen_string_literal: true
2
+
3
+ ##
4
+ # EMSSLHandlers has two classes, `Client` and `Server`, and one method,
5
+ # `client_server`, which is a wrapper around
6
+ #
7
+ # EM.run do
8
+ # EM.start_server IP, PORT, s_hndlr, server
9
+ # EM.connect IP, PORT, c_hndlr, client
10
+ # end
11
+ #
12
+ # It also passes parameters to the `start_tls` call within the `post_init`
13
+ # callbacks of Client and Server.
14
+ #
15
+ # Client and Server have most standard callbacks and many 'get_*' function values
16
+ # as attributes.
17
+ #
18
+ # `Client` has a `:client_unbind` parameter, which when set to true, calls
19
+ # `EM.stop_event_loop` in the `unbind` callback.
20
+ #
21
+ # `Server` has two additional parameters.
22
+ #
23
+ # `:ssl_verify_result`, which is normally set to true/false for the
24
+ # `ssl_verify_peer` return value. If it is set to a String starting with "|RAISE|",
25
+ # the remaing string will be raised.
26
+ #
27
+ # `:stop_after_handshake`, when set to true, will close the connection and then
28
+ # call `EM.stop_event_loop`.
29
+ #
30
+ module EMSSLHandlers
31
+
32
+ IP, PORT = "127.0.0.1", 16784
33
+
34
+ # is OpenSSL version >= 1.1.0
35
+ IS_SSL_GE_1_1 = (EM::OPENSSL_LIBRARY_VERSION[/OpenSSL (\d+\.\d+\.\d+)/, 1]
36
+ .split('.').map(&:to_i) <=> [1,1]) == 1
37
+
38
+ # common start_tls parameters
39
+ SSL_3 = { ssl_version: %w(SSLv3) }
40
+ TLS_1_2 = { ssl_version: %w(TLSv1_2) }
41
+ TLS_1_3 = { ssl_version: %w(TLSv1_3) }
42
+ TLS_ALL = { ssl_version: Test::Unit::TestCase::SSL_AVAIL }
43
+
44
+ module Client
45
+ def initialize(tls = nil)
46
+ @@tls = tls ? tls.dup : tls
47
+ @@handshake_completed = false
48
+ @@cert_value = nil
49
+ @@cipher_bits = nil
50
+ @@cipher_name = nil
51
+ @@cipher_protocol = nil
52
+ @@client_unbind = @@tls ? @@tls.delete(:client_unbind) : nil
53
+ end
54
+
55
+ def self.cert_value ; @@cert_value end
56
+ def self.cipher_bits ; @@cipher_bits end
57
+ def self.cipher_name ; @@cipher_name end
58
+ def self.cipher_protocol ; @@cipher_protocol end
59
+ def self.handshake_completed? ; !!@@handshake_completed end
60
+
61
+ def post_init
62
+ if @@tls
63
+ start_tls @@tls
64
+ else
65
+ start_tls
66
+ end
67
+ end
68
+
69
+ def ssl_handshake_completed
70
+ @@handshake_completed = true
71
+ @@cert_value = get_peer_cert
72
+ @@cipher_bits = get_cipher_bits
73
+ @@cipher_name = get_cipher_name
74
+ @@cipher_protocol = get_cipher_protocol
75
+
76
+ if "TLSv1.3" != @@cipher_protocol
77
+ close_connection
78
+ EM.stop_event_loop
79
+ end
80
+ end
81
+
82
+ def unbind
83
+ EM.stop_event_loop if @@client_unbind
84
+ end
85
+ end
86
+
87
+ module Server
88
+ def initialize(tls = nil)
89
+ @@tls = tls ? tls.dup : tls
90
+ @@handshake_completed = false
91
+ @@cert_value = nil
92
+ @@cipher_bits = nil
93
+ @@cipher_name = nil
94
+ @@cipher_protocol = nil
95
+ @@sni_hostname = "not set"
96
+ @@ssl_verify_result = @@tls ? @@tls.delete(:ssl_verify_result) : nil
97
+ @@stop_after_handshake = @@tls ? @@tls.delete(:stop_after_handshake) : nil
98
+ end
99
+
100
+ def self.cert ; @@cert end
101
+ def self.cert_value ; @@cert_value end
102
+ def self.cipher_bits ; @@cipher_bits end
103
+ def self.cipher_name ; @@cipher_name end
104
+ def self.cipher_protocol ; @@cipher_protocol end
105
+ def self.handshake_completed? ; !!@@handshake_completed end
106
+ def self.sni_hostname ; @@sni_hostname end
107
+
108
+ def post_init
109
+ if @@tls
110
+ start_tls @@tls
111
+ else
112
+ start_tls
113
+ end
114
+ end
115
+
116
+ def ssl_verify_peer(cert)
117
+ @@cert = cert
118
+ if @@ssl_verify_result.is_a?(String) && @@ssl_verify_result.start_with?("|RAISE|")
119
+ raise @@ssl_verify_result.sub('|RAISE|', '')
120
+ else
121
+ @@ssl_verify_result
122
+ end
123
+ end
124
+
125
+ def ssl_handshake_completed
126
+ @@handshake_completed = true
127
+ @@cert_value = get_peer_cert
128
+ @@cipher_bits = get_cipher_bits
129
+ @@cipher_name = get_cipher_name
130
+ @@cipher_protocol = get_cipher_protocol
131
+
132
+ @@sni_hostname = get_sni_hostname
133
+ if ("TLSv1.3" == @@cipher_protocol) || @@stop_after_handshake
134
+ close_connection
135
+ EM.stop_event_loop
136
+ end
137
+ end
138
+
139
+ def unbind
140
+ EM.stop_event_loop unless @@handshake_completed
141
+ end
142
+ end
143
+
144
+ def client_server(c_hndlr = Client, s_hndlr = Server,
145
+ client: nil, server: nil, timeout: 3.0)
146
+ EM.run do
147
+ # fail safe stop
148
+ setup_timeout timeout
149
+ EM.start_server IP, PORT, s_hndlr, server
150
+ EM.connect IP, PORT, c_hndlr, client
151
+ end
152
+ end
153
+ end if EM.ssl?
@@ -0,0 +1,198 @@
1
+ require 'em/pure_ruby' if ENV['EM_PURE_RUBY']
2
+ require 'eventmachine'
3
+ require 'rbconfig'
4
+ require 'socket'
5
+
6
+ # verbose fun is to stop warnings when loading test-unit 3.2.9 in trunk
7
+ verbose, $VERBOSE = $VERBOSE, nil
8
+ require 'test/unit'
9
+ $VERBOSE = verbose
10
+
11
+ class Test::Unit::TestCase
12
+
13
+ # below outputs to console on load
14
+ # SSL_AVAIL is used by SSL tests
15
+ puts "", RUBY_DESCRIPTION
16
+ puts "\nEM.library_type #{EM.library_type.to_s.ljust(16)} EM.ssl? #{EM.ssl?}"
17
+ if EM.ssl?
18
+ require 'openssl'
19
+ ssl_lib_vers = OpenSSL.const_defined?(:OPENSSL_LIBRARY_VERSION) ?
20
+ OpenSSL::OPENSSL_LIBRARY_VERSION : 'na'
21
+ puts "OpenSSL OPENSSL_LIBRARY_VERSION: #{ssl_lib_vers}\n" \
22
+ " OPENSSL_VERSION: #{OpenSSL::OPENSSL_VERSION}\n" \
23
+ " EM OPENSSL_LIBRARY_VERSION: #{EM::OPENSSL_LIBRARY_VERSION}\n" \
24
+ " OPENSSL_VERSION: #{EM::OPENSSL_VERSION}"
25
+
26
+ # assumes all 2.x versions include support for TLSv1_2
27
+ temp = []
28
+ temp << 'SSLv2' unless EM::OPENSSL_NO_SSL2
29
+ temp << 'SSLv3' unless EM::OPENSSL_NO_SSL3
30
+ temp += %w[TLSv1 TLSv1_1 TLSv1_2]
31
+ temp << 'TLSv1_3' if EM.const_defined? :EM_PROTO_TLSv1_3
32
+ temp.sort!
33
+ puts " SSL_AVAIL: #{temp.join(' ')}", ""
34
+ SSL_AVAIL = temp.freeze
35
+ else
36
+ puts "\nEventMachine is not built with OpenSSL support, skipping tests in",
37
+ "files tests/test_ssl_*.rb"
38
+ end
39
+
40
+ class EMTestTimeout < StandardError ; end
41
+
42
+ def setup_timeout(timeout = TIMEOUT_INTERVAL)
43
+ EM.schedule {
44
+ EM.add_timer(timeout) {
45
+ raise EMTestTimeout, "Test was cancelled after #{timeout} seconds."
46
+ }
47
+ }
48
+ end
49
+
50
+ def port_in_use?(port, host="127.0.0.1")
51
+ s = TCPSocket.new(host, port)
52
+ s.close
53
+ s
54
+ rescue Errno::ECONNREFUSED
55
+ false
56
+ end
57
+
58
+ def next_port
59
+ @@port ||= 9000
60
+ begin
61
+ @@port += 1
62
+ end while port_in_use?(@@port)
63
+
64
+ @@port
65
+ end
66
+
67
+ # Returns true if the host have a localhost 127.0.0.1 IPv4.
68
+ def self.local_ipv4?
69
+ return @@has_local_ipv4 if defined?(@@has_local_ipv4)
70
+ begin
71
+ get_my_ipv4_address "127.0.0.1"
72
+ @@has_local_ipv4 = true
73
+ rescue
74
+ @@has_local_ipv4 = false
75
+ end
76
+ end
77
+
78
+ # Returns true if the host have a public IPv4 and stores it in
79
+ # @@public_ipv4.
80
+ def self.public_ipv4?
81
+ return @@has_public_ipv4 if defined?(@@has_public_ipv4)
82
+ begin
83
+ @@public_ipv4 = get_my_ipv4_address "1.2.3.4"
84
+ @@has_public_ipv4 = true
85
+ rescue
86
+ @@has_public_ipv4 = false
87
+ end
88
+ end
89
+
90
+ # Returns true if the host have a localhost ::1 IPv6.
91
+ def self.local_ipv6?
92
+ return @@has_local_ipv6 if defined?(@@has_local_ipv6)
93
+ begin
94
+ get_my_ipv6_address "::1"
95
+ @@has_local_ipv6 = true
96
+ rescue
97
+ @@has_local_ipv6 = false
98
+ end
99
+ end
100
+
101
+ # Returns true if the host have a public IPv6 and stores it in
102
+ # @@public_ipv6.
103
+ def self.public_ipv6?
104
+ return @@has_public_ipv6 if defined?(@@has_public_ipv6)
105
+ begin
106
+ @@public_ipv6 = get_my_ipv6_address "2001::1"
107
+ @@has_public_ipv6 = true
108
+ rescue
109
+ @@has_public_ipv6 = false
110
+ end
111
+ end
112
+
113
+ # Returns an array with the localhost addresses (IPv4 and/or IPv6).
114
+ def local_ips
115
+ return @@local_ips if defined?(@@local_ips)
116
+ @@local_ips = []
117
+ @@local_ips << "127.0.0.1" if self.class.local_ipv4?
118
+ @@local_ips << "::1" if self.class.local_ipv6?
119
+ @@local_ips
120
+ end
121
+
122
+ def exception_class
123
+ jruby? ? NativeException : RuntimeError
124
+ end
125
+
126
+ module PlatformHelper
127
+ # http://blog.emptyway.com/2009/11/03/proper-way-to-detect-windows-platform-in-ruby/
128
+ def windows?
129
+ RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
130
+ end
131
+
132
+ def darwin?
133
+ RUBY_PLATFORM =~ /darwin/
134
+ end
135
+
136
+ def solaris?
137
+ RUBY_PLATFORM =~ /solaris/
138
+ end
139
+
140
+ # http://stackoverflow.com/questions/1342535/how-can-i-tell-if-im-running-from-jruby-vs-ruby/1685970#1685970
141
+ def jruby?
142
+ defined? JRUBY_VERSION
143
+ end
144
+
145
+ def rbx?
146
+ defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
147
+ end
148
+ end
149
+
150
+ include PlatformHelper
151
+ extend PlatformHelper
152
+
153
+ # Tests may run slower on windows or Appveyor. YMMV
154
+ TIMEOUT_INTERVAL = windows? ? 0.25 : 0.25
155
+
156
+ module EMTestCasePrepend
157
+ def setup
158
+ EM.stop while EM.reactor_running?
159
+ end
160
+
161
+ def teardown
162
+ EM.cleanup_machine
163
+ end
164
+ end
165
+ prepend EMTestCasePrepend
166
+
167
+ def silent
168
+ backup, $VERBOSE = $VERBOSE, nil
169
+ begin
170
+ yield
171
+ ensure
172
+ $VERBOSE = backup
173
+ end
174
+ end
175
+
176
+
177
+ private
178
+
179
+ def self.get_my_ipv4_address ip
180
+ orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true # turn off reverse DNS resolution temporarily
181
+ UDPSocket.open(Socket::AF_INET) do |s|
182
+ s.connect ip, 1
183
+ s.addr.last
184
+ end
185
+ ensure
186
+ Socket.do_not_reverse_lookup = orig
187
+ end
188
+
189
+ def self.get_my_ipv6_address ip
190
+ orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true # turn off reverse DNS resolution temporarily
191
+ UDPSocket.open(Socket::AF_INET6) do |s|
192
+ s.connect ip, 1
193
+ s.addr.last
194
+ end
195
+ ensure
196
+ Socket.do_not_reverse_lookup = orig
197
+ end
198
+ end