mirror of
https://github.com/vanitasvitae/Smack.git
synced 2025-12-11 21:41:08 +01:00
[mam] Support multiple versions of MAM
Support multiple version of MAM and do discovery of the version of MAM supported by the archive. Currently supported MAM versions are v1 and v2. Fixes SMACK-911 See https://discourse.igniterealtime.org/t/mam-support-of-multiple-mam-versions/90136
This commit is contained in:
parent
3f2418dec7
commit
5b857a1b82
21 changed files with 460 additions and 88 deletions
|
|
@ -23,7 +23,7 @@ import java.util.Date;
|
|||
import java.util.List;
|
||||
|
||||
import org.jivesoftware.smackx.mam.MamManager.MamQueryArgs;
|
||||
import org.jivesoftware.smackx.mam.element.MamElements;
|
||||
import org.jivesoftware.smackx.mam.element.MamVersion;
|
||||
import org.jivesoftware.smackx.xdata.packet.DataForm;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -35,7 +35,7 @@ public class FiltersTest extends MamTest {
|
|||
|
||||
private static String getMamXMemberWith(List<String> fieldsNames, List<? extends CharSequence> fieldsValues) {
|
||||
String xml = "<x xmlns='jabber:x:data' type='submit'>" + "<field var='FORM_TYPE'>" + "<value>"
|
||||
+ MamElements.NAMESPACE + "</value>" + "</field>";
|
||||
+ MamVersion.MAM2.getNamespace() + "</value>" + "</field>";
|
||||
|
||||
for (int i = 0; i < fieldsNames.size() && i < fieldsValues.size(); i++) {
|
||||
xml += "<field var='" + fieldsNames.get(i) + "'>" + "<value>" + fieldsValues.get(i) + "</value>"
|
||||
|
|
@ -51,7 +51,7 @@ public class FiltersTest extends MamTest {
|
|||
Date date = new Date();
|
||||
|
||||
MamQueryArgs mamQueryArgs = MamQueryArgs.builder().limitResultsSince(date).build();
|
||||
DataForm dataForm = mamQueryArgs.getDataForm();
|
||||
DataForm dataForm = mamQueryArgs.getDataForm(MamVersion.MAM2);
|
||||
|
||||
List<String> fields = new ArrayList<>();
|
||||
fields.add("start");
|
||||
|
|
@ -66,7 +66,7 @@ public class FiltersTest extends MamTest {
|
|||
Date date = new Date();
|
||||
|
||||
MamQueryArgs mamQueryArgs = MamQueryArgs.builder().limitResultsBefore(date).build();
|
||||
DataForm dataForm = mamQueryArgs.getDataForm();
|
||||
DataForm dataForm = mamQueryArgs.getDataForm(MamVersion.MAM2);
|
||||
|
||||
List<String> fields = new ArrayList<>();
|
||||
fields.add("end");
|
||||
|
|
@ -81,7 +81,7 @@ public class FiltersTest extends MamTest {
|
|||
Jid jid = JidTestUtil.BARE_JID_1;
|
||||
|
||||
MamQueryArgs mamQueryArgs = MamQueryArgs.builder().limitResultsToJid(jid).build();
|
||||
DataForm dataForm = mamQueryArgs.getDataForm();
|
||||
DataForm dataForm = mamQueryArgs.getDataForm(MamVersion.MAM2);
|
||||
|
||||
List<String> fields = new ArrayList<>();
|
||||
fields.add("with");
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import org.jivesoftware.smack.DummyConnection;
|
|||
import org.jivesoftware.smack.XMPPConnection;
|
||||
import org.jivesoftware.smack.test.util.SmackTestSuite;
|
||||
|
||||
import org.jivesoftware.smackx.mam.element.MamVersion;
|
||||
import org.jivesoftware.smackx.xdata.packet.DataForm;
|
||||
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
|
|
@ -47,9 +48,9 @@ public class MamTest extends SmackTestSuite {
|
|||
|
||||
protected DataForm getNewMamForm() throws NoSuchMethodException, SecurityException, IllegalAccessException,
|
||||
IllegalArgumentException, InvocationTargetException {
|
||||
Method methodGetNewMamForm = MamManager.class.getDeclaredMethod("getNewMamForm");
|
||||
Method methodGetNewMamForm = MamManager.class.getDeclaredMethod("getNewMamForm", MamVersion.class);
|
||||
methodGetNewMamForm.setAccessible(true);
|
||||
DataForm.Builder dataFormBuilder = (DataForm.Builder) methodGetNewMamForm.invoke(mamManager);
|
||||
DataForm.Builder dataFormBuilder = (DataForm.Builder) methodGetNewMamForm.invoke(mamManager, MamVersion.MAM2);
|
||||
return dataFormBuilder.build();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import org.jivesoftware.smack.packet.IQ;
|
|||
import org.jivesoftware.smack.packet.StreamOpen;
|
||||
|
||||
import org.jivesoftware.smackx.mam.element.MamQueryIQ;
|
||||
import org.jivesoftware.smackx.mam.element.MamVersion;
|
||||
import org.jivesoftware.smackx.rsm.packet.RSMSet;
|
||||
import org.jivesoftware.smackx.xdata.packet.DataForm;
|
||||
|
||||
|
|
@ -40,7 +41,7 @@ public class PagingTest extends MamTest {
|
|||
int max = 10;
|
||||
RSMSet rsmSet = new RSMSet(max);
|
||||
|
||||
MamQueryIQ mamQueryIQ = new MamQueryIQ(queryId, dataForm);
|
||||
MamQueryIQ mamQueryIQ = new MamQueryIQ(MamVersion.MAM2, queryId, dataForm);
|
||||
mamQueryIQ.setStanzaId("sarasa");
|
||||
mamQueryIQ.setType(IQ.Type.set);
|
||||
mamQueryIQ.addExtension(rsmSet);
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@ import java.util.List;
|
|||
|
||||
import org.jivesoftware.smack.packet.StreamOpen;
|
||||
|
||||
import org.jivesoftware.smackx.mam.element.MamElements;
|
||||
import org.jivesoftware.smackx.mam.element.MamPrefsIQ;
|
||||
import org.jivesoftware.smackx.mam.element.MamPrefsIQ.DefaultBehavior;
|
||||
import org.jivesoftware.smackx.mam.element.MamVersion;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.jxmpp.jid.Jid;
|
||||
|
|
@ -33,16 +33,16 @@ import org.jxmpp.jid.impl.JidCreate;
|
|||
|
||||
public class PreferencesTest {
|
||||
|
||||
private static final String retrievePrefsStanzaExample = "<iq id='sarasa' type='get'>" + "<prefs xmlns='" + MamElements.NAMESPACE
|
||||
private static final String retrievePrefsStanzaExample = "<iq id='sarasa' type='get'>" + "<prefs xmlns='" + MamVersion.MAM2.getNamespace()
|
||||
+ "'/>" + "</iq>";
|
||||
|
||||
private static final String updatePrefsStanzaExample = "<iq id='sarasa' type='set'>" + "<prefs xmlns='" + MamElements.NAMESPACE
|
||||
private static final String updatePrefsStanzaExample = "<iq id='sarasa' type='set'>" + "<prefs xmlns='" + MamVersion.MAM2.getNamespace()
|
||||
+ "' default='roster'>" + "<always>" + "<jid>romeo@montague.lit</jid>" + "<jid>other@montague.lit</jid>"
|
||||
+ "</always>" + "<never>" + "<jid>montague@montague.lit</jid>" + "</never>" + "</prefs>" + "</iq>";
|
||||
|
||||
@Test
|
||||
public void checkRetrievePrefsStanza() throws Exception {
|
||||
MamPrefsIQ mamPrefIQ = new MamPrefsIQ();
|
||||
MamPrefsIQ mamPrefIQ = MamVersion.MAM2.newElementFactory().newPrefsIQ();
|
||||
mamPrefIQ.setStanzaId("sarasa");
|
||||
assertEquals(mamPrefIQ.toXML(StreamOpen.CLIENT_NAMESPACE).toString(), retrievePrefsStanzaExample);
|
||||
}
|
||||
|
|
@ -56,7 +56,7 @@ public class PreferencesTest {
|
|||
List<Jid> neverJids = new ArrayList<>();
|
||||
neverJids.add(JidCreate.from("montague@montague.lit"));
|
||||
|
||||
MamPrefsIQ mamPrefIQ = new MamPrefsIQ(alwaysJids, neverJids, DefaultBehavior.roster);
|
||||
MamPrefsIQ mamPrefIQ = MamVersion.MAM2.newElementFactory().newPrefsIQ(alwaysJids, neverJids, DefaultBehavior.roster);
|
||||
mamPrefIQ.setStanzaId("sarasa");
|
||||
assertEquals(mamPrefIQ.toXML(StreamOpen.CLIENT_NAMESPACE).toString(), updatePrefsStanzaExample);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,9 +29,9 @@ import org.jivesoftware.smack.packet.StreamOpen;
|
|||
|
||||
import org.jivesoftware.smackx.delay.packet.DelayInformation;
|
||||
import org.jivesoftware.smackx.forward.packet.Forwarded;
|
||||
import org.jivesoftware.smackx.mam.element.MamElements;
|
||||
import org.jivesoftware.smackx.mam.element.MamElements.MamResultExtension;
|
||||
import org.jivesoftware.smackx.mam.element.MamQueryIQ;
|
||||
import org.jivesoftware.smackx.mam.element.MamVersion;
|
||||
import org.jivesoftware.smackx.xdata.packet.DataForm;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -41,7 +41,7 @@ public class QueryArchiveTest extends MamTest {
|
|||
|
||||
private static final String mamSimpleQueryIQ = "<iq id='sarasa' type='set'>" + "<query xmlns='urn:xmpp:mam:2' queryid='testid'>"
|
||||
+ "<x xmlns='jabber:x:data' type='submit'>" + "<field var='FORM_TYPE'>" + "<value>"
|
||||
+ MamElements.NAMESPACE + "</value>" + "</field>" + "</x>" + "</query>" + "</iq>";
|
||||
+ MamVersion.MAM2.getNamespace() + "</value>" + "</field>" + "</x>" + "</query>" + "</iq>";
|
||||
|
||||
private static final String mamQueryResultExample = "<message to='hag66@shakespeare.lit/pda' from='coven@chat.shakespeare.lit' id='iasd207'>"
|
||||
+ "<result xmlns='urn:xmpp:mam:2' queryid='g27' id='34482-21985-73620'>"
|
||||
|
|
@ -54,7 +54,7 @@ public class QueryArchiveTest extends MamTest {
|
|||
@Test
|
||||
public void checkMamQueryIQ() throws Exception {
|
||||
DataForm dataForm = getNewMamForm();
|
||||
MamQueryIQ mamQueryIQ = new MamQueryIQ(queryId, dataForm);
|
||||
MamQueryIQ mamQueryIQ = new MamQueryIQ(MamVersion.MAM2, queryId, dataForm);
|
||||
mamQueryIQ.setType(IQ.Type.set);
|
||||
mamQueryIQ.setStanzaId("sarasa");
|
||||
assertEquals(mamQueryIQ.toXML(StreamOpen.CLIENT_NAMESPACE).toString(), mamSimpleQueryIQ);
|
||||
|
|
@ -80,7 +80,7 @@ public class QueryArchiveTest extends MamTest {
|
|||
|
||||
Forwarded<Message> forwarded = new Forwarded<>(forwardedMessage, delay);
|
||||
|
||||
message.addExtension(new MamResultExtension("g27", "34482-21985-73620", forwarded));
|
||||
message.addExtension(MamVersion.MAM2.newElementFactory().newResultExtension("g27", "34482-21985-73620", forwarded));
|
||||
|
||||
assertEquals(mamQueryResultExample, message.toXML(StreamOpen.CLIENT_NAMESPACE).toString());
|
||||
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ import org.jivesoftware.smack.packet.IQ;
|
|||
import org.jivesoftware.smack.packet.StreamOpen;
|
||||
|
||||
import org.jivesoftware.smackx.mam.MamManager.MamQueryArgs;
|
||||
import org.jivesoftware.smackx.mam.element.MamElements;
|
||||
import org.jivesoftware.smackx.mam.element.MamQueryIQ;
|
||||
import org.jivesoftware.smackx.mam.element.MamVersion;
|
||||
import org.jivesoftware.smackx.xdata.packet.DataForm;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -32,13 +32,13 @@ public class ResultsLimitTest extends MamTest {
|
|||
|
||||
private static final String resultsLimitStanza = "<iq id='sarasa' type='set'>" + "<query xmlns='urn:xmpp:mam:2' queryid='testid'>"
|
||||
+ "<x xmlns='jabber:x:data' type='submit'>" + "<field var='FORM_TYPE'>" + "<value>"
|
||||
+ MamElements.NAMESPACE + "</value>" + "</field>" + "</x>" + "<set xmlns='http://jabber.org/protocol/rsm'>"
|
||||
+ MamVersion.MAM2.getNamespace() + "</value>" + "</field>" + "</x>" + "<set xmlns='http://jabber.org/protocol/rsm'>"
|
||||
+ "<max>10</max>" + "</set>" + "</query>" + "</iq>";
|
||||
|
||||
@Test
|
||||
public void checkResultsLimit() throws Exception {
|
||||
DataForm dataForm = getNewMamForm();
|
||||
MamQueryIQ mamQueryIQ = new MamQueryIQ(queryId, dataForm);
|
||||
MamQueryIQ mamQueryIQ = new MamQueryIQ(MamVersion.MAM2, queryId, dataForm);
|
||||
mamQueryIQ.setType(IQ.Type.set);
|
||||
mamQueryIQ.setStanzaId("sarasa");
|
||||
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
|
|||
import org.jivesoftware.smack.packet.StreamOpen;
|
||||
|
||||
import org.jivesoftware.smackx.mam.MamManager.MamQueryArgs;
|
||||
import org.jivesoftware.smackx.mam.element.MamElements;
|
||||
import org.jivesoftware.smackx.mam.element.MamQueryIQ;
|
||||
import org.jivesoftware.smackx.mam.element.MamVersion;
|
||||
import org.jivesoftware.smackx.xdata.FormField;
|
||||
import org.jivesoftware.smackx.xdata.packet.DataForm;
|
||||
|
||||
|
|
@ -32,18 +32,18 @@ import org.jxmpp.jid.JidTestUtil;
|
|||
|
||||
public class RetrieveFormFieldsTest extends MamTest {
|
||||
|
||||
private static final String retrieveFormFieldStanza = "<iq id='sarasa' type='get'>" + "<query xmlns='" + MamElements.NAMESPACE
|
||||
private static final String retrieveFormFieldStanza = "<iq id='sarasa' type='get'>" + "<query xmlns='" + MamVersion.MAM2.getNamespace()
|
||||
+ "' queryid='testid'></query>" + "</iq>";
|
||||
|
||||
private static final String additionalFieldsStanza = "<x xmlns='jabber:x:data' type='submit'>" + "<field var='FORM_TYPE'>"
|
||||
+ "<value>" + MamElements.NAMESPACE + "</value>" + "</field>"
|
||||
+ "<value>" + MamVersion.MAM2.getNamespace() + "</value>" + "</field>"
|
||||
+ "<field var='urn:example:xmpp:free-text-search'>" + "<value>Hi</value>" + "</field>"
|
||||
+ "<field var='urn:example:xmpp:stanza-content'>" + "<value>one@exampleone.org</value>" + "</field>"
|
||||
+ "</x>";
|
||||
|
||||
@Test
|
||||
public void checkRetrieveFormFieldsStanza() throws Exception {
|
||||
MamQueryIQ mamQueryIQ = new MamQueryIQ(queryId);
|
||||
MamQueryIQ mamQueryIQ = new MamQueryIQ(MamVersion.MAM2, queryId);
|
||||
mamQueryIQ.setStanzaId("sarasa");
|
||||
|
||||
assertEquals(retrieveFormFieldStanza, mamQueryIQ.toXML(StreamOpen.CLIENT_NAMESPACE).toString());
|
||||
|
|
@ -63,7 +63,7 @@ public class RetrieveFormFieldsTest extends MamTest {
|
|||
.withAdditionalFormField(field1)
|
||||
.withAdditionalFormField(field2)
|
||||
.build();
|
||||
DataForm dataForm = mamQueryArgs.getDataForm();
|
||||
DataForm dataForm = mamQueryArgs.getDataForm(MamVersion.MAM2);
|
||||
|
||||
String dataFormResult = dataForm.toXML().toString();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue