xmpp4r 0.4 → 0.5
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.
- data/CHANGELOG +8 -0
- data/README.rdoc +4 -1
- data/Rakefile +10 -20
- data/data/doc/xmpp4r/examples/advanced/versionpoll.rb +20 -1
- data/lib/xmpp4r/bytestreams/helper/ibb/target.rb +7 -0
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb +7 -1
- data/lib/xmpp4r/callbacks.rb +9 -0
- data/lib/xmpp4r/caps/c.rb +14 -0
- data/lib/xmpp4r/caps/helper/helper.rb +1 -4
- data/lib/xmpp4r/client.rb +42 -15
- data/lib/xmpp4r/connection.rb +7 -3
- data/lib/xmpp4r/debuglog.rb +22 -1
- data/lib/xmpp4r/discovery.rb +1 -0
- data/lib/xmpp4r/discovery/helper/helper.rb +58 -0
- data/lib/xmpp4r/discovery/iq/discoinfo.rb +2 -2
- data/lib/xmpp4r/discovery/iq/discoitems.rb +2 -2
- data/lib/xmpp4r/errors.rb +5 -2
- data/lib/xmpp4r/httpbinding/client.rb +9 -19
- data/lib/xmpp4r/last.rb +2 -0
- data/lib/xmpp4r/last/helper/helper.rb +37 -0
- data/lib/xmpp4r/last/iq/last.rb +67 -0
- data/lib/xmpp4r/location.rb +2 -0
- data/lib/xmpp4r/location/helper/helper.rb +56 -0
- data/lib/xmpp4r/location/location.rb +179 -0
- data/lib/xmpp4r/message.rb +32 -0
- data/lib/xmpp4r/presence.rb +1 -1
- data/lib/xmpp4r/pubsub/children/configuration.rb +1 -1
- data/lib/xmpp4r/pubsub/children/items.rb +11 -2
- data/lib/xmpp4r/pubsub/children/publish.rb +14 -0
- data/lib/xmpp4r/pubsub/children/retract.rb +41 -0
- data/lib/xmpp4r/pubsub/helper/nodebrowser.rb +2 -3
- data/lib/xmpp4r/pubsub/helper/nodehelper.rb +4 -4
- data/lib/xmpp4r/pubsub/helper/oauth_service_helper.rb +90 -0
- data/lib/xmpp4r/pubsub/helper/servicehelper.rb +58 -19
- data/lib/xmpp4r/reliable.rb +168 -0
- data/lib/xmpp4r/rexmladdons.rb +6 -0
- data/lib/xmpp4r/roster/helper/roster.rb +5 -2
- data/lib/xmpp4r/sasl.rb +19 -8
- data/lib/xmpp4r/stream.rb +133 -31
- data/lib/xmpp4r/streamparser.rb +9 -1
- data/lib/xmpp4r/test/listener_mocker.rb +118 -0
- data/lib/xmpp4r/xmpp4r.rb +3 -1
- data/test/bytestreams/tc_ibb.rb +6 -4
- data/test/bytestreams/tc_socks5bytestreams.rb +3 -2
- data/test/caps/tc_helper.rb +4 -2
- data/test/dataforms/tc_data.rb +1 -1
- data/test/last/tc_helper.rb +75 -0
- data/test/lib/clienttester.rb +43 -14
- data/test/muc/tc_muc_mucclient.rb +6 -2
- data/test/pubsub/tc_helper.rb +131 -8
- data/test/pubsub/tc_nodeconfig.rb +7 -0
- data/test/reliable/tc_disconnect_cleanup.rb +334 -0
- data/test/reliable/tc_disconnect_exception.rb +37 -0
- data/test/reliable/tc_listener_mocked_test.rb +68 -0
- data/test/reliable/tc_reliable_connection.rb +31 -0
- data/test/roster/tc_helper.rb +21 -11
- data/test/rpc/tc_helper.rb +2 -2
- data/test/tc_callbacks.rb +3 -3
- data/test/tc_message.rb +15 -0
- data/test/tc_stream.rb +59 -121
- data/test/tc_streamError.rb +2 -4
- data/test/tc_streamparser.rb +26 -13
- data/test/ts_xmpp4r.rb +0 -9
- data/test/tune/tc_helper_recv.rb +0 -2
- data/test/vcard/tc_helper.rb +1 -1
- data/xmpp4r.gemspec +31 -84
- metadata +116 -167
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb.orig +0 -62
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift "#{File.dirname(__FILE__)}/../../lib"
|
4
|
+
|
5
|
+
require 'test/unit'
|
6
|
+
require 'xmpp4r'
|
7
|
+
|
8
|
+
class DisconnectExceptionTest < Test::Unit::TestCase
|
9
|
+
class Listener
|
10
|
+
def receive(element)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_streamparser
|
15
|
+
rd, wr = IO.pipe
|
16
|
+
listener = Listener.new
|
17
|
+
exception_raised = nil
|
18
|
+
|
19
|
+
Thread.new do
|
20
|
+
begin
|
21
|
+
parser = Jabber::StreamParser.new(rd, listener)
|
22
|
+
parser.parse
|
23
|
+
rescue => e
|
24
|
+
exception_raised = e
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
wr.write("<hi/>")
|
29
|
+
wr.close
|
30
|
+
sleep(0.1)
|
31
|
+
|
32
|
+
assert exception_raised
|
33
|
+
assert exception_raised.is_a?(Jabber::ServerDisconnected), "Expected a Jabber::ServerDisconnected but got #{exception_raised}"
|
34
|
+
# puts exception_raised.inspect
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift "#{File.dirname(__FILE__)}/../../lib"
|
4
|
+
|
5
|
+
require 'test/unit'
|
6
|
+
require 'xmpp4r'
|
7
|
+
|
8
|
+
# Jabber::debug = true
|
9
|
+
|
10
|
+
class ReliableListenerTest < Test::Unit::TestCase
|
11
|
+
|
12
|
+
class TestListener < Jabber::Reliable::Listener
|
13
|
+
attr_accessor :received_messages
|
14
|
+
|
15
|
+
def on_message(got_message)
|
16
|
+
self.received_messages ||= []
|
17
|
+
self.received_messages << got_message
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_listener
|
23
|
+
listener = TestListener.new("listener1@localhost/hi", "test", {:servers => "127.0.0.1", :presence_message => "hi"})
|
24
|
+
Jabber::Test::ListenerMocker.mock_out(listener)
|
25
|
+
listener.start
|
26
|
+
|
27
|
+
message_to_send = Jabber::Message.new
|
28
|
+
message_to_send.to = "listener1@localhost/hi"
|
29
|
+
message_to_send.body = "hi"
|
30
|
+
|
31
|
+
listener.send_message(message_to_send)
|
32
|
+
|
33
|
+
assert_equal(1, listener.received_messages.size)
|
34
|
+
|
35
|
+
first_message = listener.received_messages[0]
|
36
|
+
assert_equal("hi", first_message.body)
|
37
|
+
listener.stop
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_listener_stop_and_start
|
41
|
+
listener = TestListener.new("listener1@localhost/hi", "test", {:servers => "127.0.0.1", :presence_message => "hi"})
|
42
|
+
Jabber::Test::ListenerMocker.mock_out(listener)
|
43
|
+
listener.start
|
44
|
+
|
45
|
+
message_to_send = Jabber::Message.new
|
46
|
+
message_to_send.to = "listener1@localhost/hi"
|
47
|
+
message_to_send.body = "hi"
|
48
|
+
|
49
|
+
listener.send_message(message_to_send)
|
50
|
+
|
51
|
+
assert_equal(1, listener.received_messages.size)
|
52
|
+
|
53
|
+
first_message = listener.received_messages[0]
|
54
|
+
assert_equal("hi", first_message.body)
|
55
|
+
listener.stop
|
56
|
+
|
57
|
+
assert_raises(ArgumentError){
|
58
|
+
listener.send_message(message_to_send)
|
59
|
+
}
|
60
|
+
|
61
|
+
listener.start
|
62
|
+
listener.send_message(message_to_send)
|
63
|
+
|
64
|
+
assert_equal(2, listener.received_messages.size)
|
65
|
+
listener.stop
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift "#{File.dirname(__FILE__)}/../../lib"
|
4
|
+
|
5
|
+
require 'test/unit'
|
6
|
+
require 'xmpp4r'
|
7
|
+
|
8
|
+
# Jabber::debug = true
|
9
|
+
|
10
|
+
class ReliableConnectionTest < Test::Unit::TestCase
|
11
|
+
|
12
|
+
def test_connection_retry
|
13
|
+
@created_sockets = []
|
14
|
+
callback_proc = Proc.new do |socket_init_args|
|
15
|
+
@created_sockets << socket_init_args[0]
|
16
|
+
raise RuntimeError, "Fail to create socket"
|
17
|
+
end
|
18
|
+
Jabber::Test::ListenerMocker.with_socket_mocked(callback_proc) do
|
19
|
+
conn = Jabber::Reliable::Connection.new("listener1@localhost/hi", {
|
20
|
+
:servers => ["server 1", "server 2", "server 3", "server 4"],
|
21
|
+
:port => 12345,
|
22
|
+
:max_retry => 3, #3 retries = 4 total tries
|
23
|
+
:retry_sleep => 0.1})
|
24
|
+
assert_raises(RuntimeError) do
|
25
|
+
conn.connect
|
26
|
+
end
|
27
|
+
assert_equal(["server 1", "server 2", "server 3", "server 4"], @created_sockets.sort)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
data/test/roster/tc_helper.rb
CHANGED
@@ -31,10 +31,11 @@ class Roster::HelperTest < Test::Unit::TestCase
|
|
31
31
|
}
|
32
32
|
|
33
33
|
query_waiter = Semaphore.new
|
34
|
-
h = Roster::Helper.new(@client)
|
34
|
+
h = Roster::Helper.new(@client, false)
|
35
35
|
h.add_query_callback { |iq|
|
36
36
|
query_waiter.run
|
37
37
|
}
|
38
|
+
h.get_roster
|
38
39
|
wait_state
|
39
40
|
query_waiter.wait
|
40
41
|
|
@@ -74,8 +75,9 @@ class Roster::HelperTest < Test::Unit::TestCase
|
|
74
75
|
}
|
75
76
|
|
76
77
|
query_waiter = Semaphore.new
|
77
|
-
h = Roster::Helper.new(@client)
|
78
|
+
h = Roster::Helper.new(@client, false)
|
78
79
|
h.add_query_callback { |iq| query_waiter.run }
|
80
|
+
h.get_roster
|
79
81
|
wait_state
|
80
82
|
query_waiter.wait
|
81
83
|
|
@@ -142,7 +144,7 @@ class Roster::HelperTest < Test::Unit::TestCase
|
|
142
144
|
|
143
145
|
query_waiter = Semaphore.new
|
144
146
|
presence_waiter = Semaphore.new
|
145
|
-
h = Roster::Helper.new(@client)
|
147
|
+
h = Roster::Helper.new(@client, false)
|
146
148
|
h.add_query_callback { |iq|
|
147
149
|
query_waiter.run
|
148
150
|
}
|
@@ -156,7 +158,7 @@ class Roster::HelperTest < Test::Unit::TestCase
|
|
156
158
|
cb_item, cb_op, cb_p = item, oldpres, pres
|
157
159
|
presence_waiter.run
|
158
160
|
}
|
159
|
-
|
161
|
+
h.get_roster
|
160
162
|
wait_state
|
161
163
|
query_waiter.wait
|
162
164
|
|
@@ -289,8 +291,9 @@ class Roster::HelperTest < Test::Unit::TestCase
|
|
289
291
|
}
|
290
292
|
|
291
293
|
query_waiter = Semaphore.new
|
292
|
-
h = Roster::Helper.new(@client)
|
294
|
+
h = Roster::Helper.new(@client, false)
|
293
295
|
h.add_query_callback { |iq| query_waiter.run }
|
296
|
+
h.get_roster
|
294
297
|
wait_state
|
295
298
|
query_waiter.wait
|
296
299
|
|
@@ -326,8 +329,9 @@ class Roster::HelperTest < Test::Unit::TestCase
|
|
326
329
|
}
|
327
330
|
|
328
331
|
query_waiter = Semaphore.new
|
329
|
-
h = Roster::Helper.new(@client)
|
332
|
+
h = Roster::Helper.new(@client, false)
|
330
333
|
h.add_query_callback { |iq| query_waiter.run }
|
334
|
+
h.get_roster
|
331
335
|
wait_state
|
332
336
|
query_waiter.wait
|
333
337
|
|
@@ -362,15 +366,18 @@ class Roster::HelperTest < Test::Unit::TestCase
|
|
362
366
|
end
|
363
367
|
|
364
368
|
def test_decline_subscription
|
369
|
+
query_waiter = Semaphore.new
|
370
|
+
|
365
371
|
state { |iq|
|
366
372
|
send("<iq type='result' id='#{iq.id}'>
|
367
373
|
<query xmlns='jabber:iq:roster'/>
|
368
374
|
</iq>")
|
369
375
|
}
|
370
376
|
|
371
|
-
|
372
|
-
h = Roster::Helper.new(@client)
|
377
|
+
h = Roster::Helper.new(@client, false)
|
373
378
|
h.add_query_callback { |iq| query_waiter.run }
|
379
|
+
h.get_roster
|
380
|
+
|
374
381
|
wait_state
|
375
382
|
query_waiter.wait
|
376
383
|
|
@@ -406,8 +413,9 @@ class Roster::HelperTest < Test::Unit::TestCase
|
|
406
413
|
}
|
407
414
|
|
408
415
|
query_waiter = Semaphore.new
|
409
|
-
h = Roster::Helper.new(@client)
|
416
|
+
h = Roster::Helper.new(@client, false)
|
410
417
|
h.add_query_callback { query_waiter.run }
|
418
|
+
h.get_roster
|
411
419
|
wait_state
|
412
420
|
query_waiter.wait
|
413
421
|
|
@@ -434,8 +442,9 @@ class Roster::HelperTest < Test::Unit::TestCase
|
|
434
442
|
}
|
435
443
|
|
436
444
|
query_waiter = Semaphore.new
|
437
|
-
h = Roster::Helper.new(@client)
|
445
|
+
h = Roster::Helper.new(@client, false)
|
438
446
|
h.add_query_callback { query_waiter.run }
|
447
|
+
h.get_roster
|
439
448
|
wait_state
|
440
449
|
query_waiter.wait
|
441
450
|
|
@@ -474,11 +483,12 @@ class Roster::HelperTest < Test::Unit::TestCase
|
|
474
483
|
update_args = nil
|
475
484
|
update_waiter = Semaphore.new
|
476
485
|
|
477
|
-
h = Roster::Helper.new(@client)
|
486
|
+
h = Roster::Helper.new(@client, false)
|
478
487
|
h.add_update_callback { |*a|
|
479
488
|
update_args = a
|
480
489
|
update_waiter.run
|
481
490
|
}
|
491
|
+
h.get_roster
|
482
492
|
|
483
493
|
send("<iq type='set'>
|
484
494
|
<query xmlns='jabber:iq:roster'>
|
data/test/rpc/tc_helper.rb
CHANGED
@@ -78,7 +78,7 @@ class RPC::HelperTest < Test::Unit::TestCase
|
|
78
78
|
assert_equal(['tseT', 'TEST'], cl.multicall(['reverse', 'Test'], ['upcase', 'Test']))
|
79
79
|
end
|
80
80
|
|
81
|
-
def
|
81
|
+
def test_10calls
|
82
82
|
give_client_jid!
|
83
83
|
|
84
84
|
sv = RPC::Server.new(@server)
|
@@ -86,7 +86,7 @@ class RPC::HelperTest < Test::Unit::TestCase
|
|
86
86
|
|
87
87
|
cl = RPC::Client.new(@client, 'a@b/c')
|
88
88
|
correct = true
|
89
|
-
|
89
|
+
10.times {
|
90
90
|
a, b = rand(1000), rand(1000)
|
91
91
|
correct &&= (cl.call('add', a, b) == a + b)
|
92
92
|
}
|
data/test/tc_callbacks.rb
CHANGED
@@ -55,7 +55,7 @@ class CallbacksTest < Test::Unit::TestCase
|
|
55
55
|
cbl.add(7, "ref1") { false }
|
56
56
|
o = "o"
|
57
57
|
assert(!cbl.process(o))
|
58
|
-
|
58
|
+
end
|
59
59
|
|
60
60
|
def test_callbacklist5
|
61
61
|
cbl = CallbackList.new
|
@@ -63,7 +63,7 @@ class CallbacksTest < Test::Unit::TestCase
|
|
63
63
|
cbl.add(7, "ref1") { false }
|
64
64
|
o = "o"
|
65
65
|
assert(cbl.process(o))
|
66
|
-
|
66
|
+
end
|
67
67
|
|
68
68
|
def test_callbacklist6
|
69
69
|
cbl = CallbackList.new
|
@@ -78,7 +78,7 @@ class CallbacksTest < Test::Unit::TestCase
|
|
78
78
|
}
|
79
79
|
assert(!cbl.process(c, d))
|
80
80
|
assert(ok)
|
81
|
-
|
81
|
+
end
|
82
82
|
|
83
83
|
def test_callbacklist7
|
84
84
|
cbl = CallbackList.new
|
data/test/tc_message.rb
CHANGED
@@ -84,6 +84,21 @@ class MessageTest < Test::Unit::TestCase
|
|
84
84
|
assert_equal('abc', x.thread)
|
85
85
|
end
|
86
86
|
|
87
|
+
def test_chat_state
|
88
|
+
x = Message.new
|
89
|
+
assert_equal(nil, x.chat_state)
|
90
|
+
chat_state = REXML::Element.new('active')
|
91
|
+
chat_state.add_namespace('http://jabber.org/protocol/chatstates')
|
92
|
+
x.add(chat_state)
|
93
|
+
assert_equal(:active, x.chat_state)
|
94
|
+
x.chat_state = :gone
|
95
|
+
assert_equal(:gone, x.chat_state)
|
96
|
+
assert_raise(InvalidChatState) do
|
97
|
+
x.chat_state = :some_invalid_state
|
98
|
+
end
|
99
|
+
assert_equal true, x.gone?
|
100
|
+
end
|
101
|
+
|
87
102
|
def test_error
|
88
103
|
x = Message.new()
|
89
104
|
assert_equal(nil, x.error)
|
data/test/tc_stream.rb
CHANGED
@@ -1,36 +1,27 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
2
|
|
3
3
|
$:.unshift '../lib'
|
4
|
+
$:.unshift './lib/'
|
4
5
|
|
5
6
|
require 'tempfile'
|
6
7
|
require 'test/unit'
|
7
8
|
require 'socket'
|
8
9
|
require 'xmpp4r/stream'
|
9
10
|
require 'xmpp4r/semaphore'
|
11
|
+
require 'clienttester'
|
10
12
|
include Jabber
|
11
13
|
|
14
|
+
# Jabber::debug = true
|
15
|
+
|
12
16
|
class StreamTest < Test::Unit::TestCase
|
13
|
-
|
14
|
-
|
15
|
-
def
|
16
|
-
@tmpfile = Tempfile.new("StreamSendTest")
|
17
|
-
@tmpfilepath = @tmpfile.path()
|
18
|
-
@tmpfile.unlink
|
19
|
-
@servlisten = UNIXServer.new(@tmpfilepath)
|
20
|
-
thServer = Thread.new { @server = @servlisten.accept }
|
21
|
-
@iostream = UNIXSocket.new(@tmpfilepath)
|
17
|
+
include ClientTester
|
18
|
+
|
19
|
+
def busywait(&block)
|
22
20
|
n = 0
|
23
|
-
while not
|
24
|
-
|
21
|
+
while not block.yield and n < 1000
|
22
|
+
Thread::pass
|
25
23
|
n += 1
|
26
24
|
end
|
27
|
-
@stream = Stream.new
|
28
|
-
@stream.start(@iostream)
|
29
|
-
end
|
30
|
-
|
31
|
-
def teardown
|
32
|
-
@stream.close
|
33
|
-
@server.close
|
34
25
|
end
|
35
26
|
|
36
27
|
##
|
@@ -38,50 +29,43 @@ class StreamTest < Test::Unit::TestCase
|
|
38
29
|
# stanzas to filters
|
39
30
|
def test_process
|
40
31
|
called = false
|
41
|
-
@
|
32
|
+
@client.add_xml_callback { called = true }
|
42
33
|
assert(!called)
|
43
|
-
@server.
|
44
|
-
|
34
|
+
@server.send('<iq/>')
|
35
|
+
busywait { called }
|
45
36
|
assert(called)
|
46
37
|
end
|
47
38
|
|
48
|
-
def
|
49
|
-
@server.puts(STREAM)
|
50
|
-
@server.flush
|
51
|
-
|
39
|
+
def test_process20
|
52
40
|
done = Semaphore.new
|
53
41
|
n = 0
|
54
|
-
@
|
42
|
+
@client.add_message_callback {
|
55
43
|
n += 1
|
56
|
-
done.run if n %
|
44
|
+
done.run if n % 20 == 0
|
57
45
|
}
|
58
46
|
|
59
|
-
|
60
|
-
@server.
|
61
|
-
@server.flush
|
47
|
+
20.times {
|
48
|
+
@server.send('<message/>')
|
62
49
|
}
|
63
50
|
|
64
51
|
done.wait
|
65
|
-
assert_equal(
|
52
|
+
assert_equal(20, n)
|
66
53
|
|
67
|
-
@server.
|
68
|
-
@server.flush
|
54
|
+
@server.send('<message/>' * 20)
|
69
55
|
|
70
56
|
done.wait
|
71
|
-
assert_equal(
|
57
|
+
assert_equal(40, n)
|
72
58
|
end
|
73
59
|
|
74
60
|
def test_send
|
75
|
-
|
76
|
-
@server.
|
77
|
-
|
78
|
-
|
79
|
-
assert_equal(Iq.new(:get).delete_namespace.to_s, @server.gets('>'))
|
80
|
-
@stream.receive(Iq.new(:result))
|
61
|
+
sem = Semaphore::new
|
62
|
+
@server.add_xml_callback { |e|
|
63
|
+
@server.send(Iq.new(:result))
|
64
|
+
sem.run
|
81
65
|
}
|
82
66
|
|
83
67
|
called = 0
|
84
|
-
@
|
68
|
+
@client.send(Iq.new(:get)) { |reply|
|
85
69
|
called += 1
|
86
70
|
if reply.kind_of? Iq and reply.type == :result
|
87
71
|
true
|
@@ -89,45 +73,44 @@ class StreamTest < Test::Unit::TestCase
|
|
89
73
|
false
|
90
74
|
end
|
91
75
|
}
|
92
|
-
|
76
|
+
sem.wait
|
77
|
+
busywait { called }
|
93
78
|
assert_equal(1, called)
|
94
79
|
end
|
95
80
|
|
96
81
|
def test_send_nested
|
97
|
-
@server.puts(STREAM)
|
98
|
-
@server.flush
|
99
82
|
finished = Semaphore.new
|
100
83
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
84
|
+
id = 0
|
85
|
+
@server.add_xml_callback do |e|
|
86
|
+
id += 1
|
87
|
+
if id == 1
|
88
|
+
@server.send(Iq.new(:result).set_id('1').delete_namespace)
|
89
|
+
elsif id == 2
|
90
|
+
@server.send(Iq.new(:result).set_id('2').delete_namespace)
|
91
|
+
elsif id == 3
|
92
|
+
@server.send(Iq.new(:result).set_id('3').delete_namespace)
|
93
|
+
else
|
94
|
+
p e
|
95
|
+
end
|
96
|
+
end
|
114
97
|
|
115
98
|
called_outer = 0
|
116
99
|
called_inner = 0
|
117
100
|
|
118
|
-
@
|
101
|
+
@client.send(Iq.new(:get)) do |reply|
|
119
102
|
called_outer += 1
|
120
103
|
assert_kind_of(Iq, reply)
|
121
104
|
assert_equal(:result, reply.type)
|
122
105
|
|
123
106
|
if reply.id == '1'
|
124
|
-
@
|
107
|
+
@client.send(Iq.new(:set)) do |reply2|
|
125
108
|
called_inner += 1
|
126
109
|
assert_kind_of(Iq, reply2)
|
127
110
|
assert_equal(:result, reply2.type)
|
128
111
|
assert_equal('2', reply2.id)
|
129
112
|
|
130
|
-
@
|
113
|
+
@client.send(Iq.new(:get))
|
131
114
|
|
132
115
|
true
|
133
116
|
end
|
@@ -141,89 +124,44 @@ class StreamTest < Test::Unit::TestCase
|
|
141
124
|
|
142
125
|
assert_equal(2, called_outer)
|
143
126
|
assert_equal(1, called_inner)
|
144
|
-
|
145
|
-
finished.wait
|
146
127
|
end
|
147
128
|
|
148
129
|
def test_send_in_callback
|
149
|
-
@server.puts(STREAM)
|
150
|
-
@server.flush
|
151
130
|
finished = Semaphore.new
|
152
131
|
|
153
|
-
@
|
154
|
-
@
|
132
|
+
@client.add_message_callback {
|
133
|
+
@client.send_with_id(Iq.new(:get)) { |reply|
|
155
134
|
assert_equal(:result, reply.type)
|
135
|
+
finished.run
|
156
136
|
}
|
157
137
|
}
|
158
138
|
|
159
|
-
|
160
|
-
@server.
|
161
|
-
@server.puts(Iq.new(:result))
|
162
|
-
finished.run
|
163
|
-
}
|
164
|
-
|
165
|
-
@server.puts(Message.new)
|
166
|
-
finished.wait
|
167
|
-
end
|
168
|
-
|
169
|
-
def test_bidi
|
170
|
-
@server.puts(STREAM)
|
171
|
-
@server.flush
|
172
|
-
finished = Semaphore.new
|
173
|
-
ok = true
|
174
|
-
n = 100
|
175
|
-
|
176
|
-
Thread.new {
|
177
|
-
n.times { |i|
|
178
|
-
ok &&= (Iq.new(:get).set_id(i).delete_namespace.to_s == @server.gets('>'))
|
179
|
-
@server.puts(Iq.new(:result).set_id(i).to_s)
|
180
|
-
@server.flush
|
181
|
-
}
|
182
|
-
|
183
|
-
finished.run
|
184
|
-
}
|
185
|
-
|
186
|
-
n.times { |i|
|
187
|
-
@stream.send(Iq.new(:get).set_id(i)) { |reply|
|
188
|
-
ok &&= reply.kind_of? Iq
|
189
|
-
ok &&= (:result == reply.type)
|
190
|
-
ok &&= (i.to_s == reply.id)
|
191
|
-
true
|
192
|
-
}
|
139
|
+
@server.add_iq_callback { |iq|
|
140
|
+
@server.send(Iq.new(:result).set_id(iq.id))
|
193
141
|
}
|
194
142
|
|
143
|
+
@server.send(Message.new)
|
195
144
|
finished.wait
|
196
|
-
assert(ok)
|
197
145
|
end
|
198
146
|
|
199
147
|
def test_similar_children
|
200
|
-
delay = 0.1
|
201
148
|
n = 0
|
202
|
-
@
|
149
|
+
@client.add_message_callback { n += 1 }
|
203
150
|
assert_equal(0, n)
|
204
|
-
@server.
|
205
|
-
|
206
|
-
sleep delay
|
151
|
+
@server.send("<message/>")
|
152
|
+
busywait { n == 1 }
|
207
153
|
assert_equal(1, n)
|
208
|
-
@server.
|
209
|
-
@server.flush
|
210
|
-
sleep delay
|
154
|
+
@server.send('<message>')
|
211
155
|
assert_equal(1, n)
|
212
|
-
@server.
|
213
|
-
@server.flush
|
214
|
-
sleep delay
|
156
|
+
@server.send('<message/>')
|
215
157
|
assert_equal(1, n)
|
216
|
-
@server.
|
217
|
-
|
218
|
-
sleep delay
|
158
|
+
@server.send('</message>')
|
159
|
+
busywait { n == 2 }
|
219
160
|
assert_equal(2, n)
|
220
|
-
@server.
|
221
|
-
@server.flush
|
222
|
-
sleep delay
|
161
|
+
@server.send("<message><stream:stream><message/></stream:stream>")
|
223
162
|
assert_equal(2, n)
|
224
|
-
@server.
|
225
|
-
|
226
|
-
sleep delay
|
163
|
+
@server.send('</message>')
|
164
|
+
busywait { n == 3 }
|
227
165
|
assert_equal(3, n)
|
228
166
|
end
|
229
167
|
end
|