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