Skip to content

Commit

Permalink
moving stuff around
Browse files Browse the repository at this point in the history
git-svn-id: https://xmpp4r-simple.googlecode.com/svn/trunk@8 1e3c5029-9921-0410-9e82-436f4d538387
  • Loading branch information
romeda committed Nov 9, 2006
1 parent a863d45 commit e1c3105
Showing 1 changed file with 241 additions and 0 deletions.
241 changes: 241 additions & 0 deletions trunk/test/test_xmpp4r_simple.rb
@@ -0,0 +1,241 @@
# Jabber::Simple - An extremely easy-to-use Jabber client library.
# Copyright 2006 Blaine Cook <blaine@obvious.com>, Obvious Corp.
#
# Jabber::Simple is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# Jabber::Simple is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Jabber::Simple; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
$:.unshift "#{File.dirname(__FILE__)}/../lib"

require 'test/unit'
require 'timeout'
require 'xmpp4r-simple'

class JabberSimpleTest < Test::Unit::TestCase

def setup
@@connections ||= {}

if @@connections.include?(:client1)
@client1 = @@connections[:client1]
@client2 = @@connections[:client2]
@client1.accept_subscriptions = true
@client2.accept_subscriptions = true
@jid1_raw = @@connections[:jid1_raw]
@jid2_raw = @@connections[:jid2_raw]
@jid1 = @jid1_raw.strip.to_s
@jid2 = @jid2_raw.strip.to_s
return true
end

logins = []
begin
logins = File.readlines(File.expand_path("~/.xmpp4r-simple-test-config")).map! { |login| login.split(" ") }
raise StandardError unless logins.size == 2
rescue => e
puts "\nConfiguration Error!\n\nYou must make available two unique Jabber accounts in order for the tests to pass."
puts "Place them in ~/.xmpp4r-simple-test-config, one per line like so:\n\n"
puts "user1@example.com/res password"
puts "user2@example.com/res password\n\n"
raise e
end

@@connections[:client1] = Jabber::Simple.new(*logins[0])
@@connections[:client2] = Jabber::Simple.new(*logins[1])

@@connections[:jid1_raw] = Jabber::JID.new(logins[0][0])
@@connections[:jid2_raw] = Jabber::JID.new(logins[1][0])

# Force load the client and roster, just to be safe.
@@connections[:client1].roster
@@connections[:client2].roster

# Re-run this method to setup the local instance variables the first time.
setup
end

def test_ensure_the_jabber_clients_are_connected_after_setup
assert @client1.client.is_connected?
assert @client2.client.is_connected?
end

def test_inspect_should_be_custom
assert_equal "Jabber::Simple #{@jid1_raw}", @client1.inspect
end

def test_inspect_contact_should_be_custom
assert_equal "Jabber::Contact #{@jid2}", @client1.contacts(@jid2).inspect
end

def test_remove_users_from_our_roster_should_succeed
@client2.remove(@jid1)
@client1.remove(@jid2)

sleep 3

assert_equal false, @client1.subscribed_to?(@jid2)
assert_equal false, @client2.subscribed_to?(@jid1)
end

def test_add_users_to_our_roster_should_succeed_with_automatic_approval
@client1.remove(@jid2)
@client2.remove(@jid1)

assert_before 60 do
assert_equal false, @client1.subscribed_to?(@jid2)
assert_equal false, @client2.subscribed_to?(@jid1)
end

@client1.new_subscriptions
@client1.add(@jid2)

assert_before 60 do
assert @client1.subscribed_to?(@jid2)
assert @client2.subscribed_to?(@jid1)
end

new_subscriptions = @client1.new_subscriptions
assert_equal 1, new_subscriptions.size
assert_equal @jid2, new_subscriptions[0][0].jid.strip.to_s
end

def test_sent_message_should_be_received
# First clear the client's message queue, just in case.
assert_kind_of Array, @client2.received_messages

# Next ensure that we're not subscribed, so that we can test the deferred message queue.
@client1.remove(@jid2)
@client2.remove(@jid1)
sleep 2

# Deliver the messages; this should be received by the other client.
@client1.deliver(@jid2, "test message")

sleep 2

# Fetch the message; allow up to ten seconds for the delivery to occur.
messages = []
begin
Timeout::timeout(20) {
loop do
messages = @client2.received_messages
break unless messages.empty?
sleep 1
end
}
rescue Timeout::Error
flunk "Timeout waiting for message"
end

# Ensure that the message was received intact.
assert_equal @jid1, messages.first.from.strip.to_s
assert_equal "test message", messages.first.body
end

def test_presence_updates_should_be_received

@client2.add(@client1)

assert_before(60) { assert @client2.subscribed_to?(@jid1) }
assert_before(60) { assert_equal 0, @client2.presence_updates.size }

@client1.status(:away, "Doing something else.")

new_statuses = []
assert_before(60) do
new_statuses = @client2.presence_updates
assert_equal 1, new_statuses.size
end

new_status = new_statuses.first
assert_equal @jid1, new_status[0].jid.strip.to_s
assert_equal "Doing something else.", new_status[2].status
assert_equal :away, new_status[2].show
end

def test_disable_auto_accept_subscription_requests
@client1.remove(@jid2)
@client2.remove(@jid1)

assert_before(60) do
assert_equal false, @client1.subscribed_to?(@jid2)
assert_equal false, @client2.subscribed_to?(@jid1)
end

@client1.accept_subscriptions = false
assert_equal false, @client1.accept_subscriptions?

assert_before(60) { assert_equal 0, @client1.subscription_requests.size }

@client2.add(@jid1)

new_subscription_requests = []
assert_before(60) do
new_subscription_requests = @client1.subscription_requests
assert_equal 1, new_subscription_requests.size
end

new_subscription = new_subscription_requests.first
assert_equal @jid2, new_subscription[0].jid.strip.to_s
assert_equal :subscribe, new_subscription[1].type
end

def test_automatically_reconnect
@client1.client.close

assert_before 60 do
assert_equal false, @client1.connected?
end

# empty client 2's received message queue.
@client2.received_messages

@client1.deliver(@jid2, "Testing")

assert_before(60) { assert @client1.connected? }
assert @client1.roster.instance_variable_get('@stream').is_connected?
assert_before(60) { assert_equal 1, @client2.received_messages.size }
end

def test_disconnect_doesnt_allow_auto_reconnects
@client1.disconnect

assert_equal false, @client1.connected?

assert_raises Jabber::ConnectionError do
@client1.deliver(@jid2, "testing")
end

@client1.reconnect
end

private

def assert_before(seconds, &block)
error = nil
begin
Timeout::timeout(seconds) {
begin
yield
rescue => e
error = e
sleep 0.5
retry
end
}
rescue Timeout::Error
raise error
end
end

end

0 comments on commit e1c3105

Please sign in to comment.