eventmachine 1.2.1-x86-mingw32 → 1.2.2-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0b338ad9a3e4ff132af4a10fe58e2792d06a587a
4
- data.tar.gz: 3d75940509d1f411eba0100195408dcbedc39f3a
3
+ metadata.gz: 7da92aa45c5a15427b4f22791b55c70432e2ff46
4
+ data.tar.gz: 31c2fb1ef70b792868b994f217c66212ad312d40
5
5
  SHA512:
6
- metadata.gz: 359b6a9186f726223fcabc901a8950697d34411d16e7fb69c1b2feea7dc7ca36e3140f55bd2c5c27555a3b95d8d2890715eb95e4fa3d897d3b7123dd3a6c9fbf
7
- data.tar.gz: ba8ff61fce1735e582c5c757e2bd7a6f68d3e978d0fbef09817b163a4c6f5e231d51793fafe3d44699849f700617ab8f8858f90b94575ed2c1967a5b0c3a3ae8
6
+ metadata.gz: 5cecc62d68106d9490a2bfcceab90430efb2b12b76d46c1f10026013d69a5b2951d629262d7d4d9f7358327b09b250511ccd083b2864a076e0efe4de5f35d5de
7
+ data.tar.gz: 8c1fa375528e06b5a30b00af87a0facd810ddd20c5ce0b70075dbf692766d3dcdda205c7be48ad1b1fd91da864a7f1ca650a5fb6efe46c700168172bb73e0724
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.2.2 (January 23, 2016)
4
+ * Java: Fix Fixnum deprecated warning in Ruby 2.4+ [#759]
5
+ * Fix uncaught C++ exception in file watcher and raise InvalidSignature [#512, #757]
6
+ * Fix connection count off-by-one for epoll and kqueue [#750]
7
+ * Fix uninitialized variable warning in EM::P::HttpClient [#749]
8
+ * Fix missing initial value for EventableDescriptor NextHeartbeat [#748]
9
+ * Fix hostname resolution on Solaris, Ilumos, SmartOS, et al [#745, #746]
10
+ * Improve reliability of tests, reduce public Internet accesses in tests [#656, #666, #749]
11
+
3
12
  ## 1.2.1 (November 15, 2016)
4
13
  * Throw strerror(errno) when getsockname or getpeername fail [#683]
5
14
  * Use a single concrete implementation of getpeername/getsockname, the rest pure virtuals [#683]
data/ext/ed.cpp CHANGED
@@ -84,6 +84,7 @@ EventableDescriptor::EventableDescriptor (SOCKET sd, EventMachine_t *em):
84
84
  MyEventMachine (em),
85
85
  PendingConnectTimeout(20000000),
86
86
  InactivityTimeout (0),
87
+ NextHeartbeat (0),
87
88
  bPaused (false)
88
89
  {
89
90
  /* There are three ways to close a socket, all of which should
@@ -112,12 +113,12 @@ EventableDescriptor::EventableDescriptor (SOCKET sd, EventMachine_t *em):
112
113
  if (MyEventMachine == NULL)
113
114
  throw std::runtime_error ("bad em in eventable descriptor");
114
115
  CreatedAt = MyEventMachine->GetCurrentLoopTime();
116
+ LastActivity = MyEventMachine->GetCurrentLoopTime();
115
117
 
116
118
  #ifdef HAVE_EPOLL
117
119
  EpollEvent.events = 0;
118
120
  EpollEvent.data.ptr = this;
119
121
  #endif
120
- LastActivity = MyEventMachine->GetCurrentLoopTime();
121
122
  }
122
123
 
123
124
 
@@ -1944,7 +1945,7 @@ int DatagramDescriptor::SendOutboundDatagram (const char *data, unsigned long le
1944
1945
 
1945
1946
  struct sockaddr_in6 addr_here;
1946
1947
  size_t addr_here_len = sizeof addr_here;
1947
- if (0 != EventMachine_t::name2address (address, port, (struct sockaddr *)&addr_here, &addr_here_len))
1948
+ if (0 != EventMachine_t::name2address (address, port, SOCK_DGRAM, (struct sockaddr *)&addr_here, &addr_here_len))
1948
1949
  return -1;
1949
1950
 
1950
1951
  if (!data && (length > 0))
data/ext/em.cpp CHANGED
@@ -1194,7 +1194,7 @@ const uintptr_t EventMachine_t::ConnectToServer (const char *bind_addr, int bind
1194
1194
 
1195
1195
  struct sockaddr_storage bind_as;
1196
1196
  size_t bind_as_len = sizeof bind_as;
1197
- int gai = name2address (server, port, (struct sockaddr *)&bind_as, &bind_as_len);
1197
+ int gai = name2address (server, port, SOCK_STREAM, (struct sockaddr *)&bind_as, &bind_as_len);
1198
1198
  if (gai != 0) {
1199
1199
  char buf [200];
1200
1200
  snprintf (buf, sizeof(buf)-1, "unable to resolve address: %s", gai_strerror(gai));
@@ -1223,7 +1223,7 @@ const uintptr_t EventMachine_t::ConnectToServer (const char *bind_addr, int bind
1223
1223
  if (bind_addr) {
1224
1224
  struct sockaddr_storage bind_to;
1225
1225
  size_t bind_to_len = sizeof bind_to;
1226
- gai = name2address (bind_addr, bind_port, (struct sockaddr *)&bind_to, &bind_to_len);
1226
+ gai = name2address (bind_addr, bind_port, SOCK_STREAM, (struct sockaddr *)&bind_to, &bind_to_len);
1227
1227
  if (gai != 0) {
1228
1228
  close (sd);
1229
1229
  char buf [200];
@@ -1543,7 +1543,7 @@ int EventMachine_t::DetachFD (EventableDescriptor *ed)
1543
1543
  name2address
1544
1544
  ************/
1545
1545
 
1546
- int EventMachine_t::name2address (const char *server, int port, struct sockaddr *addr, size_t *addr_len)
1546
+ int EventMachine_t::name2address (const char *server, int port, int socktype, struct sockaddr *addr, size_t *addr_len)
1547
1547
  {
1548
1548
  if (!server || !*server)
1549
1549
  server = "0.0.0.0";
@@ -1551,6 +1551,7 @@ int EventMachine_t::name2address (const char *server, int port, struct sockaddr
1551
1551
  struct addrinfo *ai;
1552
1552
  struct addrinfo hints;
1553
1553
  memset (&hints, 0, sizeof(hints));
1554
+ hints.ai_socktype = socktype;
1554
1555
  hints.ai_family = AF_UNSPEC;
1555
1556
  hints.ai_flags = AI_NUMERICSERV | AI_ADDRCONFIG;
1556
1557
 
@@ -1584,7 +1585,7 @@ const uintptr_t EventMachine_t::CreateTcpServer (const char *server, int port)
1584
1585
 
1585
1586
  struct sockaddr_storage bind_here;
1586
1587
  size_t bind_here_len = sizeof bind_here;
1587
- if (0 != name2address (server, port, (struct sockaddr *)&bind_here, &bind_here_len))
1588
+ if (0 != name2address (server, port, SOCK_STREAM, (struct sockaddr *)&bind_here, &bind_here_len))
1588
1589
  return 0;
1589
1590
 
1590
1591
  SOCKET sd_accept = EmSocket (bind_here.ss_family, SOCK_STREAM, 0);
@@ -1639,7 +1640,7 @@ const uintptr_t EventMachine_t::OpenDatagramSocket (const char *address, int por
1639
1640
 
1640
1641
  struct sockaddr_storage bind_here;
1641
1642
  size_t bind_here_len = sizeof bind_here;
1642
- if (0 != name2address (address, port, (struct sockaddr *)&bind_here, &bind_here_len))
1643
+ if (0 != name2address (address, port, SOCK_DGRAM, (struct sockaddr *)&bind_here, &bind_here_len))
1643
1644
  return 0;
1644
1645
 
1645
1646
  // from here on, early returns must close the socket!
@@ -2087,7 +2088,12 @@ EventMachine_t::GetConnectionCount
2087
2088
 
2088
2089
  int EventMachine_t::GetConnectionCount ()
2089
2090
  {
2090
- return Descriptors.size() + NewDescriptors.size();
2091
+ int i = 0;
2092
+ // Subtract one for epoll or kqueue because of the LoopbreakDescriptor
2093
+ if (Poller == Poller_Epoll || Poller == Poller_Kqueue)
2094
+ i = 1;
2095
+
2096
+ return Descriptors.size() + NewDescriptors.size() - i;
2091
2097
  }
2092
2098
 
2093
2099
 
data/ext/em.h CHANGED
@@ -201,7 +201,7 @@ class EventMachine_t
201
201
 
202
202
  Poller_t GetPoller() { return Poller; }
203
203
 
204
- static int name2address (const char *server, int port, struct sockaddr *addr, size_t *addr_len);
204
+ static int name2address (const char *server, int port, int socktype, struct sockaddr *addr, size_t *addr_len);
205
205
 
206
206
  private:
207
207
  void _RunTimers();
data/ext/rubymain.cpp CHANGED
@@ -58,6 +58,7 @@ static VALUE EM_eConnectionError;
58
58
  static VALUE EM_eUnknownTimerFired;
59
59
  static VALUE EM_eConnectionNotBound;
60
60
  static VALUE EM_eUnsupported;
61
+ static VALUE EM_eInvalidSignature;
61
62
 
62
63
  static VALUE Intern_at_signature;
63
64
  static VALUE Intern_at_timers;
@@ -1036,7 +1037,12 @@ t_unwatch_filename
1036
1037
 
1037
1038
  static VALUE t_unwatch_filename (VALUE self UNUSED, VALUE sig)
1038
1039
  {
1039
- evma_unwatch_filename(NUM2BSIG (sig));
1040
+ try {
1041
+ evma_unwatch_filename(NUM2BSIG (sig));
1042
+ } catch (std::runtime_error e) {
1043
+ rb_raise (EM_eInvalidSignature, "%s", e.what());
1044
+ }
1045
+
1040
1046
  return Qnil;
1041
1047
  }
1042
1048
 
@@ -1389,6 +1395,7 @@ extern "C" void Init_rubyeventmachine()
1389
1395
  EM_eConnectionNotBound = rb_define_class_under (EmModule, "ConnectionNotBound", rb_eRuntimeError);
1390
1396
  EM_eUnknownTimerFired = rb_define_class_under (EmModule, "UnknownTimerFired", rb_eRuntimeError);
1391
1397
  EM_eUnsupported = rb_define_class_under (EmModule, "Unsupported", rb_eRuntimeError);
1398
+ EM_eInvalidSignature = rb_define_class_under (EmModule, "InvalidSignature", rb_eRuntimeError);
1392
1399
 
1393
1400
  rb_define_module_function (EmModule, "initialize_event_machine", (VALUE(*)(...))t_initialize_event_machine, 0);
1394
1401
  rb_define_module_function (EmModule, "run_machine_once", (VALUE(*)(...))t_run_machine_once, 0);
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -62,6 +62,7 @@ module EventMachine
62
62
 
63
63
  def initialize
64
64
  warn "HttpClient is deprecated and will be removed. EM-Http-Request should be used instead."
65
+ @connected = false
65
66
  end
66
67
 
67
68
  # @param args [Hash] The request arguments
data/lib/em/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module EventMachine
2
- VERSION = "1.2.1"
2
+ VERSION = "1.2.2"
3
3
  end
data/lib/jeventmachine.rb CHANGED
@@ -226,12 +226,12 @@ module EventMachine
226
226
  field.setAccessible(true)
227
227
  fileno = field.get(fileno)
228
228
  else
229
- raise ArgumentError, 'attach_fd requires Java Channel or POSIX fileno' unless fileno.is_a? Fixnum
229
+ raise ArgumentError, 'attach_fd requires Java Channel or POSIX fileno' unless fileno.is_a? Integer
230
230
  end
231
231
 
232
232
  if fileno == 0
233
233
  raise "can't open STDIN as selectable in Java =("
234
- elsif fileno.is_a? Fixnum
234
+ elsif fileno.is_a? Integer
235
235
  # 8Aug09: The following code is specific to the sun jvm's SocketChannelImpl. Is there a cross-platform
236
236
  # way of implementing this? If so, also remember to update EventableSocketChannel#close and #cleanup
237
237
  fd = FileDescriptor.new
data/tests/test_basic.rb CHANGED
@@ -146,7 +146,7 @@ class TestBasic < Test::Unit::TestCase
146
146
  def test_bind_connect
147
147
  pend('FIXME: this test is broken on Windows') if windows?
148
148
 
149
- local_ip = UDPSocket.open {|s| s.connect('google.com', 80); s.addr.last }
149
+ local_ip = UDPSocket.open {|s| s.connect('localhost', 80); s.addr.last }
150
150
 
151
151
  bind_port = next_port
152
152
 
@@ -1,13 +1,42 @@
1
1
  require 'em_test_helper'
2
2
 
3
3
  class TestConnectionCount < Test::Unit::TestCase
4
+ def teardown
5
+ EM.epoll = false
6
+ EM.kqueue = false
7
+ end
8
+
4
9
  def test_idle_connection_count
10
+ count = nil
5
11
  EM.run {
6
- $count = EM.connection_count
12
+ count = EM.connection_count
7
13
  EM.stop_event_loop
8
14
  }
15
+ assert_equal(0, count)
16
+ end
17
+
18
+ # Run this again with epoll enabled (if available)
19
+ def test_idle_connection_count_epoll
20
+ EM.epoll if EM.epoll?
9
21
 
10
- assert_equal(0, $count)
22
+ count = nil
23
+ EM.run {
24
+ count = EM.connection_count
25
+ EM.stop_event_loop
26
+ }
27
+ assert_equal(0, count)
28
+ end
29
+
30
+ # Run this again with kqueue enabled (if available)
31
+ def test_idle_connection_count_kqueue
32
+ EM.kqueue if EM.kqueue?
33
+
34
+ count = nil
35
+ EM.run {
36
+ count = EM.connection_count
37
+ EM.stop_event_loop
38
+ }
39
+ assert_equal(0, count)
11
40
  end
12
41
 
13
42
  module Client
@@ -55,6 +55,25 @@ class TestFileWatch < Test::Unit::TestCase
55
55
  assert($deleted)
56
56
  assert($unbind)
57
57
  end
58
+
59
+ # Refer: https://github.com/eventmachine/eventmachine/issues/512
60
+ def test_invalid_signature
61
+ # This works fine with kqueue, only fails with linux inotify.
62
+ omit_if(EM.kqueue?)
63
+
64
+ EM.run {
65
+ file = Tempfile.new('foo')
66
+
67
+ w1 = EventMachine.watch_file(file.path)
68
+ w2 = EventMachine.watch_file(file.path)
69
+
70
+ assert_raise EventMachine::InvalidSignature do
71
+ w2.stop_watching
72
+ end
73
+
74
+ EM.stop
75
+ }
76
+ end
58
77
  else
59
78
  warn "EM.watch_file not implemented, skipping tests in #{__FILE__}"
60
79
 
@@ -2,13 +2,8 @@ require 'em_test_helper'
2
2
 
3
3
  class TestHttpClient < Test::Unit::TestCase
4
4
 
5
- Localhost = "127.0.0.1"
6
- Localport = 9801
7
-
8
5
  def setup
9
- end
10
-
11
- def teardown
6
+ @port = next_port
12
7
  end
13
8
 
14
9
  #-------------------------------------
@@ -19,6 +14,7 @@ class TestHttpClient < Test::Unit::TestCase
19
14
  c = silent { EM::P::HttpClient.send :request, :host => "www.google.com", :port => 80 }
20
15
  c.callback {
21
16
  ok = true
17
+ c.close_connection
22
18
  EM.stop
23
19
  }
24
20
  c.errback {EM.stop} # necessary, otherwise a failure blocks the test suite forever.
@@ -32,7 +28,11 @@ class TestHttpClient < Test::Unit::TestCase
32
28
  ok = false
33
29
  EM.run {
34
30
  c = silent { EM::P::HttpClient.send :request, :host => "www.google.com", :port => 80 }
35
- c.callback {ok = true; EM.stop}
31
+ c.callback {
32
+ ok = true
33
+ c.close_connection
34
+ EM.stop
35
+ }
36
36
  c.errback {EM.stop}
37
37
  }
38
38
  assert ok
@@ -44,8 +44,9 @@ class TestHttpClient < Test::Unit::TestCase
44
44
  ok = false
45
45
  EM.run {
46
46
  c = silent { EM::P::HttpClient.send :request, :host => "www.google.com", :port => 80 }
47
- c.callback {|result|
48
- ok = true;
47
+ c.callback {
48
+ ok = true
49
+ c.close_connection
49
50
  EM.stop
50
51
  }
51
52
  c.errback {EM.stop}
@@ -74,10 +75,11 @@ class TestHttpClient < Test::Unit::TestCase
74
75
  def test_http_empty_content
75
76
  ok = false
76
77
  EM.run {
77
- EM.start_server "127.0.0.1", 9701, EmptyContent
78
- c = silent { EM::P::HttpClient.send :request, :host => "127.0.0.1", :port => 9701 }
79
- c.callback {|result|
78
+ EM.start_server "127.0.0.1", @port, EmptyContent
79
+ c = silent { EM::P::HttpClient.send :request, :host => "127.0.0.1", :port => @port }
80
+ c.callback {
80
81
  ok = true
82
+ c.close_connection
81
83
  EM.stop
82
84
  }
83
85
  }
@@ -132,15 +134,15 @@ class TestHttpClient < Test::Unit::TestCase
132
134
  def test_post
133
135
  response = nil
134
136
  EM.run {
135
- EM.start_server Localhost, Localport, PostContent
137
+ EM.start_server '127.0.0.1', @port, PostContent
136
138
  setup_timeout(2)
137
139
  c = silent { EM::P::HttpClient.request(
138
- :host=>Localhost,
139
- :port=>Localport,
140
- :method=>:post,
141
- :request=>"/aaa",
142
- :content=>"XYZ",
143
- :content_type=>"text/plain"
140
+ :host => '127.0.0.1',
141
+ :port => @port,
142
+ :method => :post,
143
+ :request => "/aaa",
144
+ :content => "XYZ",
145
+ :content_type => "text/plain"
144
146
  )}
145
147
  c.callback {|r|
146
148
  response = r
@@ -159,8 +161,9 @@ class TestHttpClient < Test::Unit::TestCase
159
161
  ok = false
160
162
  EM.run {
161
163
  c = silent { EM::Protocols::HttpClient.send :request, :host => "www.google.com", :port => 80, :cookie=>"aaa=bbb" }
162
- c.callback {|result|
163
- ok = true;
164
+ c.callback {
165
+ ok = true
166
+ c.close_connection
164
167
  EM.stop
165
168
  }
166
169
  c.errback {EM.stop}
@@ -178,8 +181,9 @@ class TestHttpClient < Test::Unit::TestCase
178
181
  :port => 80,
179
182
  :version => "1.0"
180
183
  )}
181
- c.callback {|result|
182
- ok = true;
184
+ c.callback {
185
+ ok = true
186
+ c.close_connection
183
187
  EM.stop
184
188
  }
185
189
  c.errback {EM.stop}
@@ -215,14 +219,15 @@ class TestHttpClient < Test::Unit::TestCase
215
219
 
216
220
  def test_http_chunked_encoding_content
217
221
  ok = false
218
- EventMachine.run {
219
- EventMachine.start_server "127.0.0.1", 9701, ChunkedEncodingContent
220
- c = EventMachine::Protocols::HttpClient.send :request, :host => "127.0.0.1", :port => 9701
221
- c.callback {|result|
222
+ EM.run {
223
+ EM.start_server "127.0.0.1", @port, ChunkedEncodingContent
224
+ c = silent { EM::P::HttpClient.send :request, :host => "127.0.0.1", :port => @port }
225
+ c.callback { |result|
222
226
  if result[:content] == "chunk1" * 1024 + "chunk2" * 15
223
227
  ok = true
224
228
  end
225
- EventMachine.stop
229
+ c.close_connection
230
+ EM.stop
226
231
  }
227
232
  }
228
233
  assert ok
@@ -1,17 +1,11 @@
1
1
  require 'em_test_helper'
2
2
 
3
3
  class TestHttpClient2 < Test::Unit::TestCase
4
- Localhost = "127.0.0.1"
5
- Localport = 9801
6
-
7
- def setup
8
- end
9
-
10
- def teardown
4
+ class TestServer < EM::Connection
11
5
  end
12
6
 
13
-
14
- class TestServer < EM::Connection
7
+ def setup
8
+ @port = next_port
15
9
  end
16
10
 
17
11
  # #connect returns an object which has made a connection to an HTTP server
@@ -21,21 +15,22 @@ class TestHttpClient2 < Test::Unit::TestCase
21
15
  #
22
16
  def test_connect
23
17
  EM.run {
24
- EM.start_server Localhost, Localport, TestServer
18
+ setup_timeout(1)
19
+ EM.start_server '127.0.0.1', @port, TestServer
25
20
  silent do
26
- EM::P::HttpClient2.connect Localhost, Localport
27
- EM::P::HttpClient2.connect( :host=>Localhost, :port=>Localport )
21
+ EM::P::HttpClient2.connect '127.0.0.1', @port
22
+ EM::P::HttpClient2.connect( :host=>'127.0.0.1', :port=>@port )
28
23
  end
29
24
  EM.stop
30
25
  }
31
26
  end
32
27
 
33
-
34
28
  def test_bad_port
35
29
  EM.run {
36
- EM.start_server Localhost, Localport, TestServer
30
+ setup_timeout(1)
31
+ EM.start_server '127.0.0.1', @port, TestServer
37
32
  assert_raises( ArgumentError ) {
38
- silent { EM::P::HttpClient2.connect Localhost, "xxx" }
33
+ silent { EM::P::HttpClient2.connect '127.0.0.1', "xxx" }
39
34
  }
40
35
  EM.stop
41
36
  }
@@ -44,7 +39,8 @@ class TestHttpClient2 < Test::Unit::TestCase
44
39
  def test_bad_server
45
40
  err = nil
46
41
  EM.run {
47
- http = silent { EM::P::HttpClient2.connect Localhost, 9999 }
42
+ setup_timeout(1)
43
+ http = silent { EM::P::HttpClient2.connect '127.0.0.1', 9999 }
48
44
  d = http.get "/"
49
45
  d.errback { err = true; d.internal_error; EM.stop }
50
46
  }
@@ -54,7 +50,8 @@ class TestHttpClient2 < Test::Unit::TestCase
54
50
  def test_get
55
51
  content = nil
56
52
  EM.run {
57
- http = silent { EM::P::HttpClient2.connect "google.com", 80 }
53
+ setup_timeout(1)
54
+ http = silent { EM::P::HttpClient2.connect :host => "google.com", :port => 80, :version => '1.0' }
58
55
  d = http.get "/"
59
56
  d.callback {
60
57
  content = d.content
@@ -70,7 +67,8 @@ class TestHttpClient2 < Test::Unit::TestCase
70
67
  def _test_get_multiple
71
68
  content = nil
72
69
  EM.run {
73
- http = silent { EM::P::HttpClient2.connect "google.com", 80 }
70
+ setup_timeout(1)
71
+ http = silent { EM::P::HttpClient2.connect "google.com", :version => '1.0' }
74
72
  d = http.get "/"
75
73
  d.callback {
76
74
  e = http.get "/"
@@ -86,6 +84,7 @@ class TestHttpClient2 < Test::Unit::TestCase
86
84
  def test_get_pipeline
87
85
  headers, headers2 = nil, nil
88
86
  EM.run {
87
+ setup_timeout(1)
89
88
  http = silent { EM::P::HttpClient2.connect "google.com", 80 }
90
89
  d = http.get("/")
91
90
  d.callback {
@@ -102,11 +101,11 @@ class TestHttpClient2 < Test::Unit::TestCase
102
101
  assert(headers2)
103
102
  end
104
103
 
105
-
106
104
  def test_authheader
107
105
  EM.run {
108
- EM.start_server Localhost, Localport, TestServer
109
- http = silent { EM::P::HttpClient2.connect Localhost, 18842 }
106
+ setup_timeout(1)
107
+ EM.start_server '127.0.0.1', @port, TestServer
108
+ http = silent { EM::P::HttpClient2.connect '127.0.0.1', 18842 }
110
109
  d = http.get :url=>"/", :authorization=>"Basic xxx"
111
110
  d.callback {EM.stop}
112
111
  d.errback {EM.stop}
@@ -114,15 +113,16 @@ class TestHttpClient2 < Test::Unit::TestCase
114
113
  end
115
114
 
116
115
  def test_https_get
116
+ omit_unless(EM.ssl?)
117
117
  d = nil
118
118
  EM.run {
119
- http = silent { EM::P::HttpClient2.connect :host => 'www.apple.com', :port => 443, :ssl => true }
119
+ setup_timeout(1)
120
+ http = silent { EM::P::HttpClient2.connect :host => 'www.google.com', :port => 443, :ssl => true, :version => '1.0' }
120
121
  d = http.get "/"
121
- d.callback {
122
- EM.stop
123
- }
122
+ d.callback {EM.stop}
123
+ d.errback {EM.stop}
124
124
  }
125
125
  assert_equal(200, d.status)
126
- end if EM.ssl?
126
+ end
127
127
 
128
128
  end