test/muc/tc_muc_mucclient.rb in xmpp4r-0.3.1 vs test/muc/tc_muc_mucclient.rb in xmpp4r-0.3.2
- old
+ new
@@ -4,10 +4,11 @@
$:.unshift File::dirname(__FILE__) + '/../../lib'
require 'test/unit'
require File::dirname(__FILE__) + '/../lib/clienttester'
require 'xmpp4r/muc'
+require 'xmpp4r/semaphore'
include Jabber
class MUCClientTest < Test::Unit::TestCase
include ClientTester
@@ -52,14 +53,16 @@
assert_nil(m.room)
assert_raises(ErrorException) {
m.join('darkcave@macbeth.shakespeare.lit/thirdwitch')
}
+ wait_state
assert(!m.active?)
assert_nil(m.room)
assert_equal(m, m.join('darkcave@macbeth.shakespeare.lit/thirdwitch'))
+ wait_state
assert(m.active?)
assert_equal('darkcave', m.room)
assert_equal(3, m.roster.size)
m.roster.each { |resource,pres|
assert_equal(resource, pres.from.resource)
@@ -102,19 +105,21 @@
assert_equal('cauldron', pres.x.password)
send("<presence from='darkcave@macbeth.shakespeare.lit/thirdwitch' to='hag66@shakespeare.lit/pda'>" +
"<x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='member' role='participant'/></x>" +
"</presence>")
}
-
+
m = MUC::MUCClient.new(@client)
m.my_jid = 'hag66@shakespeare.lit/pda'
assert_raises(ErrorException) {
m.join('darkcave@macbeth.shakespeare.lit/thirdwitch')
}
+ wait_state
assert(!m.active?)
assert_equal(m, m.join('darkcave@macbeth.shakespeare.lit/thirdwitch', 'cauldron'))
+ wait_state
assert(m.active?)
end
def test_members_only_room
state { |pres|
@@ -128,10 +133,12 @@
m.my_jid = 'hag66@shakespeare.lit/pda'
assert_raises(ErrorException) {
m.join('darkcave@macbeth.shakespeare.lit/thirdwitch')
}
assert(!m.active?)
+
+ wait_state
end
def test_banned_users
state { |pres|
assert_kind_of(Presence, pres)
@@ -144,10 +151,12 @@
m.my_jid = 'hag66@shakespeare.lit/pda'
assert_raises(ErrorException) {
m.join('darkcave@macbeth.shakespeare.lit/thirdwitch')
}
assert(!m.active?)
+
+ wait_state
end
def test_nickname_conflict
state { |pres|
assert_kind_of(Presence, pres)
@@ -160,10 +169,12 @@
m.my_jid = 'hag66@shakespeare.lit/pda'
assert_raises(ErrorException) {
m.join('darkcave@macbeth.shakespeare.lit/thirdwitch')
}
assert(!m.active?)
+
+ wait_state
end
def test_max_users
state { |pres|
assert_kind_of(Presence, pres)
@@ -176,15 +187,16 @@
m.my_jid = 'hag66@shakespeare.lit/pda'
assert_raises(ErrorException) {
m.join('darkcave@macbeth.shakespeare.lit/thirdwitch')
}
assert(!m.active?)
+
+ wait_state
end
def test_locked_room
state { |pres|
- assert_kind_of(Presence, pres)
send("<presence from='darkcave@macbeth.shakespeare.lit' to='hag66@shakespeare.lit/pda' type='error'>" +
"<error code='404' type='cancel'><item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error>" +
"</presence>")
}
@@ -192,10 +204,11 @@
m.my_jid = 'hag66@shakespeare.lit/pda'
assert_raises(ErrorException) {
m.join('darkcave@macbeth.shakespeare.lit/thirdwitch')
}
assert(!m.active?)
+ wait_state
end
def test_exit_room
state { |pres|
assert_kind_of(Presence, pres)
@@ -219,19 +232,21 @@
ignored_stanzas = 0
@client.add_stanza_callback { |stanza|
ignored_stanzas += 1
}
-
+
m = MUC::MUCClient.new(@client)
m.my_jid = 'hag66@shakespeare.lit/pda'
assert_equal(0, ignored_stanzas)
assert_equal(m, m.join('darkcave@macbeth.shakespeare.lit/thirdwitch'))
+ wait_state
assert(m.active?)
assert_equal(0, ignored_stanzas)
assert_equal(m, m.exit)
+ wait_state
assert(!m.active?)
assert_equal(1, ignored_stanzas)
end
def test_custom_exit_message
@@ -249,18 +264,20 @@
assert_equal('gone where the goblins go', pres.status)
send("<presence from='darkcave@macbeth.shakespeare.lit/thirdwitch' to='hag66@shakespeare.lit/pda' type='unavailable'>" +
"<x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='member' role='none'/></x>" +
"</presence>")
}
-
+
m = MUC::MUCClient.new(@client)
m.my_jid = 'hag66@shakespeare.lit/pda'
assert_equal(m, m.join('darkcave@macbeth.shakespeare.lit/thirdwitch'))
assert(m.active?)
+ wait_state
assert_equal(m, m.exit('gone where the goblins go'))
assert(!m.active?)
+ wait_state
end
def test_joins
state { |pres|
assert_kind_of(Presence, pres)
@@ -302,29 +319,33 @@
}
m = MUC::MUCClient.new(@client)
m.my_jid = 'hag66@shakespeare.lit/pda'
assert_equal(m, m.join('darkcave@macbeth.shakespeare.lit/thirdwitch'))
+ wait_state
assert(m.active?)
assert_raises(RuntimeError) { m.join('darkcave@macbeth.shakespeare.lit/thirdwitch') }
assert_raises(RuntimeError) { m.join('darkcave@macbeth.shakespeare.lit/fourthwitch') }
assert(m.active?)
assert_equal(m, m.exit)
+ wait_state
assert(!m.active?)
assert_raises(RuntimeError) { m.exit }
assert(!m.active?)
assert_equal(m, m.join('darkcave@macbeth.shakespeare.lit/fourthwitch'))
+ wait_state
assert(m.active?)
assert_raises(RuntimeError) { m.join('darkcave@macbeth.shakespeare.lit/thirdwitch') }
assert_raises(RuntimeError) { m.join('darkcave@macbeth.shakespeare.lit/fourthwitch') }
assert(m.active?)
assert_equal(m, m.exit('Exiting one last time'))
+ wait_state
assert(!m.active?)
assert_raises(RuntimeError) { m.exit }
assert(!m.active?)
end
@@ -335,94 +356,94 @@
send("<presence from='darkcave@macbeth.shakespeare.lit/thirdwitch' to='hag66@shakespeare.lit/pda'>" +
"<x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='member' role='participant'/></x>" +
"</presence>")
}
- message_lock = Mutex.new
- message_lock.lock
+ message_lock = Semaphore.new
messages_client = 0
@client.add_message_callback { |msg|
messages_client += 1
- message_lock.unlock
+ message_lock.run
}
m = MUC::MUCClient.new(@client)
m.my_jid = 'hag66@shakespeare.lit/pda'
messages_muc = 0
m.add_message_callback { |msg|
messages_muc += 1
- message_lock.unlock
+ message_lock.run
}
messages_muc_private = 0
m.add_private_message_callback { |msg|
messages_muc_private += 1
- message_lock.unlock
+ message_lock.run
}
assert_equal(m, m.join('darkcave@macbeth.shakespeare.lit/thirdwitch', 'cauldron'))
assert(m.active?)
assert_equal(0, messages_client)
assert_equal(0, messages_muc)
assert_equal(0, messages_muc_private)
send("<message from='darkcave@macbeth.shakespeare.lit/firstwitch' to='hag66@shakespeare.lit/pda'><body>Hello</body></message>")
- message_lock.lock
+ message_lock.wait
assert_equal(0, messages_client)
assert_equal(1, messages_muc)
assert_equal(0, messages_muc_private)
send("<message from='user@domain/resource' to='hag66@shakespeare.lit/pda'><body>Hello</body></message>")
- message_lock.lock
+ message_lock.wait
assert_equal(1, messages_client)
assert_equal(1, messages_muc)
assert_equal(0, messages_muc_private)
send("<message type='chat' from='darkcave@macbeth.shakespeare.lit/firstwitch' to='hag66@shakespeare.lit/pda'><body>Hello</body></message>")
- message_lock.lock
+ message_lock.wait
assert_equal(1, messages_client)
assert_equal(1, messages_muc)
assert_equal(1, messages_muc_private)
- end
+ wait_state
+ end
+
def test_presence_callbacks
state { |pres|
assert_kind_of(Presence, pres)
assert_nil(pres.x.password)
send("<presence from='darkcave@macbeth.shakespeare.lit/thirdwitch' to='hag66@shakespeare.lit/pda'>" +
"<x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='member' role='participant'/></x>" +
"</presence>")
}
- presence_lock = Mutex.new
- presence_lock.lock
+ presence_lock = Semaphore.new
presences_client = 0
@client.add_presence_callback { |pres|
presences_client += 1
- presence_lock.unlock
+ presence_lock.run
}
m = MUC::MUCClient.new(@client)
m.my_jid = 'hag66@shakespeare.lit/pda'
presences_join = 0
m.add_join_callback { |pres|
presences_join += 1
- presence_lock.unlock
+ presence_lock.run
}
presences_leave = 0
m.add_leave_callback { |pres|
presences_leave += 1
- presence_lock.unlock
+ presence_lock.run
}
presences_muc = 0
m.add_presence_callback { |pres|
presences_muc += 1
- presence_lock.unlock
+ presence_lock.run
}
assert_equal(0, presences_client)
assert_equal(0, presences_join)
assert_equal(0, presences_leave)
@@ -437,40 +458,41 @@
assert_equal(0, presences_muc)
send("<presence from='darkcave@macbeth.shakespeare.lit/firstwitch' to='hag66@shakespeare.lit/pda'>" +
"<x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='member' role='participant'/></x>" +
"</presence>")
- presence_lock.lock
+ presence_lock.wait
assert_equal(0, presences_client)
assert_equal(1, presences_join)
assert_equal(0, presences_leave)
assert_equal(0, presences_muc)
send("<presence from='user@domain/resource' to='hag66@shakespeare.lit/pda'>" +
"<show>chat</show>" +
"</presence>")
- presence_lock.lock
+ presence_lock.wait
assert_equal(1, presences_client)
assert_equal(1, presences_join)
assert_equal(0, presences_leave)
assert_equal(0, presences_muc)
send("<presence from='darkcave@macbeth.shakespeare.lit/firstwitch' to='hag66@shakespeare.lit/pda'>" +
"<x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='member' role='participant'/></x>" +
"<show>away</show></presence>")
- presence_lock.lock
+ presence_lock.wait
assert_equal(1, presences_client)
assert_equal(1, presences_join)
assert_equal(0, presences_leave)
assert_equal(1, presences_muc)
send("<presence from='darkcave@macbeth.shakespeare.lit/firstwitch' to='hag66@shakespeare.lit/pda' type='unavailable'/>")
- presence_lock.lock
+ presence_lock.wait
assert_equal(1, presences_client)
assert_equal(1, presences_join)
assert_equal(1, presences_leave)
assert_equal(1, presences_muc)
+ wait_state
end
def test_send
state { |pres|
assert_kind_of(Presence, pres)
@@ -551,19 +573,22 @@
m = MUC::MUCClient.new(@client)
m.my_jid = 'hag66@shakespeare.lit/pda'
assert_equal(m, m.join('darkcave@macbeth.shakespeare.lit/thirdwitch'))
+ wait_state
assert(m.active?)
assert_equal('thirdwitch', m.nick)
assert_raises(ErrorException) {
m.nick = 'secondwitch'
}
+ wait_state
assert(m.active?)
assert_equal('thirdwitch', m.nick)
m.nick = 'oldhag'
+ wait_state
assert(m.active?)
assert_equal('oldhag', m.nick)
end
end