diff options
author | James Booth <boothj5@gmail.com> | 2015-07-22 22:48:37 +0100 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2015-07-22 22:48:37 +0100 |
commit | f9a7e35001107dcbd3e03f24833478cf869caf5a (patch) | |
tree | e3b0db8eaf8c93a9289c2c0100585028e67976bb | |
parent | fceec61a2c5cc323b4f7c1a8b4ffbe01b458c781 (diff) | |
download | profani-tty-f9a7e35001107dcbd3e03f24833478cf869caf5a.tar.gz |
Added id attributes to roster queries
fixes #596
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | src/xmpp/roster.c | 11 | ||||
-rw-r--r-- | src/xmpp/stanza.c | 4 | ||||
-rw-r--r-- | tests/functionaltests/functionaltests.c | 6 | ||||
-rw-r--r-- | tests/functionaltests/proftest.c | 25 | ||||
-rw-r--r-- | tests/functionaltests/proftest.h | 1 | ||||
-rw-r--r-- | tests/functionaltests/test_roster.c | 121 | ||||
-rw-r--r-- | tests/functionaltests/test_roster.h | 4 |
8 files changed, 160 insertions, 13 deletions
diff --git a/Makefile.am b/Makefile.am index 87bc1502..6fba8900 100644 --- a/Makefile.am +++ b/Makefile.am @@ -103,6 +103,7 @@ functionaltest_sources = \ tests/functionaltests/test_chat_session.c tests/functionaltests/test_chat_session.h \ tests/functionaltests/test_carbons.c tests/functionaltests/test_carbons.h \ tests/functionaltests/test_receipts.c tests/functionaltests/test_receipts.h \ + tests/functionaltests/test_roster.c tests/functionaltests/test_roster.h \ tests/functionaltests/functionaltests.c main_source = src/main.c diff --git a/src/xmpp/roster.c b/src/xmpp/roster.c index 5c9fa5d4..84a88d62 100644 --- a/src/xmpp/roster.c +++ b/src/xmpp/roster.c @@ -102,7 +102,9 @@ roster_send_add_new(const char * const barejid, const char * const name) { xmpp_conn_t * const conn = connection_get_conn(); xmpp_ctx_t * const ctx = connection_get_ctx(); - xmpp_stanza_t *iq = stanza_create_roster_set(ctx, NULL, barejid, name, NULL); + char *id = create_unique_id("roster"); + xmpp_stanza_t *iq = stanza_create_roster_set(ctx, id, barejid, name, NULL); + free(id); xmpp_send(conn, iq); xmpp_stanza_release(iq); } @@ -122,8 +124,9 @@ roster_send_name_change(const char * const barejid, const char * const new_name, { xmpp_conn_t * const conn = connection_get_conn(); xmpp_ctx_t * const ctx = connection_get_ctx(); - xmpp_stanza_t *iq = stanza_create_roster_set(ctx, NULL, barejid, new_name, - groups); + char *id = create_unique_id("roster"); + xmpp_stanza_t *iq = stanza_create_roster_set(ctx, id, barejid, new_name, groups); + free(id); xmpp_send(conn, iq); xmpp_stanza_release(iq); } @@ -354,4 +357,4 @@ _get_groups_from_item(xmpp_stanza_t *item) } return groups; -} \ No newline at end of file +} diff --git a/src/xmpp/stanza.c b/src/xmpp/stanza.c index ed188a3b..be85c330 100644 --- a/src/xmpp/stanza.c +++ b/src/xmpp/stanza.c @@ -373,6 +373,10 @@ stanza_create_roster_remove_set(xmpp_ctx_t *ctx, const char * const barejid) xmpp_stanza_set_name(iq, STANZA_NAME_IQ); xmpp_stanza_set_type(iq, STANZA_TYPE_SET); + char *id = create_unique_id("roster"); + xmpp_stanza_set_id(iq, id); + free(id); + xmpp_stanza_t *query = xmpp_stanza_new(ctx); xmpp_stanza_set_name(query, STANZA_NAME_QUERY); xmpp_stanza_set_ns(query, XMPP_NS_ROSTER); diff --git a/tests/functionaltests/functionaltests.c b/tests/functionaltests/functionaltests.c index f244b95a..6eb57589 100644 --- a/tests/functionaltests/functionaltests.c +++ b/tests/functionaltests/functionaltests.c @@ -18,6 +18,7 @@ #include "test_carbons.h" #include "test_chat_session.h" #include "test_receipts.h" +#include "test_roster.h" #define PROF_FUNC_TEST(test) unit_test_setup_teardown(test, init_prof_test, close_prof_test) @@ -68,6 +69,11 @@ int main(int argc, char* argv[]) { PROF_FUNC_TEST(send_receipt_request), PROF_FUNC_TEST(send_receipt_on_request), + + PROF_FUNC_TEST(sends_new_item), + PROF_FUNC_TEST(sends_new_item_nick), + PROF_FUNC_TEST(sends_remove_item), + PROF_FUNC_TEST(sends_nick_change), }; return run_tests(all_tests); diff --git a/tests/functionaltests/proftest.c b/tests/functionaltests/proftest.c index 4f641821..403e47d7 100644 --- a/tests/functionaltests/proftest.c +++ b/tests/functionaltests/proftest.c @@ -210,16 +210,10 @@ prof_output_regex(char *text) } void -prof_connect(void) +prof_connect_with_roster(char *roster) { - stbbr_for_query("jabber:iq:roster", - "<iq type=\"result\" to=\"stabber@localhost/profanity\">" - "<query xmlns=\"jabber:iq:roster\" ver=\"362\">" - "<item jid=\"buddy1@localhost\" subscription=\"both\" name=\"Buddy1\"/>" - "<item jid=\"buddy2@localhost\" subscription=\"both\" name=\"Buddy2\"/>" - "</query>" - "</iq>" - ); + stbbr_for_query("jabber:iq:roster", roster); + stbbr_for_id("prof_presence_1", "<presence id=\"prof_presence_1\" lang=\"en\" to=\"stabber@localhost/profanity\" from=\"stabber@localhost/profanity\">" "<priority>0</priority>" @@ -236,3 +230,16 @@ prof_connect(void) exp_timeout = 10; stbbr_wait_for("prof_presence_*"); } + +void +prof_connect(void) +{ + prof_connect_with_roster( + "<iq type=\"result\" to=\"stabber@localhost/profanity\">" + "<query xmlns=\"jabber:iq:roster\" ver=\"362\">" + "<item jid=\"buddy1@localhost\" subscription=\"both\" name=\"Buddy1\"/>" + "<item jid=\"buddy2@localhost\" subscription=\"both\" name=\"Buddy2\"/>" + "</query>" + "</iq>" + ); +} diff --git a/tests/functionaltests/proftest.h b/tests/functionaltests/proftest.h index 2283ab01..547b2c11 100644 --- a/tests/functionaltests/proftest.h +++ b/tests/functionaltests/proftest.h @@ -9,6 +9,7 @@ void close_prof_test(void **state); void prof_start(void); void prof_connect(void); +void prof_connect_with_roster(char *roster); void prof_input(char *input); int prof_output_exact(char *text); diff --git a/tests/functionaltests/test_roster.c b/tests/functionaltests/test_roster.c new file mode 100644 index 00000000..ba1c851a --- /dev/null +++ b/tests/functionaltests/test_roster.c @@ -0,0 +1,121 @@ +#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_new_item(void **state) +{ + prof_connect(); + + stbbr_for_query("jabber:iq:roster", + "<iq type=\"set\" from=\"stabber@localhost\">" + "<query xmlns=\"jabber:iq:roster\">" + "<item jid=\"bob@localhost\" subscription=\"none\" name=\"\"/>" + "</query>" + "</iq>" + ); + + prof_input("/roster add bob@localhost"); + + assert_true(stbbr_received( + "<iq type=\"set\" id=\"*\">" + "<query xmlns=\"jabber:iq:roster\">" + "<item jid=\"bob@localhost\" name=\"\"/>" + "</query>" + "</iq>" + )); + + assert_true(prof_output_exact("Roster item added: bob@localhost")); +} + +void +sends_new_item_nick(void **state) +{ + prof_connect(); + + stbbr_for_query("jabber:iq:roster", + "<iq type=\"set\" from=\"stabber@localhost\">" + "<query xmlns=\"jabber:iq:roster\">" + "<item jid=\"bob@localhost\" subscription=\"none\" name=\"Bobby\"/>" + "</query>" + "</iq>" + ); + + prof_input("/roster add bob@localhost Bobby"); + + assert_true(stbbr_received( + "<iq type=\"set\" id=\"*\">" + "<query xmlns=\"jabber:iq:roster\">" + "<item jid=\"bob@localhost\" name=\"Bobby\"/>" + "</query>" + "</iq>" + )); + + assert_true(prof_output_exact("Roster item added: bob@localhost (Bobby)")); +} + +void +sends_remove_item(void **state) +{ + prof_connect_with_roster( + "<iq type=\"result\" to=\"stabber@localhost/profanity\">" + "<query xmlns=\"jabber:iq:roster\" ver=\"362\">" + "<item jid=\"buddy1@localhost\" subscription=\"both\"/>" + "<item jid=\"buddy2@localhost\" subscription=\"both\"/>" + "</query>" + "</iq>" + ); + + stbbr_for_query("jabber:iq:roster", + "<iq id=\"*\" type=\"set\">" + "<query xmlns=\"jabber:iq:roster\">" + "<item jid=\"buddy1@localhost\" subscription=\"remove\"/>" + "</query>" + "</iq>" + ); + + prof_input("/roster remove buddy1@localhost"); + + assert_true(stbbr_received( + "<iq type=\"set\" id=\"*\">" + "<query xmlns=\"jabber:iq:roster\">" + "<item jid=\"buddy1@localhost\" subscription=\"remove\"/>" + "</query>" + "</iq>" + )); + + assert_true(prof_output_exact("Roster item removed: buddy1@localhost")); +} + +void +sends_nick_change(void **state) +{ + prof_connect_with_roster( + "<iq type=\"result\" to=\"stabber@localhost/profanity\">" + "<query xmlns=\"jabber:iq:roster\" ver=\"362\">" + "<item jid=\"buddy1@localhost\" subscription=\"both\"/>" + "</query>" + "</iq>" + ); + + prof_input("/roster nick buddy1@localhost Buddy1"); + + assert_true(prof_output_exact("Nickname for buddy1@localhost set to: Buddy1.")); + + assert_true(stbbr_received( + "<iq type=\"set\" id=\"*\">" + "<query xmlns=\"jabber:iq:roster\">" + "<item jid=\"buddy1@localhost\" name=\"Buddy1\"/>" + "</query>" + "</iq>" + )); +} diff --git a/tests/functionaltests/test_roster.h b/tests/functionaltests/test_roster.h new file mode 100644 index 00000000..9b34e82a --- /dev/null +++ b/tests/functionaltests/test_roster.h @@ -0,0 +1,4 @@ +void sends_new_item(void **state); +void sends_new_item_nick(void **state); +void sends_remove_item(void **state); +void sends_nick_change(void **state); |