diff options
author | James Booth <boothj5@gmail.com> | 2015-06-06 01:02:27 +0100 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2015-06-06 01:02:27 +0100 |
commit | c6ff761a95da09b53b3dd385ead93f55ca2fb3f2 (patch) | |
tree | c69654c855042dc536827c35bab970338b2e7b63 | |
parent | ae4e07ad87968072893b58c2ee778b52fc3059da (diff) | |
download | profani-tty-c6ff761a95da09b53b3dd385ead93f55ca2fb3f2.tar.gz |
Added chat session functional tests
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | functionaltests/functionaltests.c | 22 | ||||
-rw-r--r-- | functionaltests/test_chat_session.c | 264 | ||||
-rw-r--r-- | functionaltests/test_chat_session.h | 7 |
4 files changed, 293 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am index 5656ce24..c566b675 100644 --- a/Makefile.am +++ b/Makefile.am @@ -101,6 +101,7 @@ functionaltest_sources = \ functionaltests/test_rooms.c functionaltests/test_rooms.h \ functionaltests/test_presence.c functionaltests/test_presence.h \ functionaltests/test_message.c functionaltests/test_message.h \ + functionaltests/test_chat_session.c functionaltests/test_chat_session.h \ functionaltests/functionaltests.c main_source = src/main.c diff --git a/functionaltests/functionaltests.c b/functionaltests/functionaltests.c index cb110469..a1550842 100644 --- a/functionaltests/functionaltests.c +++ b/functionaltests/functionaltests.c @@ -15,6 +15,7 @@ #include "test_rooms.h" #include "test_presence.h" #include "test_message.h" +#include "test_chat_session.h" int main(int argc, char* argv[]) { @@ -95,7 +96,26 @@ int main(int argc, char* argv[]) { close_prof_test), unit_test_setup_teardown(message_receive, init_prof_test, - close_prof_test) + close_prof_test), + + unit_test_setup_teardown(sends_message_to_barejid_when_contact_offline, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(sends_message_to_barejid_when_contact_online, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(sends_message_to_fulljid_when_received_from_fulljid, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(sends_subsequent_messages_to_fulljid, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(resets_to_barejid_after_presence_received, + init_prof_test, + close_prof_test), + unit_test_setup_teardown(new_session_when_message_received_from_different_fulljid, + init_prof_test, + close_prof_test), }; return run_tests(all_tests); 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>" + )); +} diff --git a/functionaltests/test_chat_session.h b/functionaltests/test_chat_session.h new file mode 100644 index 00000000..2ba75e05 --- /dev/null +++ b/functionaltests/test_chat_session.h @@ -0,0 +1,7 @@ +void sends_message_to_barejid_when_contact_offline(void **state); +void sends_message_to_barejid_when_contact_online(void **state); +void sends_message_to_fulljid_when_received_from_fulljid(void **state); +void sends_subsequent_messages_to_fulljid(void **state); +void resets_to_barejid_after_presence_received(void **state); +void new_session_when_message_received_from_different_fulljid(void **state); + |