From da701069dc9b607ce2eee300519feb49b31901de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Mon, 8 May 2017 18:47:02 +0200 Subject: Little fix and cleanup in the channels list code --- src/bridge/bridge.cpp | 6 +++--- tests/end_to_end/__main__.py | 34 +++++++++++++++++++++++++++------- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/bridge/bridge.cpp b/src/bridge/bridge.cpp index e362822..11fd860 100644 --- a/src/bridge/bridge.cpp +++ b/src/bridge/bridge.cpp @@ -478,7 +478,7 @@ void Bridge::send_irc_nick_change(const Iid& iid, const std::string& new_nick, c void Bridge::send_irc_channel_list_request(const Iid& iid, const std::string& iq_id, const std::string& to_jid, ResultSetInfo rs_info) { - auto& list = channel_list_cache[iid.get_server()]; + auto& list = this->channel_list_cache[iid.get_server()]; // We fetch the list from the IRC server only if we have a complete // cached list that needs to be invalidated (that is, when the request @@ -501,7 +501,7 @@ void Bridge::send_irc_channel_list_request(const Iid& iid, const std::string& iq if (irc_hostname != iid.get_server()) return false; - auto& list = channel_list_cache[iid.get_server()]; + auto& list = this->channel_list_cache[iid.get_server()]; if (message.command == "263" || message.command == "RPL_TRYAGAIN" || message.command == "ERR_TOOMANYMATCHES" || message.command == "ERR_NOSUCHSERVER") @@ -579,7 +579,7 @@ bool Bridge::send_matching_channel_list(const ChannelList& channel_list, const R const std::string& id, const std::string& to_jid, const std::string& from) { auto begin = channel_list.channels.begin(); - auto end = channel_list.channels.begin(); + auto end = channel_list.channels.end(); if (channel_list.complete) { begin = std::find_if(channel_list.channels.begin(), channel_list.channels.end(), [this, &rs_info](const ListElement& element) diff --git a/tests/end_to_end/__main__.py b/tests/end_to_end/__main__.py index 17e099a..6657ae2 100644 --- a/tests/end_to_end/__main__.py +++ b/tests/end_to_end/__main__.py @@ -1938,21 +1938,27 @@ if __name__ == '__main__': partial(expect_stanza, "/presence"), partial(expect_stanza, "/message[@from='#coucou%{irc_server_one}'][@type='groupchat']/subject[not(text())]"), + # Ask for 0 item partial(send_stanza, "0"), + + # Get 0 item partial(expect_stanza, ( "/iq[@type='result']/disco_items:query", )), + # Ask for 2 (of 3) items We don’t have the count, + # because biboumi doesn’t have the complete list when + # it sends us the 2 items partial(send_stanza, "2"), partial(expect_stanza, ( "/iq[@type='result']/disco_items:query", "/iq/disco_items:query/disco_items:item[@jid='#bar%{irc_server_one}']", "/iq/disco_items:query/disco_items:item[@jid='#coucou%{irc_server_one}']", "/iq/disco_items:query/rsm:set/rsm:first[text()='#bar%{irc_server_one}'][@index='0']", - "/iq/disco_items:query/rsm:set/rsm:last[text()='#coucou%{irc_server_one}']", - "/iq/disco_items:query/rsm:set/rsm:count[text()='3']" + "/iq/disco_items:query/rsm:set/rsm:last[text()='#coucou%{irc_server_one}']" )), + # Ask for 12 (of 3) items. We get the whole list, and thus we have the count included. partial(send_stanza, "12"), partial(expect_stanza, ( "/iq[@type='result']/disco_items:query", @@ -1964,6 +1970,10 @@ if __name__ == '__main__': "/iq/disco_items:query/rsm:set/rsm:count[text()='3']" )), + # Ask for 1 item, AFTER the first item (so, + # the second). Since we don’t invalidate the cache + # with this request, we should have the count + # included. partial(send_stanza, "#bar%{irc_server_one}1"), partial(expect_stanza, ( "/iq[@type='result']/disco_items:query", @@ -1973,14 +1983,24 @@ if __name__ == '__main__': "/iq/disco_items:query/rsm:set/rsm:count[text()='3']" )), - partial(send_stanza, "#bar%{irc_server_one}1"), + # Ask for 1 item, AFTER the second item (so, + # the third). + partial(send_stanza, "#coucou%{irc_server_one}1"), partial(expect_stanza, ( "/iq[@type='result']/disco_items:query", - "/iq/disco_items:query/disco_items:item[@jid='#coucou%{irc_server_one}']", - "/iq/disco_items:query/rsm:set/rsm:first[text()='#coucou%{irc_server_one}'][@index='1']", - "/iq/disco_items:query/rsm:set/rsm:last[text()='#coucou%{irc_server_one}']", + "/iq/disco_items:query/disco_items:item[@jid='#foo%{irc_server_one}']", + "/iq/disco_items:query/rsm:set/rsm:first[text()='#foo%{irc_server_one}'][@index='2']", + "/iq/disco_items:query/rsm:set/rsm:last[text()='#foo%{irc_server_one}']", "/iq/disco_items:query/rsm:set/rsm:count[text()='3']" - )) + )), + + # Ask for 1 item, AFTER the third item (so, + # the fourth). Since it doesn't exist, we get 0 item + partial(send_stanza, "#foo%{irc_server_one}1"), + partial(expect_stanza, ( + "/iq[@type='result']/disco_items:query", + "/iq/disco_items:query/rsm:set/rsm:count[text()='3']" + )), ]), Scenario("complete_channel_list_with_pages_of_3", [ -- cgit v1.2.3