aboutsummaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2021-10-19 18:11:50 +0200
committerKim Alvefur <zash@zash.se>2021-10-19 18:11:50 +0200
commit4b05d0f2402475fea608fd3e48a96364bc6da4f2 (patch)
tree8553f7e8e4b57c64b2599666f87b5e3ca14cc0b7 /spec
parent3e55057a8574af83e42ec96041283111e34ef7d4 (diff)
downloadprosody-4b05d0f2402475fea608fd3e48a96364bc6da4f2.tar.gz
prosody-4b05d0f2402475fea608fd3e48a96364bc6da4f2.zip
mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436
Default left as 'never' in mod_pubsub to preserve the previous behavior. Unclear if this is desirable, but can always be changed later. In mod_pep this allows turning off the automatic resending of most recent item.
Diffstat (limited to 'spec')
-rw-r--r--spec/scansion/pubsub_config.scs15
-rw-r--r--spec/scansion/pubsub_max_items.scs12
-rw-r--r--spec/scansion/pubsub_multi_items.scs12
-rw-r--r--spec/scansion/pubsub_preconditions.scs15
-rw-r--r--spec/scansion/pubsub_resend_on_sub.scs152
5 files changed, 206 insertions, 0 deletions
diff --git a/spec/scansion/pubsub_config.scs b/spec/scansion/pubsub_config.scs
index 2cad9115..28505f28 100644
--- a/spec/scansion/pubsub_config.scs
+++ b/spec/scansion/pubsub_config.scs
@@ -84,6 +84,18 @@ Romeo receives:
</option>
<value>publishers</value>
</field>
+ <field type='list-single' var='pubsub#send_last_published_item'>
+ <option label='never'>
+ <value>never</value>
+ </option>
+ <option label='on_sub'>
+ <value>on_sub</value>
+ </option>
+ <option label='on_sub_and_presence'>
+ <value>on_sub_and_presence</value>
+ </option>
+ <value>on_sub_and_presence</value>
+ </field>
<field var="pubsub#deliver_notifications" label="Whether to deliver event notifications" type="boolean">
<value>1</value>
</field>
@@ -160,6 +172,9 @@ Romeo sends:
</option>
<value>publishers</value>
</field>
+ <field type='list-single' var='pubsub#send_last_published_item'>
+ <value>never</value>
+ </field>
<field var="pubsub#deliver_notifications" type="boolean" label="Whether to deliver event notifications">
<value>1</value>
</field>
diff --git a/spec/scansion/pubsub_max_items.scs b/spec/scansion/pubsub_max_items.scs
index 7f0b531d..dafeb317 100644
--- a/spec/scansion/pubsub_max_items.scs
+++ b/spec/scansion/pubsub_max_items.scs
@@ -79,6 +79,18 @@ Alice receives:
</option>
<value>publishers</value>
</field>
+ <field type='list-single' var='pubsub#send_last_published_item'>
+ <option label='never'>
+ <value>never</value>
+ </option>
+ <option label='on_sub'>
+ <value>on_sub</value>
+ </option>
+ <option label='on_sub_and_presence'>
+ <value>on_sub_and_presence</value>
+ </option>
+ <value>never</value>
+ </field>
<field var="pubsub#deliver_notifications" label="Whether to deliver event notifications" type="boolean">
<value>1</value>
</field>
diff --git a/spec/scansion/pubsub_multi_items.scs b/spec/scansion/pubsub_multi_items.scs
index 331093ca..d4f2e01b 100644
--- a/spec/scansion/pubsub_multi_items.scs
+++ b/spec/scansion/pubsub_multi_items.scs
@@ -79,6 +79,18 @@ Alice receives:
</option>
<value>publishers</value>
</field>
+ <field type='list-single' var='pubsub#send_last_published_item'>
+ <option label='never'>
+ <value>never</value>
+ </option>
+ <option label='on_sub'>
+ <value>on_sub</value>
+ </option>
+ <option label='on_sub_and_presence'>
+ <value>on_sub_and_presence</value>
+ </option>
+ <value>never</value>
+ </field>
<field var="pubsub#deliver_notifications" label="Whether to deliver event notifications" type="boolean">
<value>1</value>
</field>
diff --git a/spec/scansion/pubsub_preconditions.scs b/spec/scansion/pubsub_preconditions.scs
index 7e4e593b..744070db 100644
--- a/spec/scansion/pubsub_preconditions.scs
+++ b/spec/scansion/pubsub_preconditions.scs
@@ -83,6 +83,18 @@ Romeo receives:
</option>
<value>publishers</value>
</field>
+ <field type='list-single' var='pubsub#send_last_published_item'>
+ <option label='never'>
+ <value>never</value>
+ </option>
+ <option label='on_sub'>
+ <value>on_sub</value>
+ </option>
+ <option label='on_sub_and_presence'>
+ <value>on_sub_and_presence</value>
+ </option>
+ <value>on_sub_and_presence</value>
+ </field>
<field var="pubsub#deliver_notifications" label="Whether to deliver event notifications" type="boolean">
<value>1</value>
</field>
@@ -159,6 +171,9 @@ Romeo sends:
</option>
<value>publishers</value>
</field>
+ <field type='list-single' var='pubsub#send_last_published_item'>
+ <value>never</value>
+ </field>
<field var="pubsub#deliver_notifications" type="boolean" label="Whether to deliver event notifications">
<value>1</value>
</field>
diff --git a/spec/scansion/pubsub_resend_on_sub.scs b/spec/scansion/pubsub_resend_on_sub.scs
new file mode 100644
index 00000000..cfce8934
--- /dev/null
+++ b/spec/scansion/pubsub_resend_on_sub.scs
@@ -0,0 +1,152 @@
+# Pubsub: Send last item on subscribe #1436
+
+[Client] Romeo
+ jid: admin@localhost
+ password: password
+
+// admin@localhost is assumed to have node creation privileges
+
+[Client] Juliet
+ jid: juliet@localhost
+ password: password
+
+---------
+
+Romeo connects
+
+Romeo sends:
+ <iq type="set" to="pubsub.localhost" id='create1'>
+ <pubsub xmlns="http://jabber.org/protocol/pubsub">
+ <create node="princely_musings"/>
+ </pubsub>
+ </iq>
+
+Romeo receives:
+ <iq type="result" id='create1'/>
+
+Romeo sends:
+ <iq to="pubsub.localhost" id="config-never" type="set">
+ <pubsub xmlns="http://jabber.org/protocol/pubsub#owner">
+ <configure node="princely_musings">
+ <x xmlns="jabber:x:data" type="submit">
+ <field var="FORM_TYPE" type="hidden">
+ <value>http://jabber.org/protocol/pubsub#node_config</value>
+ </field>
+ <field type='list-single' var='pubsub#send_last_published_item'>
+ <value>never</value>
+ </field>
+ </x>
+ </configure>
+ </pubsub>
+ </iq>
+
+Romeo receives:
+ <iq from="pubsub.localhost" id="config-never" type="result"/>
+
+Romeo sends:
+ <iq type="set" to="pubsub.localhost" id='pub1'>
+ <pubsub xmlns="http://jabber.org/protocol/pubsub">
+ <publish node="princely_musings">
+ <item id="current">
+ <entry xmlns="http://www.w3.org/2005/Atom">
+ <title>Soliloquy</title>
+ <summary>Lorem ipsum dolor sit amet</summary>
+ </entry>
+ </item>
+ </publish>
+ </pubsub>
+ </iq>
+
+Romeo receives:
+ <iq type="result" id='pub1'/>
+
+Juliet connects
+
+Juliet sends:
+ <iq type="set" to="pubsub.localhost" id='sub1'>
+ <pubsub xmlns="http://jabber.org/protocol/pubsub">
+ <subscribe node="princely_musings" jid="${Juliet's full JID}"/>
+ </pubsub>
+ </iq>
+
+Juliet receives:
+ <iq type="result" id='sub1'/>
+
+Juliet sends:
+ <iq type="set" to="pubsub.localhost" id='unsub1'>
+ <pubsub xmlns="http://jabber.org/protocol/pubsub">
+ <unsubscribe node="princely_musings" jid="${Juliet's full JID}"/>
+ </pubsub>
+ </iq>
+
+Juliet receives:
+ <iq type="result" id='unsub1'/>
+
+Romeo sends:
+ <iq to="pubsub.localhost" id="config-on_sub" type="set">
+ <pubsub xmlns="http://jabber.org/protocol/pubsub#owner">
+ <configure node="princely_musings">
+ <x xmlns="jabber:x:data" type="submit">
+ <field var="FORM_TYPE" type="hidden">
+ <value>http://jabber.org/protocol/pubsub#node_config</value>
+ </field>
+ <field type='list-single' var='pubsub#send_last_published_item'>
+ <value>on_sub</value>
+ </field>
+ </x>
+ </configure>
+ </pubsub>
+ </iq>
+
+Romeo receives:
+ <iq from="pubsub.localhost" id="config-on_sub" type="result"/>
+
+Juliet sends:
+ <iq type="set" to="pubsub.localhost" id='sub2'>
+ <pubsub xmlns="http://jabber.org/protocol/pubsub">
+ <subscribe node="princely_musings" jid="${Juliet's full JID}"/>
+ </pubsub>
+ </iq>
+
+Juliet receives:
+ <iq type="result" id='sub2'/>
+
+Juliet receives:
+ <message type="headline" from="pubsub.localhost">
+ <event xmlns="http://jabber.org/protocol/pubsub#event">
+ <items node="princely_musings">
+ <item id="current" publisher="${Romeo's JID}">
+ <entry xmlns="http://www.w3.org/2005/Atom">
+ <title>Soliloquy</title>
+ <summary>Lorem ipsum dolor sit amet</summary>
+ </entry>
+ </item>
+ </items>
+ </event>
+ </message>
+
+Juliet sends:
+ <iq type="set" to="pubsub.localhost" id='unsub2'>
+ <pubsub xmlns="http://jabber.org/protocol/pubsub">
+ <unsubscribe node="princely_musings" jid="${Juliet's full JID}"/>
+ </pubsub>
+ </iq>
+
+Juliet receives:
+ <iq type="result" id='unsub2'/>
+
+Juliet disconnects
+
+Romeo sends:
+ <iq type="set" to="pubsub.localhost" id='del1'>
+ <pubsub xmlns="http://jabber.org/protocol/pubsub#owner">
+ <delete node="princely_musings"/>
+ </pubsub>
+ </iq>
+
+Romeo receives:
+ <iq type="result" id='del1'/>
+
+Romeo disconnects
+
+// vim: syntax=xml: