eventmachine 1.2.1-x86-mingw32 → 1.2.2-x86-mingw32
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/ext/ed.cpp +3 -2
- data/ext/em.cpp +12 -6
- data/ext/em.h +1 -1
- data/ext/rubymain.cpp +8 -1
- data/lib/1.9/fastfilereaderext.so +0 -0
- data/lib/1.9/rubyeventmachine.so +0 -0
- data/lib/2.0/fastfilereaderext.so +0 -0
- data/lib/2.0/rubyeventmachine.so +0 -0
- data/lib/2.1/fastfilereaderext.so +0 -0
- data/lib/2.1/rubyeventmachine.so +0 -0
- data/lib/2.2/fastfilereaderext.so +0 -0
- data/lib/2.2/rubyeventmachine.so +0 -0
- data/lib/2.3/fastfilereaderext.so +0 -0
- data/lib/2.3/rubyeventmachine.so +0 -0
- data/lib/em/protocols/httpclient.rb +1 -0
- data/lib/em/version.rb +1 -1
- data/lib/jeventmachine.rb +2 -2
- data/tests/test_basic.rb +1 -1
- data/tests/test_connection_count.rb +31 -2
- data/tests/test_file_watch.rb +19 -0
- data/tests/test_httpclient.rb +33 -28
- data/tests/test_httpclient2.rb +26 -26
- data/tests/test_idle_connection.rb +24 -18
- data/tests/test_ipv4.rb +70 -100
- data/tests/test_ipv6.rb +0 -26
- data/tests/test_iterator.rb +19 -16
- data/tests/test_ltp.rb +28 -11
- data/tests/test_pending_connect_timeout.rb +3 -3
- data/tests/test_resolver.rb +4 -3
- data/tests/test_sock_opt.rb +54 -0
- data/tests/test_stomp.rb +11 -10
- data/tests/test_unbind_reason.rb +14 -26
- metadata +4 -6
- data/tests/test_get_sock_opt.rb +0 -37
- data/tests/test_set_sock_opt.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7da92aa45c5a15427b4f22791b55c70432e2ff46
|
4
|
+
data.tar.gz: 31c2fb1ef70b792868b994f217c66212ad312d40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
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
|
data/lib/1.9/rubyeventmachine.so
CHANGED
Binary file
|
Binary file
|
data/lib/2.0/rubyeventmachine.so
CHANGED
Binary file
|
Binary file
|
data/lib/2.1/rubyeventmachine.so
CHANGED
Binary file
|
Binary file
|
data/lib/2.2/rubyeventmachine.so
CHANGED
Binary file
|
Binary file
|
data/lib/2.3/rubyeventmachine.so
CHANGED
Binary file
|
data/lib/em/version.rb
CHANGED
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?
|
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?
|
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('
|
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
|
-
|
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
|
-
|
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
|
data/tests/test_file_watch.rb
CHANGED
@@ -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
|
|
data/tests/test_httpclient.rb
CHANGED
@@ -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
|
-
|
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 {
|
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 {
|
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",
|
78
|
-
c = silent { EM::P::HttpClient.send :request, :host => "127.0.0.1", :port =>
|
79
|
-
c.callback {
|
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
|
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=>
|
139
|
-
:port=>
|
140
|
-
:method
|
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 {
|
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 {
|
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
|
-
|
219
|
-
|
220
|
-
c =
|
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
|
-
|
229
|
+
c.close_connection
|
230
|
+
EM.stop
|
226
231
|
}
|
227
232
|
}
|
228
233
|
assert ok
|
data/tests/test_httpclient2.rb
CHANGED
@@ -1,17 +1,11 @@
|
|
1
1
|
require 'em_test_helper'
|
2
2
|
|
3
3
|
class TestHttpClient2 < Test::Unit::TestCase
|
4
|
-
|
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
|
-
|
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
|
-
|
18
|
+
setup_timeout(1)
|
19
|
+
EM.start_server '127.0.0.1', @port, TestServer
|
25
20
|
silent do
|
26
|
-
EM::P::HttpClient2.connect
|
27
|
-
EM::P::HttpClient2.connect( :host=>
|
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
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
109
|
-
|
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
|
-
|
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
|
-
|
123
|
-
}
|
122
|
+
d.callback {EM.stop}
|
123
|
+
d.errback {EM.stop}
|
124
124
|
}
|
125
125
|
assert_equal(200, d.status)
|
126
|
-
end
|
126
|
+
end
|
127
127
|
|
128
128
|
end
|