diff options
Diffstat (limited to 'functionaltests/test_chat_session.c')
-rw-r--r-- | functionaltests/test_chat_session.c | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/functionaltests/test_chat_session.c b/functionaltests/test_chat_session.c new file mode 100644 index 00000000..11df4e76 --- /dev/null +++ b/functionaltests/test_chat_session.c @@ -0,0 +1,264 @@ +#include <glib.h> +#include <stdarg.h> +#include <stddef.h> +#include <setjmp.h> +#include <cmocka.h> +#include <stdlib.h> +#include <string.h> + +#include <stabber.h> +#include <expect.h> + +#include "proftest.h" + +void +sends_message_to_barejid_when_contact_offline(void **state) +{ + stbbr_for_id("roster", + "<iq id=\"roster\" type=\"result\" to=\"stabber@localhost/profanity\">" + "<query xmlns=\"jabber:iq:roster\" ver=\"362\">" + "<item jid=\"buddy1@localhost\" subscription=\"both\"/>" + "</query>" + "</iq>" + ); + + prof_connect("stabber@localhost", "password"); + stbbr_wait_for("prof_presence_1"); + + prof_input("/msg buddy1@localhost Hi there"); + + assert_true(stbbr_received( + "<message id=\"*\" to=\"buddy1@localhost\" type=\"chat\">" + "<body>Hi there</body>" + "</message>" + )); +} + +void +sends_message_to_barejid_when_contact_online(void **state) +{ + stbbr_for_id("roster", + "<iq id=\"roster\" type=\"result\" to=\"stabber@localhost/profanity\">" + "<query xmlns=\"jabber:iq:roster\" ver=\"362\">" + "<item jid=\"buddy1@localhost\" subscription=\"both\"/>" + "</query>" + "</iq>" + ); + + prof_connect("stabber@localhost", "password"); + stbbr_wait_for("prof_presence_1"); + + stbbr_send( + "<presence to=\"stabber@localhost\" from=\"buddy1@localhost/mobile\">" + "<priority>10</priority>" + "</presence>" + ); + prof_output_exact("buddy1@localhost (mobile) is online"); + + prof_input("/msg buddy1@localhost Hi there"); + + assert_true(stbbr_received( + "<message id=\"*\" to=\"buddy1@localhost\" type=\"chat\">" + "<body>Hi there</body>" + "</message>" + )); +} + +void +sends_message_to_fulljid_when_received_from_fulljid(void **state) +{ + stbbr_for_id("roster", + "<iq id=\"roster\" type=\"result\" to=\"stabber@localhost/profanity\">" + "<query xmlns=\"jabber:iq:roster\" ver=\"362\">" + "<item jid=\"buddy1@localhost\" subscription=\"both\"/>" + "</query>" + "</iq>" + ); + + prof_connect("stabber@localhost", "password"); + stbbr_wait_for("prof_presence_1"); + + stbbr_send( + "<presence to=\"stabber@localhost\" from=\"buddy1@localhost/mobile\">" + "<priority>10</priority>" + "</presence>" + ); + prof_output_exact("buddy1@localhost (mobile) is online"); + + stbbr_send( + "<message id=\"message1\" to=\"stabber@localhost\" from=\"buddy1@localhost/mobile\" type=\"chat\">" + "<body>First message</body>" + "</message>" + ); + prof_output_exact("<< incoming from buddy1@localhost/mobile (2)"); + + prof_input("/msg buddy1@localhost Hi there"); + + assert_true(stbbr_received( + "<message id=\"*\" to=\"buddy1@localhost/mobile\" type=\"chat\">" + "<body>Hi there</body>" + "</message>" + )); +} + +void +sends_subsequent_messages_to_fulljid(void **state) +{ + stbbr_for_id("roster", + "<iq id=\"roster\" type=\"result\" to=\"stabber@localhost/profanity\">" + "<query xmlns=\"jabber:iq:roster\" ver=\"362\">" + "<item jid=\"buddy1@localhost\" subscription=\"both\"/>" + "</query>" + "</iq>" + ); + + prof_connect("stabber@localhost", "password"); + stbbr_wait_for("prof_presence_1"); + + stbbr_send( + "<presence to=\"stabber@localhost\" from=\"buddy1@localhost/mobile\">" + "<priority>10</priority>" + "</presence>" + ); + prof_output_exact("buddy1@localhost (mobile) is online"); + + stbbr_send( + "<message id=\"message1\" to=\"stabber@localhost\" from=\"buddy1@localhost/mobile\" type=\"chat\">" + "<body>First message</body>" + "</message>" + ); + prof_output_exact("<< incoming from buddy1@localhost/mobile (2)"); + + prof_input("/msg buddy1@localhost Outgoing 1"); + prof_input("/msg buddy1@localhost Outgoing 2"); + prof_input("/msg buddy1@localhost Outgoing 3"); + + assert_true(stbbr_received( + "<message id=\"*\" to=\"buddy1@localhost/mobile\" type=\"chat\">" + "<body>Outgoing 1</body>" + "</message>" + )); + assert_true(stbbr_received( + "<message id=\"*\" to=\"buddy1@localhost/mobile\" type=\"chat\">" + "<body>Outgoing 2</body>" + "</message>" + )); + assert_true(stbbr_received( + "<message id=\"*\" to=\"buddy1@localhost/mobile\" type=\"chat\">" + "<body>Outgoing 3</body>" + "</message>" + )); +} + +void +resets_to_barejid_after_presence_received(void **state) +{ + stbbr_for_id("roster", + "<iq id=\"roster\" type=\"result\" to=\"stabber@localhost/profanity\">" + "<query xmlns=\"jabber:iq:roster\" ver=\"362\">" + "<item jid=\"buddy1@localhost\" subscription=\"both\"/>" + "</query>" + "</iq>" + ); + + prof_connect("stabber@localhost", "password"); + stbbr_wait_for("prof_presence_1"); + + stbbr_send( + "<presence to=\"stabber@localhost\" from=\"buddy1@localhost/mobile\">" + "<priority>10</priority>" + "</presence>" + ); + prof_output_exact("buddy1@localhost (mobile) is online"); + + stbbr_send( + "<message id=\"message1\" to=\"stabber@localhost\" from=\"buddy1@localhost/mobile\" type=\"chat\">" + "<body>First message</body>" + "</message>" + ); + prof_output_exact("<< incoming from buddy1@localhost/mobile (2)"); + + prof_input("/msg buddy1@localhost Outgoing 1"); + + assert_true(stbbr_received( + "<message id=\"*\" to=\"buddy1@localhost/mobile\" type=\"chat\">" + "<body>Outgoing 1</body>" + "</message>" + )); + + stbbr_send( + "<presence to=\"stabber@localhost\" from=\"buddy1@localhost/laptop\">" + "<priority>5</priority>" + "<show>dnd</show>" + "</presence>" + ); + prof_output_exact("buddy1@localhost (laptop) is dnd"); + + prof_input("/msg buddy1@localhost Outgoing 2"); + + assert_true(stbbr_received( + "<message id=\"*\" to=\"buddy1@localhost\" type=\"chat\">" + "<body>Outgoing 2</body>" + "</message>" + )); +} + +void +new_session_when_message_received_from_different_fulljid(void **state) +{ + stbbr_for_id("roster", + "<iq id=\"roster\" type=\"result\" to=\"stabber@localhost/profanity\">" + "<query xmlns=\"jabber:iq:roster\" ver=\"362\">" + "<item jid=\"buddy1@localhost\" subscription=\"both\"/>" + "</query>" + "</iq>" + ); + + prof_connect("stabber@localhost", "password"); + stbbr_wait_for("prof_presence_1"); + + stbbr_send( + "<presence to=\"stabber@localhost\" from=\"buddy1@localhost/mobile\">" + "<priority>10</priority>" + "</presence>" + ); + prof_output_exact("buddy1@localhost (mobile) is online"); + + stbbr_send( + "<presence to=\"stabber@localhost\" from=\"buddy1@localhost/laptop\">" + "<priority>8</priority>" + "<show>away</show>" + "</presence>" + ); + prof_output_exact("buddy1@localhost (laptop) is away"); + + stbbr_send( + "<message id=\"message1\" to=\"stabber@localhost\" from=\"buddy1@localhost/mobile\" type=\"chat\">" + "<body>From first resource</body>" + "</message>" + ); + prof_output_exact("<< incoming from buddy1@localhost/mobile (2)"); + + prof_input("/msg buddy1@localhost Outgoing 1"); + + assert_true(stbbr_received( + "<message id=\"*\" to=\"buddy1@localhost/mobile\" type=\"chat\">" + "<body>Outgoing 1</body>" + "</message>" + )); + + stbbr_send( + "<message id=\"message1\" to=\"stabber@localhost\" from=\"buddy1@localhost/laptop\" type=\"chat\">" + "<body>From second resource</body>" + "</message>" + ); + prof_output_regex("buddy1@localhost/laptop:.+From second resource"); + + prof_input("/msg buddy1@localhost Outgoing 2"); + + assert_true(stbbr_received( + "<message id=\"*\" to=\"buddy1@localhost/laptop\" type=\"chat\">" + "<body>Outgoing 2</body>" + "</message>" + )); +} |