aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2013-09-24 18:40:32 +1000
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2013-09-24 18:59:20 +1000
commit07c8bf50640f6cdee74517c6c17fdded698d1fb3 (patch)
tree63d5965317e8dc9154160f8a2870c195d200edae
parentBetter web-handlers detection (diff)
Fix roster version support
-rw-r--r--src/mod_roster.erl2
-rw-r--r--test/ejabberd_SUITE.erl24
-rw-r--r--test/ejabberd_SUITE_data/ejabberd.yml8
3 files changed, 32 insertions, 2 deletions
diff --git a/src/mod_roster.erl b/src/mod_roster.erl
index 36bbe8cc9..dd211b95a 100644
--- a/src/mod_roster.erl
+++ b/src/mod_roster.erl
@@ -196,7 +196,7 @@ read_roster_version(LUser, LServer, mnesia) ->
[#roster_version{version = V}] -> V;
[] -> error
end;
-read_roster_version(LServer, LUser, odbc) ->
+read_roster_version(LUser, LServer, odbc) ->
Username = ejabberd_odbc:escape(LUser),
case odbc_queries:get_roster_version(LServer, Username)
of
diff --git a/test/ejabberd_SUITE.erl b/test/ejabberd_SUITE.erl
index 904d2bf66..52d3e695a 100644
--- a/test/ejabberd_SUITE.erl
+++ b/test/ejabberd_SUITE.erl
@@ -161,6 +161,7 @@ db_tests() ->
presence_broadcast,
last,
roster_get,
+ roster_ver,
private,
privacy,
blocking,
@@ -308,6 +309,29 @@ roster_get(Config) ->
send_recv(Config, #iq{type = get, sub_els = [#roster{}]}),
disconnect(Config).
+roster_ver(Config) ->
+ %% Get initial "ver"
+ #iq{type = result, sub_els = [#roster{ver = Ver1, items = []}]} =
+ send_recv(Config, #iq{type = get,
+ sub_els = [#roster{ver = <<"">>}]}),
+ %% Should receive empty IQ-result
+ #iq{type = result, sub_els = []} =
+ send_recv(Config, #iq{type = get,
+ sub_els = [#roster{ver = Ver1}]}),
+ %% Attempting to subscribe to server's JID
+ send(Config, #presence{type = subscribe, to = server_jid(Config)}),
+ %% Receive a single roster push with the new "ver"
+ #iq{type = set, sub_els = [#roster{ver = Ver2}]} = recv(),
+ %% Requesting roster with the previous "ver". Should receive Ver2 again
+ #iq{type = result, sub_els = [#roster{ver = Ver2}]} =
+ send_recv(Config, #iq{type = get,
+ sub_els = [#roster{ver = Ver1}]}),
+ %% Now requesting roster with the newest "ver". Should receive empty IQ.
+ #iq{type = result, sub_els = []} =
+ send_recv(Config, #iq{type = get,
+ sub_els = [#roster{ver = Ver2}]}),
+ disconnect(Config).
+
presence(Config) ->
send(Config, #presence{}),
JID = my_jid(Config),
diff --git a/test/ejabberd_SUITE_data/ejabberd.yml b/test/ejabberd_SUITE_data/ejabberd.yml
index 3c7479cd3..fd80b199f 100644
--- a/test/ejabberd_SUITE_data/ejabberd.yml
+++ b/test/ejabberd_SUITE_data/ejabberd.yml
@@ -33,7 +33,9 @@ host_config:
- "flat"
- "hometree"
- "pep"
- mod_roster:
+ mod_roster:
+ versioning: true
+ store_current_id: true
db_type: odbc
mod_vcard:
db_type: odbc
@@ -85,6 +87,8 @@ Welcome to this XMPP server."
- "hometree"
- "pep"
mod_roster:
+ versioning: true
+ store_current_id: true
db_type: odbc
mod_vcard:
db_type: odbc
@@ -129,6 +133,8 @@ Welcome to this XMPP server."
- "hometree"
- "pep"
mod_roster:
+ versioning: true
+ store_current_id: true
db_type: internal
mod_vcard:
db_type: internal