1
0
Fork 0
mirror of https://github.com/vanitasvitae/Smack.git synced 2024-11-22 12:02:05 +01:00

Compare commits

..

26 commits

Author SHA1 Message Date
5e561f410a
Migrate from libsignal-protocol-java to libsignal 2024-10-24 17:47:20 +02:00
Florian Schmaus
0561aaa9bc Bump checkstyle to 10.18.2 2024-10-22 16:09:33 +02:00
Florian Schmaus
c696925d33 [java11-full] Switch from okhttp to Java's native API for websockets 2024-10-22 14:48:46 +02:00
Florian Schmaus
6c5e64b2ca [build-logic] Drop redundant definition of getAndroidRuntimeJar()
This is also defined in global-conventions.gradle.
2024-10-22 14:48:08 +02:00
Florian Schmaus
6498ca796b [java11-full] Fix typo in build.gradle 2024-10-22 14:48:08 +02:00
Florian Schmaus
74a7a2689e Update Makefile 2024-10-22 14:37:34 +02:00
Florian Schmaus
37a2df5486 [sinttest] decrease length of MUC names
To reduce the noise in XMPP traces, decrease the length of MUC names
generated by sinttest.
2024-10-18 16:11:29 +02:00
Florian Schmaus
75636884ad [sinttest] Add ejabberd compatibility mode for mucJoinEventOrderingTest 2024-10-18 15:56:39 +02:00
Florian Schmaus
7e8fddcbf8 [sinttest] Improve code readability in MultiUserChatOccupantIntegrationTest
Especially considering pattern matching for instanceof, which will be
available in Java 16.
2024-10-18 15:48:12 +02:00
Florian Schmaus
9c7e575e9e [sinttest] Include results in assertion message of mucJoinEventOrderingTest 2024-10-18 15:45:33 +02:00
Florian Schmaus
d7858d2e8f [sinttest] Reject empty string values for enabled/disabled tests configuration 2024-10-18 15:44:51 +02:00
Florian Schmaus
18647c24ca [sinttest] Perform early exit in JulTestRunResultProcessor.process() 2024-10-17 22:07:37 +02:00
Florian Schmaus
d67262a5e0 [sinttest] Fix indentation 2024-10-17 22:04:45 +02:00
Florian Schmaus
1eb5649123 [sinttest] Provide brief summary of failed tests 2024-10-17 22:04:14 +02:00
Florian Schmaus
0191ed7174 [tcp] Report SM resumption impossible if not instant shutdown
If the connection got not instantanously shut down, then we also
dropped all SM state and should not report that SM resumption is
possible.

This most likely fixes SMACK-954.x
2024-10-17 18:10:54 +02:00
Florian Schmaus
6e6a3ef88d [tcp] Set shutdownTimestamp before queue.shutdown()
In the writer thread, we use shutdownTimestamp to determine if we
should break out of the writer loop. If we set
shutdownTimestamp *after* queue.shutdown(), then there is a brief
period where nextStreamElement() returns 'null' but done() still
returns 'true'. Hence, we switch the logic "setting" those values.
2024-10-17 18:08:31 +02:00
Florian Schmaus
9e5ac5a39a [core] Wrap current connection exception when re-throwing
Instead of directly throwing the current connection exception, wrap
it, so we do not lose the stack trace of the thread invoking
waitForConditionorThrowConnectionException().
2024-10-17 17:34:05 +02:00
Florian Schmaus
3c5fb5810e Smack 4.5.0-beta6-SNAPSHOT 2024-10-15 16:14:14 +02:00
Florian Schmaus
caa479fac4 Smack 4.5.0-beta5 2024-10-15 15:55:58 +02:00
Florian Schmaus
3b0c2f752f [core] Remove NumberFormatException from innermost try/catch in parseAndProcessStanza()
This was added in 02d8f53246 ("[core] Increase resilience against
faulty parser implementions"). However, NumberFormatException is a
subclass of IllegalArgumentException, which is already catched by the
outermost catch.
2024-10-15 15:46:24 +02:00
Florian Schmaus
0ee5acc494 Remove usage of deprecated URL constructor
Although those URL constructors are only deprecated with Java 20, this
already removes their usage.
2024-10-15 15:45:47 +02:00
Florian Schmaus
8b9cd98756 [build-logic] Remove some isJavaXCompatible blocks
Since Smack requires now Java 11, all conditional code for lower Java
versions can be dropped from the build logic.
2024-10-15 13:27:56 +02:00
Florian Schmaus
d3de2d65b9 [xdata] Avoid NPE if form field's name is not set
Do not throw an NPE if an form field without a name, i.e., the 'var'
attribute, is received.

Thanks to Peter Kaul for reporting this.
2024-10-15 12:50:59 +02:00
Florian Schmaus
02d8f53246 [core] Increase resilience against faulty parser implementions
If one of the parser throws a NullPointerException or
NumberFormatException, then this should not lead to a disconnect due
to an unhandled exception. Instead wrap those in an exception that is
handled by the parsing exception callback and ask the user to fill a
bug report for those faulty parsers.

We may adjust the list of exceptions that are wrapped in the future.
2024-10-15 12:50:33 +02:00
Florian Schmaus
5dd08fc215 [android-extensions] Set RECEIVER_NOT_EXPORTED in ServerPingWithAlarmManager
Set RECEIVER_NOT_EXPORTED when registering the receiver in
ServerPingWithAlarmManager, as otherwise this will throw an exception
if the application targets Android API level 34 or higher.

This requires raising the minimum Android API level to 26 for
registerReceiver() with flags.
2024-10-15 12:45:18 +02:00
Florian Schmaus
072761a0ad [xmlparser-xpp3] Switch to codelibs version of xpp3
This version has javax.xml.namespace.QName removed, avoiding the
duplicate declaration conflict with QName from Java 11.
2024-10-15 12:43:09 +02:00
123 changed files with 372 additions and 253 deletions

View file

@ -56,7 +56,7 @@ jobs:
uses: android-actions/setup-android@v3
- name: Install Android SDK
run: |
sdkmanager "platforms;android-23"
sdkmanager "platforms;android-26"
# Testing
- name: Gradle Check

View file

@ -1,12 +1,12 @@
GRADLE ?= ./gradlew
.PHONY: all
all: check jacocoRootReport javadocAll sinttest
all: check codecov eclipse javadocAll sinttest
.PHONY: codecov
codecov:
$(GRADLE) smack-java11-full:testCodeCoverageReport
echo "Report available at smack-java11-full/build/reports/jacoco/testCodeCoverageReport/html/index.html"
echo "code coverage report available at file://$(PWD)/smack-java11-full/build/reports/jacoco/testCodeCoverageReport/html/index.html"
.PHONY: check
check:
@ -20,11 +20,7 @@ eclipse:
sinttest:
$(GRADLE) $@
.PHONY: jacocoRootReport
jacocoRootReport:
$(GRADLE) $@
.PHONY: javadocAll
javadocAll:
$(GRADLE) $@
echo "Smack javadoc available at build/javadoc/index.html"
echo "javadoc available at file://$(PWD)/build/javadoc/index.html"

View file

@ -3,7 +3,7 @@ plugins {
id 'org.igniterealtime.smack.global-conventions'
}
dependencies {
signature "net.sf.androidscents.signature:android-api-level-${smackMinAndroidSdk}:6.0_r3@signature"
signature "net.sf.androidscents.signature:android-api-level-${smackMinAndroidSdk}:8.0.0_r2@signature"
}
animalsniffer {
sourceSets = [sourceSets.main]

View file

@ -1,7 +1,7 @@
ext {
javaVersion = JavaVersion.VERSION_11
javaMajor = javaVersion.getMajorVersion()
smackMinAndroidSdk = 23
smackMinAndroidSdk = 26
androidBootClasspath = { getAndroidRuntimeJar() }
}

View file

@ -89,28 +89,7 @@ tasks.withType(JavaCompile) {
'-Xlint:-serial',
'-Werror',
]
}
if (JavaVersion.current().isJava8Compatible()) {
tasks.withType(Javadoc) {
// The '-quiet' as second argument is actually a hack,
// since the one parameter addStringOption doesn't seem to
// work, we extra add '-quiet', which is added anyway by
// gradle.
// We disable 'missing' as we do most of javadoc checking via checkstyle.
options.addStringOption('Xdoclint:all,-missing', '-quiet')
// Abort on javadoc warnings.
// See JDK-8200363 (https://bugs.openjdk.java.net/browse/JDK-8200363)
// for information about the -Xwerror option.
options.addStringOption('Xwerror', '-quiet')
}
}
if (JavaVersion.current().isJava9Compatible()) {
tasks.withType(JavaCompile) {
options.compilerArgs.addAll([
'--release', javaMajor,
])
}
options.release = Integer.valueOf(javaMajor)
}
jacoco {
@ -177,7 +156,7 @@ jar {
}
checkstyle {
toolVersion = '8.27'
toolVersion = '10.18.2'
if (project in gplLicensedProjects) {
configProperties.checkstyleLicenseHeader = "${project.name}-gplv3-license-header"
@ -344,17 +323,6 @@ def getGitCommit() {
gitCommit
}
def getAndroidRuntimeJar() {
def androidHome = new File("$System.env.ANDROID_HOME")
if (!androidHome.isDirectory()) throw new Exception("ANDROID_HOME not found or set")
def androidJar = new File("$androidHome/platforms/android-$smackMinAndroidSdk/android.jar")
if (androidJar.isFile()) {
return androidJar
} else {
throw new Exception("Can't find android.jar for $smackMinAndroidSdk API. Please install corresponding SDK platform package")
}
}
def readVersionFile() {
def versionFile = new File(rootDir, 'version')
if (!versionFile.isFile()) {

View file

@ -4,8 +4,8 @@ plugins {
id 'org.igniterealtime.smack.global-conventions'
}
if (JavaVersion.current().isJava8Compatible()) {
tasks.withType(Javadoc) {
tasks.withType(Javadoc) {
// The '-quiet' as second argument is actually a hack,
// since the one parameter addStringOption doesn't seem to
// work, we extra add '-quiet', which is added anyway by
@ -16,13 +16,7 @@ if (JavaVersion.current().isJava8Compatible()) {
// See JDK-8200363 (https://bugs.openjdk.java.net/browse/JDK-8200363)
// for information about the -Xwerror option.
options.addStringOption('Xwerror', '-quiet')
}
}
if (JavaVersion.current().isJava9Compatible()) {
tasks.withType(Javadoc) {
options.addStringOption('-release', javaMajor)
}
}
tasks.withType(Javadoc) {

View file

@ -104,7 +104,7 @@
</module>
<module name="JavadocMethod">
<!-- TODO stricten those checks -->
<property name="scope" value="protected"/>
<property name="accessModifiers" value="public,protected"/>
</module>
<module name="JavadocStyle">
<property name="scope" value="public"/>
@ -195,15 +195,15 @@
, TYPE_EXTENSION_AND
"/>
</module>
<module name="CustomImportOrder">
<property name="customImportOrderRules"
value="STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE"/>
<property name="specialImportsRegExp" value="^org\.jivesoftware\.smack"/>
<property name="sortImportsInGroupAlphabetically" value="true"/>
<property name="separateLineBetweenGroups" value="true"/>
<module name="ImportOrder">
<property name="groups" value="/^java\./,/^javax\./,/^org\.jivesoftware\.smack\./,/^org\.jivesoftware\.smackx\./,/^org\.igniterealtime\.smack\./,/^org\.igniterealtime\.smackx\./"/>
<property name="separated" value="true"/>
<property name="option" value="top"/>
</module>
<module name="MissingJavadocPackage"/>
<!-- this seems to cause false positives with checkstyle 10.18.2
<module name="UnnecessaryParentheses"/>
-->
<module name="UnnecessarySemicolonInEnumeration"/>
<module name="UnnecessarySemicolonInTryWithResources"/>
</module>

View file

@ -1,6 +1,8 @@
#Organize Import Order
#Wed Jun 14 16:42:40 CEST 2017
5=
7=
6=org.igniterealtime.smackx
5=org.igniterealtime.smack
4=org.jivesoftware.smackx
3=org.jivesoftware.smack
2=javax

View file

@ -28,6 +28,7 @@ import org.jivesoftware.smack.Manager;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPConnectionRegistry;
import org.jivesoftware.smack.util.Async;
import org.jivesoftware.smackx.ping.PingManager;
import android.app.AlarmManager;
@ -173,7 +174,13 @@ public final class ServerPingWithAlarmManager extends Manager {
*/
public static void onCreate(Context context) {
sContext = context;
context.registerReceiver(ALARM_BROADCAST_RECEIVER, new IntentFilter(PING_ALARM_ACTION));
int receiverFlags = 0;
if (Build.VERSION.SDK_INT >= 34) {
receiverFlags |= 4; // RECEIVER_NOT_EXPORTED
}
context.registerReceiver(ALARM_BROADCAST_RECEIVER, new IntentFilter(PING_ALARM_ACTION), receiverFlags);
sAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
int pendingIntentFlags = 0;
if (Build.VERSION.SDK_INT >= 23) {

View file

@ -499,7 +499,7 @@ public class XMPPBOSHConnection extends AbstractXMPPConnection {
*
* @author Guenther Niess
*/
private class BOSHConnectionListener implements BOSHClientConnListener {
private final class BOSHConnectionListener implements BOSHClientConnListener {
/**
* Notify the BOSHConnection about connection state changes.
@ -556,7 +556,7 @@ public class XMPPBOSHConnection extends AbstractXMPPConnection {
*
* @author Guenther Niess
*/
private class BOSHPacketReader implements BOSHClientResponseListener {
private final class BOSHPacketReader implements BOSHClientResponseListener {
/**
* Parse the received packets and notify the corresponding connection.

View file

@ -281,8 +281,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
*/
protected Writer writer;
protected SmackException currentSmackException;
protected XMPPException currentXmppException;
private Exception currentConnectionException;
protected boolean tlsHandled;
@ -511,8 +510,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
public abstract boolean isUsingCompression();
protected void initState() {
currentSmackException = null;
currentXmppException = null;
currentConnectionException = null;
saslFeatureReceived = lastFeaturesReceived = tlsHandled = false;
// TODO: We do not init closingStreamReceived here, as the integration tests use it to check if we waited for
// it.
@ -686,28 +684,12 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
return streamId;
}
protected final void throwCurrentConnectionException() throws SmackException, XMPPException {
if (currentSmackException != null) {
throw currentSmackException;
} else if (currentXmppException != null) {
throw currentXmppException;
}
throw new AssertionError("No current connection exception set, although throwCurrentException() was called");
}
protected final boolean hasCurrentConnectionException() {
return currentSmackException != null || currentXmppException != null;
return currentConnectionException != null;
}
protected final void setCurrentConnectionExceptionAndNotify(Exception exception) {
if (exception instanceof SmackException) {
currentSmackException = (SmackException) exception;
} else if (exception instanceof XMPPException) {
currentXmppException = (XMPPException) exception;
} else {
currentSmackException = new SmackException.SmackWrappedException(exception);
}
currentConnectionException = exception;
notifyWaitingThreads();
}
@ -741,10 +723,12 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
return true;
}
protected final void waitForConditionOrThrowConnectionException(Supplier<Boolean> condition, String waitFor) throws InterruptedException, SmackException, XMPPException {
protected final void waitForConditionOrThrowConnectionException(Supplier<Boolean> condition, String waitFor)
throws InterruptedException, SmackException.SmackWrappedException, NoResponseException {
boolean success = waitFor(() -> condition.get().booleanValue() || hasCurrentConnectionException());
if (hasCurrentConnectionException()) {
throwCurrentConnectionException();
final Exception currentConnectionException = this.currentConnectionException;
if (currentConnectionException != null) {
throw new SmackException.SmackWrappedException(currentConnectionException);
}
// If there was no connection exception and we still did not successfully wait for the condition to hold, then
@ -1048,7 +1032,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
protected final boolean waitForClosingStreamTagFromServer() {
try {
waitForConditionOrThrowConnectionException(() -> closingStreamReceived, "closing stream tag from the server");
} catch (InterruptedException | SmackException | XMPPException e) {
} catch (InterruptedException | SmackException.SmackWrappedException | NoResponseException e) {
LOGGER.log(Level.INFO, "Exception while waiting for closing stream element from the server " + this, e);
return false;
}
@ -1459,8 +1443,15 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
ParserUtils.assertAtStartTag(parser);
int parserDepth = parser.getDepth();
Stanza stanza = null;
try {
try {
stanza = PacketParserUtils.parseStanza(parser, incomingStreamXmlEnvironment);
} catch (NullPointerException e) {
// Those exceptions should probably be wrapped into a SmackParsingException and therefore likely constitute a missing verification in the throwing parser.
String message = "Smack parser throw unexpected exception '" + e.getMessage() + "', please report this at " + Smack.BUG_REPORT_URL;
LOGGER.log(Level.SEVERE, message, e);
throw new IOException(message, e);
}
}
catch (XmlPullParserException | SmackParsingException | IOException | IllegalArgumentException e) {
CharSequence content = PacketParserUtils.parseContentDepth(parser,

View file

@ -1,6 +1,6 @@
/**
*
* Copyright 2020-2021 Florian Schmaus
* Copyright 2020-2024 Florian Schmaus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -17,6 +17,9 @@
package org.jivesoftware.smack;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.logging.Logger;
import org.jivesoftware.smack.util.FileUtils;
@ -29,6 +32,16 @@ public class Smack {
public static final String SMACK_PACKAGE = SMACK_ORG + ".smack";
public static final URL BUG_REPORT_URL;
static {
try {
BUG_REPORT_URL = URI.create("https://discourse.igniterealtime.org/c/smack/smack-support/9").toURL();
} catch (MalformedURLException e) {
throw new ExceptionInInitializerError(e);
}
}
/**
* Returns the Smack version information, e.g."1.3.0".
*

View file

@ -18,6 +18,7 @@
package org.jivesoftware.smack;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
@ -60,7 +61,7 @@ public final class SmackConfiguration {
static {
try {
SMACK_URL = new URL(SMACK_URL_STRING);
SMACK_URL = URI.create(SMACK_URL_STRING).toURL();
} catch (MalformedURLException e) {
throw new IllegalStateException(e);
}

View file

@ -164,7 +164,7 @@ public class SmackReactor {
return scheduledActions.remove(scheduledAction);
}
private class Reactor extends Thread {
private final class Reactor extends Thread {
private volatile long shutdownRequestTimestamp = -1;

View file

@ -117,7 +117,7 @@ public final class HttpLookupMethod {
*/
public static InputStream getXrdStream(DomainBareJid xmppServiceAddress) throws IOException {
final String metadataUrl = "https://" + xmppServiceAddress + "/.well-known/host-meta";
final URL putUrl = new URL(metadataUrl);
final URL putUrl = URI.create(metadataUrl).toURL();
final URLConnection urlConnection = putUrl.openConnection();
return urlConnection.getInputStream();
}

View file

@ -39,6 +39,7 @@ import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.SmackException.NoResponseException;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.SmackException.OutgoingQueueFullException;
import org.jivesoftware.smack.SmackException.SmackWrappedException;
import org.jivesoftware.smack.SmackFuture;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.XMPPException.FailedNonzaException;
@ -259,7 +260,7 @@ public final class ModularXmppClientToServerConnection extends AbstractXMPPConne
@Override
public void waitForConditionOrThrowConnectionException(Supplier<Boolean> condition, String waitFor)
throws InterruptedException, SmackException, XMPPException {
throws InterruptedException, SmackWrappedException, NoResponseException {
ModularXmppClientToServerConnection.this.waitForConditionOrThrowConnectionException(condition, waitFor);
}
@ -596,8 +597,7 @@ public final class ModularXmppClientToServerConnection extends AbstractXMPPConne
case "error":
StreamError streamError = PacketParserUtils.parseStreamError(parser, null);
StreamErrorException streamErrorException = new StreamErrorException(streamError);
currentXmppException = streamErrorException;
notifyWaitingThreads();
setCurrentConnectionExceptionAndNotify(streamErrorException);
throw streamErrorException;
case "features":
parseFeatures(parser);
@ -1048,8 +1048,7 @@ public final class ModularXmppClientToServerConnection extends AbstractXMPPConne
XmppInputOutputFilter filter = it.next();
try {
filter.waitUntilInputOutputClosed();
} catch (IOException | CertificateException | InterruptedException | SmackException
| XMPPException e) {
} catch (IOException | CertificateException | InterruptedException | SmackException | XMPPException e) {
LOGGER.log(Level.WARNING, "waitUntilInputOutputClosed() threw", e);
}
}

View file

@ -26,6 +26,7 @@ import java.util.Queue;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.SmackException.NoResponseException;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.SmackException.SmackWrappedException;
import org.jivesoftware.smack.SmackReactor;
import org.jivesoftware.smack.SmackReactor.ChannelSelectedCallback;
import org.jivesoftware.smack.XMPPException;
@ -127,7 +128,8 @@ public abstract class ModularXmppClientToServerConnectionInternal {
public abstract void asyncGo(Runnable runnable);
public abstract void waitForConditionOrThrowConnectionException(Supplier<Boolean> condition, String waitFor) throws InterruptedException, SmackException, XMPPException;
public abstract void waitForConditionOrThrowConnectionException(Supplier<Boolean> condition, String waitFor)
throws InterruptedException, SmackWrappedException, NoResponseException;
public abstract void notifyWaitingThreads();

View file

@ -1,6 +1,6 @@
/**
*
* Copyright 2019-2021 Florian Schmaus
* Copyright 2019-2024 Florian Schmaus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -20,10 +20,15 @@ import java.io.IOException;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.text.ParseException;
import org.jivesoftware.smack.packet.Element;
import org.jivesoftware.smack.parsing.SmackParsingException;
import org.jivesoftware.smack.parsing.SmackParsingException.SmackUriSyntaxParsingException;
import org.jivesoftware.smack.xml.XmlPullParserException;
public class AbstractProvider<E extends Element> {
@ -106,4 +111,14 @@ public class AbstractProvider<E extends Element> {
return e;
}
public static URL toUrl(String string) throws SmackUriSyntaxParsingException, MalformedURLException {
URI uri;
try {
uri = new URI(string);
} catch (URISyntaxException e) {
throw new SmackUriSyntaxParsingException(e);
}
return uri.toURL();
}
}

View file

@ -87,7 +87,7 @@ public class EventManger<K, R, E extends Exception> {
return true;
}
private static class Reference<V> {
private static final class Reference<V> {
volatile V eventResult;
}

View file

@ -49,6 +49,7 @@ import org.jivesoftware.smackx.iot.provisioning.BecameFriendListener;
import org.jivesoftware.smackx.iot.provisioning.IoTProvisioningManager;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.jxmpp.jid.BareJid;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;

View file

@ -1,6 +1,6 @@
/**
*
* Copyright 2021 Florian Schmaus
* Copyright 2021-2024 Florian Schmaus
*
* This file is part of smack-examples.
*
@ -25,7 +25,6 @@ import java.net.URISyntaxException;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.c2s.ModularXmppClientToServerConnection;
import org.jivesoftware.smack.c2s.ModularXmppClientToServerConnectionConfiguration;
import org.jivesoftware.smack.util.TLSUtils;

View file

@ -31,6 +31,7 @@ import org.jivesoftware.smack.c2s.ModularXmppClientToServerConnection;
import org.jivesoftware.smack.c2s.ModularXmppClientToServerConnectionConfiguration;
import org.jivesoftware.smack.debugger.ConsoleDebugger;
import org.jivesoftware.smack.debugger.SmackDebuggerFactory;
import org.jivesoftware.smackx.omemo.util.OmemoConstants;
import org.jivesoftware.smackx.pep.PepManager;
import org.jivesoftware.smackx.pubsub.PubSubManager;

View file

@ -37,6 +37,7 @@ import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
import org.jivesoftware.smack.util.TLSUtils;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import org.jivesoftware.smackx.iqregister.AccountManager;

View file

@ -32,6 +32,7 @@ import org.jivesoftware.smack.util.EqualsUtil;
import org.jivesoftware.smack.util.HashCode;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smack.util.XmlStringBuilder;
import org.jivesoftware.smackx.hashes.HashManager;
import org.jivesoftware.smackx.hashes.element.HashElement;
import org.jivesoftware.smackx.thumbnails.element.ThumbnailElement;

View file

@ -25,6 +25,7 @@ import org.jivesoftware.smack.provider.ExtensionElementProvider;
import org.jivesoftware.smack.util.ParserUtils;
import org.jivesoftware.smack.xml.XmlPullParser;
import org.jivesoftware.smack.xml.XmlPullParserException;
import org.jivesoftware.smackx.file_metadata.element.FileMetadataElement;
import org.jivesoftware.smackx.hashes.element.HashElement;
import org.jivesoftware.smackx.hashes.provider.HashElementProvider;

View file

@ -160,7 +160,7 @@ public abstract class AbstractHttpOverXmppProvider<H extends AbstractHttpOverXmp
while (!done) {
XmlPullParser.Event eventType = parser.next();
if ((eventType == XmlPullParser.Event.END_ELEMENT) && parser.getName().equals(ELEMENT_XML)) {
if (eventType == XmlPullParser.Event.END_ELEMENT && parser.getName().equals(ELEMENT_XML)) {
done = true;
} else { // just write everything else as text

View file

@ -1,6 +1,6 @@
/**
*
* Copyright © 2017 Grigory Fedorov, 2017-2019 Florian Schmaus
* Copyright © 2017 Grigory Fedorov, 2017-2024 Florian Schmaus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -17,12 +17,14 @@
package org.jivesoftware.smackx.httpfileupload.provider;
import java.io.IOException;
import java.net.URI;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.jivesoftware.smack.packet.IqData;
import org.jivesoftware.smack.packet.XmlEnvironment;
import org.jivesoftware.smack.parsing.SmackParsingException.SmackUriSyntaxParsingException;
import org.jivesoftware.smack.provider.IqProvider;
import org.jivesoftware.smack.util.ParserUtils;
import org.jivesoftware.smack.xml.XmlPullParser;
@ -42,7 +44,7 @@ import org.jivesoftware.smackx.httpfileupload.element.Slot_V0_2;
public class SlotProvider extends IqProvider<Slot> {
@Override
public Slot parse(XmlPullParser parser, int initialDepth, IqData iqData, XmlEnvironment xmlEnvironment) throws XmlPullParserException, IOException {
public Slot parse(XmlPullParser parser, int initialDepth, IqData iqData, XmlEnvironment xmlEnvironment) throws XmlPullParserException, IOException, SmackUriSyntaxParsingException {
final String namespace = parser.getNamespace();
final UploadService.Version version = HttpFileUploadManager.namespaceToVersion(namespace);
@ -63,7 +65,7 @@ public class SlotProvider extends IqProvider<Slot> {
switch (version) {
case v0_2:
String putUrlString = parser.nextText();
putUrl = new URL(putUrlString);
putUrl = toUrl(putUrlString);
break;
case v0_3:
putElementV04Content = parsePutElement_V0_4(parser);
@ -85,7 +87,7 @@ public class SlotProvider extends IqProvider<Slot> {
default:
throw new AssertionError();
}
getUrl = new URL(getUrlString);
getUrl = toUrl(getUrlString);
break;
}
break;
@ -114,7 +116,7 @@ public class SlotProvider extends IqProvider<Slot> {
final int initialDepth = parser.getDepth();
String putUrlString = parser.getAttributeValue(null, "url");
URL putUrl = new URL(putUrlString);
URL putUrl = URI.create(putUrlString).toURL();
Map<String, String> headers = null;
outerloop: while (true) {

View file

@ -20,6 +20,7 @@ import java.util.List;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.xml.XmlPullParser;
import org.jivesoftware.smackx.forward.packet.Forwarded;
import org.jivesoftware.smackx.rsm.packet.RSMSet;
import org.jivesoftware.smackx.xdata.packet.DataForm;

View file

@ -25,6 +25,7 @@ import org.jivesoftware.smack.packet.MessageView;
import org.jivesoftware.smack.packet.XmlElement;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smack.util.XmlStringBuilder;
import org.jivesoftware.smackx.forward.packet.Forwarded;
import org.jxmpp.jid.Jid;

View file

@ -17,9 +17,11 @@
package org.jivesoftware.smackx.mam.element;
import java.util.List;
import javax.xml.namespace.QName;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smackx.forward.packet.Forwarded;
import org.jivesoftware.smackx.rsm.packet.RSMSet;
import org.jivesoftware.smackx.xdata.packet.DataForm;

View file

@ -17,9 +17,11 @@
package org.jivesoftware.smackx.mam.element;
import java.util.List;
import javax.xml.namespace.QName;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smackx.forward.packet.Forwarded;
import org.jivesoftware.smackx.rsm.packet.RSMSet;
import org.jivesoftware.smackx.xdata.packet.DataForm;

View file

@ -25,6 +25,7 @@ import org.jivesoftware.smack.provider.ExtensionElementProvider;
import org.jivesoftware.smack.util.ParserUtils;
import org.jivesoftware.smack.xml.XmlPullParser;
import org.jivesoftware.smack.xml.XmlPullParserException;
import org.jivesoftware.smackx.thumbnails.element.ThumbnailElement;
public class ThumbnailElementProvider extends ExtensionElementProvider<ThumbnailElement> {

View file

@ -26,6 +26,7 @@ import java.util.Date;
import org.jivesoftware.smack.test.util.SmackTestSuite;
import org.jivesoftware.smack.test.util.SmackTestUtil;
import org.jivesoftware.smackx.file_metadata.element.FileMetadataElement;
import org.jivesoftware.smackx.file_metadata.provider.FileMetadataElementProvider;
import org.jivesoftware.smackx.hashes.HashManager;

View file

@ -24,6 +24,7 @@ import java.io.IOException;
import org.jivesoftware.smack.parsing.SmackParsingException;
import org.jivesoftware.smack.test.util.SmackTestUtil;
import org.jivesoftware.smack.xml.XmlPullParserException;
import org.jivesoftware.smackx.thumbnails.element.ThumbnailElement;
import org.junit.jupiter.params.ParameterizedTest;

View file

@ -461,7 +461,7 @@ public class InBandBytestreamSession implements BytestreamSession {
* IQIBBInputStream class implements IBBInputStream to be used with IQ stanzas encapsulating the
* data packets.
*/
private class IQIBBInputStream extends IBBInputStream {
private final class IQIBBInputStream extends IBBInputStream {
@Override
protected StanzaListener getDataPacketListener() {
@ -541,7 +541,7 @@ public class InBandBytestreamSession implements BytestreamSession {
* MessageIBBInputStream class implements IBBInputStream to be used with message stanzas
* encapsulating the data packets.
*/
private class MessageIBBInputStream extends IBBInputStream {
private final class MessageIBBInputStream extends IBBInputStream {
@Override
protected StanzaListener getDataPacketListener() {
@ -590,7 +590,7 @@ public class InBandBytestreamSession implements BytestreamSession {
* containing an In-Band Bytestream data stanza extension whose session ID matches this sessions
* ID.
*/
private class IBBDataPacketFilter implements StanzaFilter {
private final class IBBDataPacketFilter implements StanzaFilter {
@Override
public boolean accept(Stanza packet) {
@ -814,7 +814,7 @@ public class InBandBytestreamSession implements BytestreamSession {
* IQIBBOutputStream class implements IBBOutputStream to be used with IQ stanzas encapsulating
* the data packets.
*/
private class IQIBBOutputStream extends IBBOutputStream {
private final class IQIBBOutputStream extends IBBOutputStream {
@Override
protected synchronized void writeToXML(DataPacketExtension data) throws IOException {
@ -845,7 +845,7 @@ public class InBandBytestreamSession implements BytestreamSession {
* MessageIBBOutputStream class implements IBBOutputStream to be used with message stanzas
* encapsulating the data packets.
*/
private class MessageIBBOutputStream extends IBBOutputStream {
private final class MessageIBBOutputStream extends IBBOutputStream {
@Override
protected synchronized void writeToXML(DataPacketExtension data) throws NotConnectedException, InterruptedException {

View file

@ -433,7 +433,7 @@ public class Socks5Proxy {
/**
* Implementation of a simplified SOCKS5 proxy server.
*/
private class Socks5ServerProcess implements Runnable {
private final class Socks5ServerProcess implements Runnable {
@Override
public void run() {

View file

@ -25,6 +25,7 @@ import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smack.packet.StanzaError;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.commands.packet.AdHocCommandData;
import org.jivesoftware.smackx.commands.packet.AdHocCommandData.Action;
import org.jivesoftware.smackx.commands.packet.AdHocCommandData.AllowedAction;

View file

@ -22,6 +22,7 @@ import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.util.Objects;
import org.jivesoftware.smackx.commands.packet.AdHocCommandData;
import org.jivesoftware.smackx.xdata.form.FillableForm;
import org.jivesoftware.smackx.xdata.form.SubmitForm;

View file

@ -20,6 +20,7 @@ import org.jivesoftware.smack.SmackException.NoResponseException;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smack.packet.StanzaError;
import org.jivesoftware.smackx.commands.packet.AdHocCommandData;
import org.jivesoftware.smackx.commands.packet.AdHocCommandDataBuilder;
import org.jivesoftware.smackx.xdata.form.SubmitForm;

View file

@ -17,6 +17,7 @@
package org.jivesoftware.smackx.commands;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smackx.commands.packet.AdHocCommandData;
import org.jivesoftware.smackx.xdata.form.FillableForm;
import org.jivesoftware.smackx.xdata.packet.DataForm;

View file

@ -17,6 +17,7 @@
package org.jivesoftware.smackx.muc;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.muc.packet.GroupChatInvitation;
public interface DirectMucInvitationListener {

View file

@ -29,6 +29,7 @@ import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.StanzaExtensionFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.MessageBuilder;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import org.jivesoftware.smackx.muc.packet.GroupChatInvitation;

View file

@ -18,10 +18,11 @@
package org.jivesoftware.smackx.muc;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jivesoftware.smackx.disco.packet.DiscoverInfo;
@ -215,9 +216,9 @@ public class RoomInfo {
if (urlField != null && !urlField.getValues().isEmpty()) {
String urlString = urlField.getFirstValue();
try {
logs = new URL(urlString);
} catch (MalformedURLException e) {
LOGGER.log(Level.SEVERE, "Could not parse URL", e);
logs = new URI(urlString).toURL();
} catch (MalformedURLException | URISyntaxException e) {
throw new IllegalArgumentException("Could not parse '" + urlString + "' to URL", e);
}
}

View file

@ -29,6 +29,7 @@ import org.jivesoftware.smack.provider.ExtensionElementProvider;
import org.jivesoftware.smack.util.ParserUtils;
import org.jivesoftware.smack.xml.XmlPullParser;
import org.jivesoftware.smack.xml.XmlPullParserException;
import org.jivesoftware.smackx.muc.packet.GroupChatInvitation;
import org.jxmpp.jid.EntityBareJid;

View file

@ -20,6 +20,7 @@ import java.util.List;
import org.jivesoftware.smack.util.EqualsUtil;
import org.jivesoftware.smack.util.HashCode;
import org.jivesoftware.smackx.formtypes.FormFieldRegistry;
import org.jivesoftware.smackx.mediaelement.element.MediaElement;
import org.jivesoftware.smackx.xdata.FormField;

View file

@ -28,7 +28,7 @@ public interface FormFieldWithOptions {
*/
List<FormField.Option> getOptions();
public interface Builder<B extends FormField.Builder<?, ?>> {
interface Builder<B extends FormField.Builder<?, ?>> {
default B addOption(String option) {
return addOption(new FormField.Option(option));

View file

@ -29,6 +29,7 @@ import javax.xml.namespace.QName;
import org.jivesoftware.smack.packet.XmlEnvironment;
import org.jivesoftware.smack.parsing.SmackParsingException;
import org.jivesoftware.smack.parsing.SmackParsingException.RequiredValueMissingException;
import org.jivesoftware.smack.provider.ExtensionElementProvider;
import org.jivesoftware.smack.roster.packet.RosterPacket;
import org.jivesoftware.smack.roster.provider.RosterPacketProvider;
@ -185,10 +186,9 @@ public class DataFormProvider extends ExtensionElementProvider<DataForm> {
FormField.Type type = null;
{
String fieldTypeString = parser.getAttributeValue("type");
if (fieldTypeString != null) {
// FormField.Type.fromString() will return null if its input is null.
type = FormField.Type.fromString(fieldTypeString);
}
}
List<FormField.Value> values = new ArrayList<>();
List<FormField.Option> options = new ArrayList<>();
@ -238,6 +238,14 @@ public class DataFormProvider extends ExtensionElementProvider<DataForm> {
}
}
if (type != FormField.Type.fixed && fieldName == null) {
String typeString = "unspecified";
if (type != null) {
typeString = type.toString();
}
throw new RequiredValueMissingException("The data form field of " + typeString + " type has no 'var' attribute, even though one is required as per XEP-0004 § 3.2");
}
if (type == null) {
// The field name 'FORM_TYPE' is magic.
if (fieldName.equals(FormField.FORM_TYPE)) {

View file

@ -46,6 +46,7 @@ import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.StanzaError;
import org.jivesoftware.smack.test.util.NetworkUtil;
import org.jivesoftware.smack.util.ExceptionUtil;
import org.jivesoftware.smackx.bytestreams.ibb.IBBPacketUtils;
import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream;
import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream.StreamHost;

View file

@ -33,6 +33,7 @@ import org.jivesoftware.smack.packet.EmptyResultIQ;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.StanzaError;
import org.jivesoftware.smack.util.CloseableUtil;
import org.jivesoftware.smackx.bytestreams.ibb.IBBPacketUtils;
import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream;
import org.jivesoftware.smackx.bytestreams.socks5.packet.Bytestream.StreamHost;

View file

@ -31,6 +31,7 @@ import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.test.util.SmackTestSuite;
import org.jivesoftware.smack.test.util.WaitForPacketListener;
import org.jivesoftware.smackx.muc.packet.GroupChatInvitation;
import org.jivesoftware.smackx.muc.packet.MUCUser;
import org.jivesoftware.smackx.muc.packet.MUCUser.Invite;

View file

@ -24,6 +24,7 @@ import java.io.IOException;
import org.jivesoftware.smack.parsing.SmackParsingException;
import org.jivesoftware.smack.test.util.TestUtils;
import org.jivesoftware.smack.xml.XmlPullParserException;
import org.jivesoftware.smackx.muc.provider.GroupChatInvitationProvider;
import org.junit.jupiter.api.Test;

View file

@ -96,7 +96,7 @@ public class DeliveryReceiptTest extends SmackTestSuite {
rrl.waitUntilInvocationOrTimeout();
}
private static class TestReceiptReceivedListener extends WaitForPacketListener implements ReceiptReceivedListener {
private static final class TestReceiptReceivedListener extends WaitForPacketListener implements ReceiptReceivedListener {
@Override
public void onReceiptReceived(Jid fromJid, Jid toJid, String receiptId, Stanza receipt) {
assertThat("julia@capulet.com", equalsCharSequence(fromJid));

View file

@ -17,11 +17,13 @@
package org.jivesoftware.smackx.xdata.provider;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.io.IOException;
import java.util.List;
import org.jivesoftware.smack.parsing.SmackParsingException;
import org.jivesoftware.smack.test.util.SmackTestUtil;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.jivesoftware.smack.xml.XmlPullParser;
import org.jivesoftware.smack.xml.XmlPullParserException;
@ -30,6 +32,8 @@ import org.jivesoftware.smackx.xdata.FormField;
import org.jivesoftware.smackx.xdata.packet.DataForm;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
public class DataFormProviderTest {
@ -144,4 +148,14 @@ public class DataFormProviderTest {
assertEquals(FormField.Type.hidden, usernameFormField.getType());
assertEquals("", usernameFormField.getLabel());
}
@ParameterizedTest
@EnumSource(SmackTestUtil.XmlPullParserKind.class)
public void testShouldThrowSmackParsingException(SmackTestUtil.XmlPullParserKind parserKind) {
String form = "<x xmlns='jabber:x:data' type='form'>"
+ "<field/>"
+ "</x>";
SmackParsingException.RequiredValueMissingException exception = assertThrows(SmackParsingException.RequiredValueMissingException.class, () -> SmackTestUtil.parse(form, DataFormProvider.class, parserKind));
assertEquals("The data form field of unspecified type has no 'var' attribute, even though one is required as per XEP-0004 § 3.2", exception.getMessage());
}
}

View file

@ -1557,6 +1557,9 @@ public final class Roster extends Manager {
* Ignore ItemTypes as of RFC 6121, 2.1.2.5.
*
* This is used by {@link RosterPushListener} and {@link RosterResultListener}.
*
* @param item the roster item to check
* @return <code>true</code> if the item type should be ignored
* */
private static boolean hasValidSubscriptionType(RosterPacket.Item item) {
switch (item.getItemType()) {
@ -1615,7 +1618,7 @@ public final class Roster extends Manager {
/**
* Listens for all presence packets and processes them.
*/
private class PresencePacketListener implements StanzaListener {
private final class PresencePacketListener implements StanzaListener {
@Override
public void processStanza(Stanza packet) throws NotConnectedException, InterruptedException {
@ -1790,7 +1793,7 @@ public final class Roster extends Manager {
/**
* Handles Roster results as described in <a href="https://tools.ietf.org/html/rfc6121#section-2.1.4">RFC 6121 2.1.4</a>.
*/
private class RosterResultListener implements SuccessCallback<IQ> {
private final class RosterResultListener implements SuccessCallback<IQ> {
@Override
public void onSuccess(IQ packet) {

View file

@ -396,7 +396,7 @@ public class ChatConnectionTest {
}
}
private static class TestMessageListener implements ChatMessageListener {
private static final class TestMessageListener implements ChatMessageListener {
private Chat msgChat;
private int counter = 0;

View file

@ -13,6 +13,7 @@ application {
dependencies {
api project(':smack-java11-full')
api project(':smack-websocket-okhttp')
api project(':smack-resolver-dnsjava')
implementation project(':smack-websocket-java11')
implementation "com.google.guava:guava:${guavaVersion}"

View file

@ -44,6 +44,7 @@ import org.jivesoftware.smackx.jiveproperties.packet.JivePropertiesExtension;
import org.igniterealtime.smack.XmppConnectionStressTest.StressTestFailedException.ErrorsWhileSendingOrReceivingException;
import org.igniterealtime.smack.XmppConnectionStressTest.StressTestFailedException.NotAllMessagesReceivedException;
import org.jxmpp.jid.EntityFullJid;
public class XmppConnectionStressTest {

View file

@ -392,12 +392,12 @@ public final class Configuration {
}
public Builder setEnabledTests(String enabledTestsString) {
enabledTests = getTestSetFrom(enabledTestsString);
enabledTests = getTestSetFrom(enabledTestsString, "enabled");
return this;
}
public Builder setDisabledTests(String disabledTestsString) {
disabledTests = getTestSetFrom(disabledTestsString);
disabledTests = getTestSetFrom(disabledTestsString, "disabled");
return this;
}
@ -625,7 +625,8 @@ public final class Configuration {
return res;
}
private static Set<String> getTestSetFrom(String input) {
private static Set<String> getTestSetFrom(String input, String name) {
StringUtils.requireNullOrNotEmpty(input, "Most provide a value for " + name + " tests");
return split(input, s -> {
s = s.trim();
if (s.startsWith("smackx.") || s.startsWith("smack.")) {

View file

@ -74,6 +74,7 @@ import org.igniterealtime.smack.inttest.annotations.AfterClass;
import org.igniterealtime.smack.inttest.annotations.BeforeClass;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.reflections.Reflections;
import org.reflections.scanners.MethodAnnotationsScanner;
import org.reflections.scanners.MethodParameterScanner;
@ -150,8 +151,15 @@ public class SmackIntegrationTestFramework {
LOGGER.info("SmackIntegrationTestFramework[" + testRunResult.testRunId + ']' + " finished: "
+ successfulTests + '/' + availableTests + " [" + failedTests + " failed]");
if (failedTests > 0) {
LOGGER.warning("💀 The following " + failedTests + " tests failed! 💀");
if (failedTests == 0) {
LOGGER.info("All possible Smack Integration Tests completed successfully. \\o/");
return;
}
StringBuilder sb = new StringBuilder("💀 The following " + failedTests + " tests failed! 💀\n -");
StringUtils.appendTo(testRunResult.failedIntegrationTests, "\n- ", sb, t -> sb.append(t.concreteTest));
LOGGER.warning(sb.toString());
final SortedSet<String> bySpecification = new TreeSet<>();
for (FailedTest failedTest : testRunResult.failedIntegrationTests) {
final Throwable cause = failedTest.failureReason;
@ -166,9 +174,6 @@ public class SmackIntegrationTestFramework {
if (!bySpecification.isEmpty()) {
LOGGER.log(Level.SEVERE, "The failed tests correspond to the following specifications:" + System.lineSeparator() + String.join(System.lineSeparator(), bySpecification));
}
} else {
LOGGER.info("All possible Smack Integration Tests completed successfully. \\o/");
}
}
}

View file

@ -47,11 +47,13 @@ import org.jivesoftware.smack.util.MultiMap;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smack.websocket.java11.Java11WebSocketFactory;
import org.jivesoftware.smack.websocket.okhttp.OkHttpWebSocketFactory;
import org.jivesoftware.smackx.admin.ServiceAdministrationManager;
import org.jivesoftware.smackx.iqregister.AccountManager;
import org.igniterealtime.smack.inttest.Configuration.AccountRegistration;
import org.igniterealtime.smack.inttest.SmackIntegrationTestFramework.AccountNum;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;
import org.jxmpp.jid.parts.Localpart;

View file

@ -32,6 +32,7 @@ import org.igniterealtime.smack.inttest.AbstractSmackSpecificLowLevelIntegration
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
import org.igniterealtime.smack.inttest.TestNotPossibleException;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.jxmpp.jid.EntityFullJid;
public class StreamManagementTest extends AbstractSmackSpecificLowLevelIntegrationTest<XMPPTCPConnection> {

View file

@ -22,6 +22,7 @@ import org.jivesoftware.smack.util.StringUtils;
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.jxmpp.jid.EntityBareJid;
public class IncomingMessageListenerIntegrationTest extends AbstractChatIntegrationTest {

View file

@ -23,6 +23,7 @@ import org.jivesoftware.smack.util.StringUtils;
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.jxmpp.jid.EntityBareJid;
public class OutgoingMessageListenerIntegrationTest extends AbstractChatIntegrationTest {

View file

@ -26,6 +26,7 @@ import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.jxmpp.jid.FullJid;
public class LowLevelRosterIntegrationTest extends AbstractSmackLowLevelIntegrationTest {

View file

@ -40,6 +40,7 @@ import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil;
import org.igniterealtime.smack.inttest.util.ResultSyncPoint;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.jxmpp.jid.BareJid;
import org.jxmpp.jid.Jid;

View file

@ -24,6 +24,7 @@ import org.jivesoftware.smack.SmackException.NoResponseException;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smack.packet.StanzaError;
import org.jivesoftware.smackx.commands.packet.AdHocCommandData;
import org.jivesoftware.smackx.commands.packet.AdHocCommandDataBuilder;
import org.jivesoftware.smackx.commands.packet.AdHocCommandDataBuilder.NextStage;

View file

@ -26,6 +26,7 @@ import java.util.Arrays;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.filetransfer.FileTransfer.Status;
import org.igniterealtime.smack.inttest.AbstractSmackIntegrationTest;

View file

@ -36,6 +36,7 @@ import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.jxmpp.util.XmppDateTime;
@SpecificationReference(document = "XEP-0080", version = "1.9")

View file

@ -36,6 +36,7 @@ import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.jxmpp.jid.Jid;
@SpecificationReference(document = "XEP-0347", version = "0.5.1")

View file

@ -35,6 +35,7 @@ import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
import org.igniterealtime.smack.inttest.TestNotPossibleException;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.jxmpp.jid.Jid;
@SpecificationReference(document = "XEP-0347", version = "0.5.1")

View file

@ -35,6 +35,7 @@ import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.packet.StanzaBuilder;
import org.jivesoftware.smack.packet.StanzaError;
import org.jivesoftware.smackx.mam.MamManager.MamQuery;
import org.jivesoftware.smackx.mam.MamManager.MamQueryArgs;
@ -44,6 +45,7 @@ import org.igniterealtime.smack.inttest.TestNotPossibleException;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.jxmpp.jid.EntityBareJid;
@SpecificationReference(document = "XEP-0313", version = "0.6.3")

View file

@ -25,6 +25,7 @@ import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smack.packet.StanzaError;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.muc.MultiUserChatException.MissingMucCreationAcknowledgeException;
import org.jivesoftware.smackx.muc.MultiUserChatException.MucAlreadyJoinedException;
import org.jivesoftware.smackx.muc.MultiUserChatException.NotAMucServiceException;
@ -34,6 +35,7 @@ import org.jivesoftware.smackx.xdata.form.Form;
import org.igniterealtime.smack.inttest.AbstractSmackIntegrationTest;
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
import org.igniterealtime.smack.inttest.TestNotPossibleException;
import org.jxmpp.jid.DomainBareJid;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;
@ -105,7 +107,7 @@ public abstract class AbstractMultiUserChatIntegrationTest extends AbstractSmack
* @throws XmppStringprepException if the prefix isn't a valid XMPP Localpart
*/
public EntityBareJid getRandomRoom(String prefix) throws XmppStringprepException {
final String roomNameLocal = String.join("-", prefix, testRunId, StringUtils.insecureRandomString(6));
final String roomNameLocal = String.join("-", "sinttest", prefix, testRunId, StringUtils.insecureRandomString(3));
return JidCreate.entityBareFrom(Localpart.from(roomNameLocal), mucService.getDomain());
}

View file

@ -28,6 +28,7 @@ import java.util.Map;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.StanzaError;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import org.jivesoftware.smackx.disco.packet.DiscoverInfo;
import org.jivesoftware.smackx.disco.packet.DiscoverItems;
@ -97,7 +98,7 @@ public class MultiUserChatEntityIntegrationTest extends AbstractMultiUserChatInt
"service. The service SHOULD return a full list of the public rooms it hosts (i.e., not return any rooms that" +
"are hidden).")
public void mucTestForDiscoveringRooms() throws Exception {
EntityBareJid mucAddressPublic = getRandomRoom("smack-inttest-publicroom");
EntityBareJid mucAddressPublic = getRandomRoom("publicroom");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddressPublic);
EntityBareJid mucAddressHidden = getRandomRoom("smack-inttest-hiddenroom");
@ -127,7 +128,7 @@ public class MultiUserChatEntityIntegrationTest extends AbstractMultiUserChatInt
"Using the disco#info protocol, an entity may also query a specific chat room for more detailed information " +
"about the room....The room MUST return its identity and SHOULD return the features it supports")
public void mucTestForDiscoveringRoomInfo() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-discoinfo");
EntityBareJid mucAddress = getRandomRoom("discoinfo");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
createMuc(mucAsSeenByOne, Resourcepart.from("one-" + randomString));
@ -154,7 +155,7 @@ public class MultiUserChatEntityIntegrationTest extends AbstractMultiUserChatInt
"of existing occupants if that information is publicly available, or return no list at all if this " +
"information is kept private.")
public void mucTestForDiscoveringRoomItems() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-discoitems");
EntityBareJid mucAddress = getRandomRoom("discoitems");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
createMuc(mucAsSeenByOne, Resourcepart.from("one-" + randomString));
@ -178,7 +179,7 @@ public class MultiUserChatEntityIntegrationTest extends AbstractMultiUserChatInt
"If a non-occupant attempts to send a disco request to an address of the form <room@service/nick>, a MUC " +
"service MUST return a <bad-request> error")
public void mucTestForRejectingDiscoOnRoomOccupantByNonOccupant() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-discoitems");
EntityBareJid mucAddress = getRandomRoom("discoitems");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
final Resourcepart nicknameOne = Resourcepart.from("one-" + randomString);
createMuc(mucAsSeenByOne, nicknameOne);

View file

@ -32,6 +32,7 @@ import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.StanzaError;
import org.jivesoftware.smackx.muc.MultiUserChatException.MissingMucCreationAcknowledgeException;
import org.jivesoftware.smackx.muc.MultiUserChatException.MucAlreadyJoinedException;
import org.jivesoftware.smackx.muc.MultiUserChatException.MucConfigurationNotSupportedException;
@ -42,6 +43,7 @@ import org.igniterealtime.smack.inttest.TestNotPossibleException;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.parts.Resourcepart;
import org.jxmpp.stringprep.XmppStringprepException;
@ -57,7 +59,7 @@ public class MultiUserChatIntegrationTest extends AbstractMultiUserChatIntegrati
@SmackIntegrationTest
public void mucTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-message");
EntityBareJid mucAddress = getRandomRoom("message");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -98,7 +100,7 @@ public class MultiUserChatIntegrationTest extends AbstractMultiUserChatIntegrati
"users from the room... and destroys the room")
public void mucDestroyOwnerTest() throws TimeoutException, Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-destroy-owner");
EntityBareJid mucAddress = getRandomRoom("destroy-owner");
MultiUserChat muc = mucManagerOne.getMultiUserChat(mucAddress);
createMuc(muc, Resourcepart.from("one-" + randomString));
@ -145,7 +147,7 @@ public class MultiUserChatIntegrationTest extends AbstractMultiUserChatIntegrati
"users from the room... and destroys the room")
public void mucDestroyTestOccupant() throws TimeoutException, Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-destroy-occupant");
EntityBareJid mucAddress = getRandomRoom("destroy-occupant");
MultiUserChat mucAsSeenByOwner = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByParticipant = mucManagerTwo.getMultiUserChat(mucAddress);
@ -189,7 +191,7 @@ public class MultiUserChatIntegrationTest extends AbstractMultiUserChatIntegrati
throws XmppStringprepException, MucAlreadyJoinedException, MissingMucCreationAcknowledgeException,
NotAMucServiceException, NoResponseException, XMPPErrorException, NotConnectedException,
InterruptedException, MucConfigurationNotSupportedException {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-muc-name-change");
EntityBareJid mucAddress = getRandomRoom("muc-name-change");
MultiUserChat muc = mucManagerOne.getMultiUserChat(mucAddress);
createMuc(muc, Resourcepart.from("one-" + randomString));
@ -214,7 +216,7 @@ public class MultiUserChatIntegrationTest extends AbstractMultiUserChatIntegrati
public void mucTestVisitorNotAllowedToChangeSubject() throws XmppStringprepException, MucAlreadyJoinedException,
MissingMucCreationAcknowledgeException, NotAMucServiceException, NoResponseException,
XMPPErrorException, NotConnectedException, InterruptedException, TestNotPossibleException {
final EntityBareJid mucAddress = getRandomRoom("smack-inttest-visitor-change-subject");
final EntityBareJid mucAddress = getRandomRoom("visitor-change-subject");
final MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
final MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -250,7 +252,7 @@ public class MultiUserChatIntegrationTest extends AbstractMultiUserChatIntegrati
public void mucTestChangeRoomName() throws XmppStringprepException, MucAlreadyJoinedException,
MissingMucCreationAcknowledgeException, NotAMucServiceException, NoResponseException,
XMPPErrorException, NotConnectedException, InterruptedException, TestNotPossibleException {
final EntityBareJid mucAddress = getRandomRoom("smack-inttest-change-room-name");
final EntityBareJid mucAddress = getRandomRoom("change-room-name");
final MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
final Resourcepart nicknameOne = Resourcepart.from("one-" + randomString);

View file

@ -34,6 +34,7 @@ import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
import org.igniterealtime.smack.inttest.TestNotPossibleException;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.jxmpp.jid.DomainBareJid;
import org.jxmpp.jid.impl.JidCreate;
import org.jxmpp.jid.parts.Localpart;

View file

@ -41,6 +41,7 @@ import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.packet.StanzaError;
import org.jivesoftware.smack.sm.predicates.ForEveryMessage;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.muc.MultiUserChatException.MissingMucCreationAcknowledgeException;
import org.jivesoftware.smackx.muc.MultiUserChatException.MucAlreadyJoinedException;
import org.jivesoftware.smackx.muc.MultiUserChatException.MucConfigurationNotSupportedException;
@ -49,6 +50,7 @@ import org.jivesoftware.smackx.muc.packet.MUCItem;
import org.jivesoftware.smackx.muc.packet.MUCUser;
import org.igniterealtime.smack.inttest.Configuration;
import org.igniterealtime.smack.inttest.Configuration.CompatibilityMode;
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
import org.igniterealtime.smack.inttest.TestNotPossibleException;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
@ -56,6 +58,7 @@ import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.igniterealtime.smack.inttest.util.MultiResultSyncPoint;
import org.igniterealtime.smack.inttest.util.ResultSyncPoint;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;
import org.jxmpp.jid.parts.Resourcepart;
@ -83,7 +86,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
// stanzas arrive. Instead, it joins a chatroom and listens for its stanzas using basic stanza handling. As
// this uses exactly one stanza listener, that's guaranteed to be invoked in order of stanza arrival, which is
// not necessarily the case when using the MUC API.
EntityBareJid mucAddress = getRandomRoom("smack-inttest-eventordering");
EntityBareJid mucAddress = getRandomRoom("eventordering");
final String mucSubject = "Subject smack-inttest-eventordering " + randomString;
final String mucMessage = "Message smack-inttest-eventordering " + randomString;
@ -114,8 +117,13 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
final List<Stanza> results = new ArrayList<>();
final StanzaListener stanzaListener = stanza -> {
results.add(stanza);
if (stanza instanceof Message && ((Message) stanza).getSubject() != null) {
subjectResultSyncPoint.signal(((Message) stanza).getSubject());
// TODO: Use pattern matching for instanceof once Smack is Java 16 or higher.
if (stanza instanceof Message) {
Message message = (Message) stanza;
String subject = message.getSubject();
if (subject != null) {
subjectResultSyncPoint.signal(subject);
}
}
};
conTwo.addStanzaListener(stanzaListener, FromMatchesFilter.create(mucAddress));
@ -125,7 +133,12 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
subjectResultSyncPoint.waitForResult(timeout); // Wait for subject, as it should be 4th (last)
assertEquals(4, results.size(), "Unexpected amount of stanzas received by '" + conTwo.getUser() + "' after it joined room '" + mucAddress + "'.");
if (sinttestConfiguration.compatibilityMode == CompatibilityMode.ejabberd) {
// ejabberd MUCs also send their own presence with caps information as very first presence.
results.remove(0);
}
assertEquals(4, results.size(), "Unexpected amount of stanzas received by '" + conTwo.getUser() + "' after it joined room '" + mucAddress + "'. Results: " + results);
assertTrue(results.get(0) instanceof Presence, "Expected the first stanza that was received by '" + conTwo.getUser() + "' after it joined room '" + mucAddress + "' to be a presence stanza (but it was not).");
assertEquals(JidCreate.fullFrom(mucAddress, nicknameOne), results.get(0).getFrom(), "Unexpected 'from' address of the first stanza that was received by '" + conTwo.getUser() + "' after it joined room '" + mucAddress + "'.");
assertTrue(results.get(1) instanceof Presence, "Expected the second stanza that was received by '" + conTwo.getUser() + "' after it joined room '" + mucAddress + "' to be a presence stanza (but it was not).");
@ -162,7 +175,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"§ 7.2.1: In order to participate in the discussions held in a multi-user chat room, a user MUST first become an occupant by entering the room [...] " +
"§ 7.4: If the sender is not an occupant of the room, the service SHOULD return a <not-acceptable/> error to the sender and SHOULD NOT reflect the message to all occupants")
public void mucSendBeforeJoiningTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-send-without-joining");
EntityBareJid mucAddress = getRandomRoom("send-without-joining");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -202,7 +215,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"complete list of the existing occupants to the new occupant and only then send the new occupant's own " +
"presence to the new occupant.")
public void mucJoinPresenceInformationTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-presenceinfo");
EntityBareJid mucAddress = getRandomRoom("presenceinfo");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -261,7 +274,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"the service MUST also send presence from the new participant's occupant JID to the full JIDs of all the " +
"occupants (including the new occupant)")
public void mucJoinPresenceBroadcastTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-presenceinfo");
EntityBareJid mucAddress = getRandomRoom("presenceinfo");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -320,7 +333,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"full JID as shown above), the service MUST warn the user by including a status code of \"100\" in the " +
"initial presence that the room sends to the new occupant.")
public void mucJoinNonAnonymousRoomTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-joinnonanonymousroom");
EntityBareJid mucAddress = getRandomRoom("joinnonanonymousroom");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -377,7 +390,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"option), but MUST include the new occupant's full JID only in the presence notifications it sends to " +
"occupants with a role of \"moderator\" and not to non-moderator occupants.")
public void mucJoinSemiAnonymousRoomReceivedByNonModeratorTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-seminanonymous-by-non-moderator");
EntityBareJid mucAddress = getRandomRoom("seminanonymous-by-non-moderator");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -423,7 +436,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"option), but MUST include the new occupant's full JID only in the presence notifications it sends to " +
"occupants with a role of \"moderator\" and not to non-moderator occupants.")
public void mucJoinSemiAnonymousRoomReceivedByModeratorTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-seminanonymous-by-moderator");
EntityBareJid mucAddress = getRandomRoom("seminanonymous-by-moderator");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -467,7 +480,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"service MUST deny access to the room and inform the user that they are unauthorized; this is done by returning " +
"a presence stanza of type \"error\" specifying a <not-authorized/> error.")
public void mucJoinPasswordProtectedWithoutPasswordRoomTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-enterpasswordprotectedroom");
EntityBareJid mucAddress = getRandomRoom("enterpasswordprotectedroom");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -503,7 +516,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"service MUST deny access to the room and inform the user that they are unauthorized; this is done by returning " +
"a presence stanza of type \"error\" specifying a <not-authorized/> error.")
public void mucJoinPasswordProtectedRoomWrongPasswordTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-enterpasswordprotectedroom");
EntityBareJid mucAddress = getRandomRoom("enterpasswordprotectedroom");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -540,7 +553,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"service MUST deny access to the room and inform the user that they are unauthorized; this is done by returning " +
"a presence stanza of type \"error\" specifying a <not-authorized/> error.")
public void mucJoinPasswordProtectedRoomCorrectPasswordTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-enterpasswordprotectedroom");
EntityBareJid mucAddress = getRandomRoom("enterpasswordprotectedroom");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -582,7 +595,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"room and inform the user that they are not allowed to enter the room; this is done by returning a presence " +
"stanza of type \"error\" specifying a <registration-required/> error condition.")
public void mucJoinMembersOnlyRoomTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-entermembersonlyroom");
EntityBareJid mucAddress = getRandomRoom("entermembersonlyroom");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -620,7 +633,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"access to the room and inform the user of the fact that they are banned; this is done by returning a presence " +
"stanza of type \"error\" specifying a <forbidden/> error condition.")
public void mucBannedUserJoinRoomTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-banneduser");
EntityBareJid mucAddress = getRandomRoom("banneduser");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -656,7 +669,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"room and inform the user of the conflict; this is done by returning a presence stanza of type \"error\" " +
"specifying a <conflict/> error condition.")
public void mucNicknameConflictJoinRoomTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-nicknameclash");
EntityBareJid mucAddress = getRandomRoom("nicknameclash");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -690,7 +703,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"specifying a <service-unavailable/> error condition. Alternatively, the room could kick an \"idle user\" " +
"in order to free up space (where the definition of \"idle user\" is up to the implementation).")
public void mucMaxUsersLimitJoinRoomTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-maxusersreached");
EntityBareJid mucAddress = getRandomRoom("maxusersreached");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -769,7 +782,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"room MUST allow the admin or owner to join, up to some reasonable number of additional occupants; this " +
"helps to prevent denial of service attacks caused by stuffing the room with non-admin users.")
public void mucMaxUsersLimitAdminCanStillJoinRoomTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-maxusersreached-adminjoin");
EntityBareJid mucAddress = getRandomRoom("maxusersreached-adminjoin");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -821,7 +834,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"room MUST allow the admin or owner to join, up to some reasonable number of additional occupants; this " +
"helps to prevent denial of service attacks caused by stuffing the room with non-admin users.")
public void mucMaxUsersLimitOwnerCanStillJoinRoomTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-maxusersreached-ownerjoin");
EntityBareJid mucAddress = getRandomRoom("maxusersreached-ownerjoin");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -878,7 +891,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
throw new TestNotPossibleException("ejabberd does not implement MUC locked rooms as per XEP-0045 § 7.2.10");
}
EntityBareJid mucAddress = getRandomRoom("smack-inttest-lockedroom");
EntityBareJid mucAddress = getRandomRoom("lockedroom");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -915,7 +928,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"discussions are logged. This is done by including a status code of \"170\" in the initial presence that the " +
"room sends to the new occupant.")
public void mucJoinRoomWithPublicLoggingTest() throws Exception {
final EntityBareJid mucAddress = getRandomRoom("smack-inttest-publiclogging");
final EntityBareJid mucAddress = getRandomRoom("publiclogging");
final MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
final MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -956,7 +969,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"case, nick='oldhag') - A status code of 303 This enables the recipients to correlate the old roomnick with " +
"the new roomnick.\n")
public void mucChangeNicknameInformationTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-changenickname");
EntityBareJid mucAddress = getRandomRoom("changenickname");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -1051,7 +1064,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"service MUST deny the nickname change request and inform the user of the conflict; this is done by " +
"returning a presence stanza of type \"error\" specifying a <conflict/> error condition:")
public void mucBlockChangeNicknameInformationTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-blockchangenickname");
EntityBareJid mucAddress = getRandomRoom("blockchangenickname");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -1096,7 +1109,7 @@ public class MultiUserChatOccupantIntegrationTest extends AbstractMultiUserChatI
"JID to the departing occupant's full JIDs, including a status code of \"110\" to indicate that this " +
"notification is \"self-presence\"")
public void mucLeaveTest() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-leave");
EntityBareJid mucAddress = getRandomRoom("leave");
MultiUserChat muc = mucManagerOne.getMultiUserChat(mucAddress);
try {

View file

@ -32,6 +32,7 @@ import java.util.stream.Collectors;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smackx.muc.MultiUserChatException.MissingMucCreationAcknowledgeException;
import org.jivesoftware.smackx.muc.MultiUserChatException.MucAlreadyJoinedException;
import org.jivesoftware.smackx.muc.MultiUserChatException.NotAMucServiceException;
@ -43,6 +44,7 @@ import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.igniterealtime.smack.inttest.util.ResultSyncPoint;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.EntityFullJid;
import org.jxmpp.jid.Jid;
@ -70,7 +72,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"communicate the change to all occupants [...] (§ 9.6) The service MUST then send updated presence from this " +
"individual to all occupants, indicating the addition of moderator status...")
public void mucRoleTestForReceivingModerator() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -109,7 +111,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"communicate the change to all occupants [...] (§ 9.6) The service MUST then send updated presence from this " +
"individual to all occupants, indicating the addition of moderator status...")
public void mucRoleTestForWitnessingModerator() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -150,7 +152,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"communicate the change to all occupants [...] (§ 9.7) The service MUST then send updated presence from this " +
"individual to all occupants, indicating the removal of moderator status...")
public void mucRoleTestForRemovingModerator() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -188,7 +190,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"communicate the change to all occupants [...] (§ 9.7) The service MUST then send updated presence from this " +
"individual to all occupants, indicating the removal of moderator status...")
public void mucRoleTestForWitnessingModeratorRemoval() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -228,7 +230,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"communicate the change to all occupants [...] (§ 8.4) The service MUST then send updated presence from " +
"this individual to all occupants, indicating the removal of voice privileges...")
public void mucRoleTestForRevokingVoice() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -263,7 +265,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"communicate the change to all occupants [...] (§ 8.4) The service MUST then send updated presence from " +
"this individual to all occupants, indicating the removal of voice privileges...")
public void mucRoleTestForWitnessingRevokingVoice() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -302,7 +304,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"communicate that to all occupants [...] (§ 10.6) If the user is in the room, the service MUST then send " +
"updated presence from this individual to all occupants, indicating the granting of admin status...")
public void mucAffiliationTestForReceivingAdmin() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -341,7 +343,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"communicate that to all occupants [...] (§ 10.6) If the user is in the room, the service MUST then send " +
"updated presence from this individual to all occupants, indicating the granting of admin status...")
public void mucAffiliationTestForWitnessingAdmin() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -381,7 +383,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"updated presence from this individual to all occupants, indicating the loss of admin status by sending a " +
"presence element...")
public void mucAffiliationTestForRemovingAdmin() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -431,7 +433,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"updated presence from this individual to all occupants, indicating the loss of admin status by sending a " +
"presence element...")
public void mucAffiliationTestForWitnessingAdminRemoval() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -473,7 +475,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"presence information, optionally along with the reason (if provided) and the roomnick or bare JID of the " +
"user who initiated the kick.")
public void mucPresenceTestForGettingKicked() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -517,7 +519,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"(<room@service/nick>) to all the remaining occupants (just as it does when occupants exit the room of their " +
"own volition), including the status code and optionally the reason and actor.")
public void mucPresenceTestForWitnessingKick() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -564,7 +566,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"affected by happenings in the room...Affiliations are granted, revoked, and maintained based on the user's " +
"bare JID, not the nick as with roles.")
public void mucTestPersistentAffiliation() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -605,7 +607,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"moderator attempts to revoke voice privileges from such a user, the service MUST deny the request and return " +
"a <not-allowed/> error to the sender along with the offending item(s)")
public void mucTestModeratorCannotRevokeVoiceFromOwner() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -637,7 +639,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
"than themselves (i.e., an unaffiliated moderator SHOULD NOT be allowed to revoke moderation privileges from " +
"an admin or an owner, and an admin SHOULD NOT be allowed to revoke moderation privileges from an owner)")
public void mucTestModeratorCannotBeRevokedFromHigherAffiliation() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest");
EntityBareJid mucAddress = getRandomRoom("inttest");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -683,7 +685,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
@SmackIntegrationTest(section = "5.1.2", quote =
"...the initial default roles that a service SHOULD set based on the user's affiliation...")
public void mucTestDefaultRoleForAffiliationInUnmoderatedRoom() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-unmoderatedroles");
EntityBareJid mucAddress = getRandomRoom("unmoderatedroles");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -736,7 +738,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
@SmackIntegrationTest(section = "5.1.2", quote =
"...the initial default roles that a service SHOULD set based on the user's affiliation...")
public void mucTestDefaultRoleForAffiliationInModeratedRoom() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-moderatedroles");
EntityBareJid mucAddress = getRandomRoom("moderatedroles");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);
@ -799,7 +801,7 @@ public class MultiUserChatRolesAffiliationsPrivilegesIntegrationTest extends Abs
@SmackIntegrationTest(section = "5.1.2", quote =
"...the initial default roles that a service SHOULD set based on the user's affiliation...")
public void mucTestDefaultRoleForAffiliationInMembersOnlyRoom() throws Exception {
EntityBareJid mucAddress = getRandomRoom("smack-inttest-membersonlyroles");
EntityBareJid mucAddress = getRandomRoom("membersonlyroles");
MultiUserChat mucAsSeenByOne = mucManagerOne.getMultiUserChat(mucAddress);
MultiUserChat mucAsSeenByTwo = mucManagerTwo.getMultiUserChat(mucAddress);

View file

@ -24,6 +24,7 @@ import org.igniterealtime.smack.inttest.TestNotPossibleException;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.EntityFullJid;
import org.jxmpp.jid.impl.JidCreate;
@ -48,7 +49,7 @@ public class ParticipantStatusIntegrationTest extends AbstractMultiUserChatInteg
@SmackIntegrationTest(section = "9.4", quote = "An admin might want to revoke a user's membership [...] The service MUST then send updated presence from this individual to all occupants, indicating the loss of membership by sending a presence element that contains an <x/> element qualified by the 'http://jabber.org/protocol/muc#user' namespace and containing an <item/> child with the 'affiliation' attribute set to a value of \"none\".")
public void testMembershipRevokedInOpenRoom() throws Exception {
// Setup test fixture.
final EntityBareJid mucAddress = getRandomRoom("smack-inttest-participantstatus-membership-revoked-open");
final EntityBareJid mucAddress = getRandomRoom("participantstatus-membership-revoked-open");
final MultiUserChat mucAsSeenByOwner = mucManagerOne.getMultiUserChat(mucAddress);
final MultiUserChat mucAsSeenByTarget = mucManagerTwo.getMultiUserChat(mucAddress);
@ -89,7 +90,7 @@ public class ParticipantStatusIntegrationTest extends AbstractMultiUserChatInteg
@SmackIntegrationTest(section = "9.4", quote = "An admin might want to revoke a user's membership [...] If the room is members-only, the service MUST remove the user from the room, including a status code of 321 to indicate that the user was removed because of an affiliation change, and inform all remaining occupants")
public void testMembershipRevokedInMemberOnlyRoom() throws Exception {
// Setup test fixture.
final EntityBareJid mucAddress = getRandomRoom("smack-inttest-participantstatus-membership-revoked-membersonly");
final EntityBareJid mucAddress = getRandomRoom("participantstatus-membership-revoked-membersonly");
final MultiUserChat mucAsSeenByOwner = mucManagerOne.getMultiUserChat(mucAddress);
final MultiUserChat mucAsSeenByTarget = mucManagerTwo.getMultiUserChat(mucAddress);

View file

@ -19,6 +19,7 @@ package org.jivesoftware.smackx.muc;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smackx.muc.packet.MUCUser;
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
@ -26,6 +27,7 @@ import org.igniterealtime.smack.inttest.TestNotPossibleException;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.EntityFullJid;
import org.jxmpp.jid.impl.JidCreate;
@ -50,7 +52,7 @@ public class UserStatusIntegrationTest extends AbstractMultiUserChatIntegrationT
@SmackIntegrationTest(section = "9.4", quote = "An admin might want to revoke a user's membership [...] The service MUST then send updated presence from this individual to all occupants, indicating the loss of membership by sending a presence element that contains an <x/> element qualified by the 'http://jabber.org/protocol/muc#user' namespace and containing an <item/> child with the 'affiliation' attribute set to a value of \"none\".")
public void testMembershipRevokedInOpenRoom() throws Exception {
// Setup test fixture.
final EntityBareJid mucAddress = getRandomRoom("smack-inttest-userstatus-membership-revoked-membersonly");
final EntityBareJid mucAddress = getRandomRoom("userstatus-membership-revoked-membersonly");
final MultiUserChat mucAsSeenByOwner = mucManagerOne.getMultiUserChat(mucAddress);
final MultiUserChat mucAsSeenByTarget = mucManagerTwo.getMultiUserChat(mucAddress);
@ -89,7 +91,7 @@ public class UserStatusIntegrationTest extends AbstractMultiUserChatIntegrationT
@SmackIntegrationTest(section = "9.4", quote = "An admin might want to revoke a user's membership [...] If the room is members-only, the service MUST remove the user from the room, including a status code of 321 to indicate that the user was removed because of an affiliation change, and inform all remaining occupants")
public void testMembershipRevokedInMemberOnlyRoom() throws Exception {
// Setup test fixture.
final EntityBareJid mucAddress = getRandomRoom("smack-inttest-userstatus-membership-revoked-membersonly");
final EntityBareJid mucAddress = getRandomRoom("userstatus-membership-revoked-membersonly");
final MultiUserChat mucAsSeenByOwner = mucManagerOne.getMultiUserChat(mucAddress);
final MultiUserChat mucAsSeenByTarget = mucManagerTwo.getMultiUserChat(mucAddress);

View file

@ -26,6 +26,7 @@ import org.jivesoftware.smackx.pep.PepManager;
import org.igniterealtime.smack.inttest.AbstractSmackIntegrationTest;
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
import org.igniterealtime.smack.inttest.TestNotPossibleException;
import org.jxmpp.jid.BareJid;
public abstract class AbstractOpenPgpIntegrationTest extends AbstractSmackIntegrationTest {

View file

@ -31,6 +31,7 @@ import java.security.NoSuchProviderException;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.ox.crypto.PainlessOpenPgpProvider;
import org.jivesoftware.smackx.ox.exception.InvalidBackupCodeException;
import org.jivesoftware.smackx.ox.exception.MissingOpenPgpKeyException;
@ -41,15 +42,16 @@ import org.jivesoftware.smackx.ox.store.filebased.FileBasedOpenPgpStore;
import org.jivesoftware.smackx.ox.util.OpenPgpPubSubUtil;
import org.jivesoftware.smackx.pubsub.PubSubException;
import org.bouncycastle.openpgp.PGPException;
import org.bouncycastle.openpgp.PGPPublicKeyRing;
import org.bouncycastle.openpgp.PGPSecretKeyRing;
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
import org.igniterealtime.smack.inttest.TestNotPossibleException;
import org.igniterealtime.smack.inttest.annotations.AfterClass;
import org.igniterealtime.smack.inttest.annotations.BeforeClass;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.bouncycastle.openpgp.PGPException;
import org.bouncycastle.openpgp.PGPPublicKeyRing;
import org.bouncycastle.openpgp.PGPSecretKeyRing;
import org.pgpainless.key.OpenPgpV4Fingerprint;
import org.pgpainless.key.protection.UnprotectedKeysProtector;

View file

@ -42,6 +42,7 @@ import org.igniterealtime.smack.inttest.annotations.BeforeClass;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.pgpainless.decryption_verification.OpenPgpMetadata;
import org.pgpainless.key.OpenPgpV4Fingerprint;
import org.pgpainless.key.protection.UnprotectedKeysProtector;

View file

@ -36,6 +36,7 @@ import org.igniterealtime.smack.inttest.AbstractSmackIntegrationTest;
import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.jxmpp.jid.Jid;
@SpecificationReference(document = "XEP-0199", version = "2.0.1")

View file

@ -35,6 +35,7 @@ import org.igniterealtime.smack.inttest.SmackIntegrationTestEnvironment;
import org.igniterealtime.smack.inttest.TestNotPossibleException;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.jxmpp.jid.DomainBareJid;
@SpecificationReference(document = "XEP-0060", version = "1.26.0")

View file

@ -25,6 +25,7 @@ import java.net.URISyntaxException;
import org.jivesoftware.smack.parsing.SmackParsingException;
import org.jivesoftware.smack.util.Async.ThrowingRunnable;
import org.jivesoftware.smack.xml.XmlPullParserException;
import org.jivesoftware.smackx.mediaelement.element.MediaElement;
import org.jivesoftware.smackx.softwareinfo.SoftwareInfoManager;
import org.jivesoftware.smackx.softwareinfo.form.SoftwareInfoForm;

View file

@ -34,6 +34,7 @@ import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.igniterealtime.smack.inttest.annotations.SpecificationReference;
import org.igniterealtime.smack.inttest.util.IntegrationTestRosterUtil;
import org.igniterealtime.smack.inttest.util.SimpleResultSyncPoint;
import org.junit.jupiter.api.Assertions;
@SpecificationReference(document = "XEP-0118", version = "1.3.0")

View file

@ -30,26 +30,26 @@ import org.junit.jupiter.api.Test;
public class SmackIntegrationTestFrameWorkTest {
private static class ValidLowLevelList {
private static final class ValidLowLevelList {
@SuppressWarnings({"unused", "MethodCanBeStatic"})
public void test(List<AbstractXMPPConnection> connections) {
}
}
private static class InvalidLowLevelList {
private static final class InvalidLowLevelList {
@SuppressWarnings({"unused", "MethodCanBeStatic"})
public void test(List<AbstractXMPPConnection> connections, boolean invalid) {
}
}
private static class ValidLowLevelVarargs {
private static final class ValidLowLevelVarargs {
@SuppressWarnings({"unused", "MethodCanBeStatic"})
public void test(AbstractXMPPConnection connectionOne, AbstractXMPPConnection connectionTwo,
AbstractXMPPConnection connectionThree) {
}
}
private static class InvalidLowLevelVarargs {
private static final class InvalidLowLevelVarargs {
@SuppressWarnings({"unused", "MethodCanBeStatic"})
public void test(AbstractXMPPConnection connectionOne, Integer invalid, AbstractXMPPConnection connectionTwo,
AbstractXMPPConnection connectionThree) {
@ -96,7 +96,7 @@ public class SmackIntegrationTestFrameWorkTest {
assertNull(determinedParameterType);
}
private static class ValidUnconnectedConnectionSource {
private static final class ValidUnconnectedConnectionSource {
@SuppressWarnings({"unused", "MethodCanBeStatic"})
public void test(AbstractSmackLowLevelIntegrationTest.UnconnectedConnectionSource source) {
}

View file

@ -44,6 +44,7 @@ import org.igniterealtime.smack.inttest.SmackIntegrationTestFramework.TestRunRes
import org.igniterealtime.smack.inttest.annotations.AfterClass;
import org.igniterealtime.smack.inttest.annotations.BeforeClass;
import org.igniterealtime.smack.inttest.annotations.SmackIntegrationTest;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

View file

@ -97,7 +97,7 @@ public class MultiResultSyncPointTest {
}
}
private static class TestException extends Exception {
private static final class TestException extends Exception {
/**
*

View file

@ -73,7 +73,7 @@ public class ResultSyncPointTest {
}
}
private static class TestException extends Exception {
private static final class TestException extends Exception {
/**
*

View file

@ -16,8 +16,7 @@ dependencies {
api project(':smack-openpgp')
api project(':smack-resolver-minidns')
api project(':smack-resolver-minidns-dox')
// TODO: Change this to smack-websocket-java11 once it arrives.
api project(':smack-websocket-okhttp')
api project(':smack-websocket-java11')
api project(':smack-tcp')
testImplementation(testFixtures(project(":smack-core")))
@ -50,7 +49,7 @@ task convertModularXmppClientToServerConnectionStateGraphDotToPng(type: Exec) {
}
copyJavadocDocFiles.dependsOn convertModularXmppClientToServerConnectionStateGraphDotToPng
task cleanGenerateFiles(type: Delete) {
task cleanGeneratedFiles(type: Delete) {
delete 'src/javadoc/org/jivesoftware/smack/full/doc-files/ModularXmppClientToServerConnectionStateGraph.dot', 'src/javadoc/org/jivesoftware/smack/full/doc-files/ModularXmppClientToServerConnectionStateGraph.png'
}
clean.dependsOn cleanGenerateFiles
clean.dependsOn cleanGeneratedFiles

View file

@ -221,7 +221,7 @@ public class XmppHostnameVerifier implements HostnameVerifier {
afterWildcard = afterWildcard.substring(wildcardIndex + 1);
int beforeStartIndex = name.indexOf(beforeWildcard);
if ((beforeStartIndex == -1) || (isBeginning && beforeStartIndex != 0)) {
if (beforeStartIndex == -1 || (isBeginning && beforeStartIndex != 0)) {
return false;
}
isBeginning = false;

View file

@ -20,6 +20,7 @@ import org.jivesoftware.smack.SmackException.NoResponseException;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smackx.jingleold.JingleSession;
import org.jivesoftware.smackx.jingleold.media.PayloadType;
import org.jivesoftware.smackx.jingleold.nat.TransportCandidate;

View file

@ -20,6 +20,7 @@ import org.jivesoftware.smack.SmackException.NoResponseException;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smackx.jingleold.nat.TransportCandidate;
/**

View file

@ -21,6 +21,7 @@ import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smackx.jingleold.JingleSession;
import org.jivesoftware.smackx.jingleold.listeners.CreatedJingleSessionListener;
import org.jivesoftware.smackx.jingleold.listeners.JingleSessionListener;

View file

@ -25,6 +25,7 @@ import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.XMPPException.XMPPErrorException;
import org.jivesoftware.smackx.jingleold.JingleSession;
import org.jivesoftware.smackx.jingleold.listeners.CreatedJingleSessionListener;
import org.jivesoftware.smackx.jingleold.listeners.JingleSessionListener;

View file

@ -301,7 +301,7 @@ public class AgentRoster {
/**
* Listens for all presence packets and processes them.
*/
private class PresencePacketListener implements StanzaListener {
private final class PresencePacketListener implements StanzaListener {
@Override
public void processStanza(Stanza packet) {
Presence presence = (Presence) packet;
@ -376,7 +376,7 @@ public class AgentRoster {
/**
* Listens for all roster packets and processes them.
*/
private class AgentStatusListener implements StanzaListener {
private final class AgentStatusListener implements StanzaListener {
@Override
public void processStanza(Stanza packet) {

View file

@ -39,9 +39,10 @@ import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.omemo.exceptions.CorruptedOmemoKeyException;
import org.jivesoftware.smackx.omemo.signal.SignalOmemoService;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.igniterealtime.smack.inttest.SmackIntegrationTestFramework;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class SmackOmemoSignalIntegrationTestFramework {
static {

View file

@ -20,11 +20,17 @@
*/
package org.jivesoftware.smackx.omemo.signal;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;
import org.jivesoftware.smackx.omemo.element.OmemoBundleElement;
import org.jivesoftware.smackx.omemo.exceptions.CorruptedOmemoKeyException;
import org.jivesoftware.smackx.omemo.internal.OmemoDevice;
import org.jivesoftware.smackx.omemo.trust.OmemoFingerprint;
import org.jivesoftware.smackx.omemo.util.OmemoKeyUtil;
import org.signal.libsignal.protocol.IdentityKey;
import org.signal.libsignal.protocol.IdentityKeyPair;
import org.signal.libsignal.protocol.InvalidKeyException;
@ -38,11 +44,6 @@ import org.signal.libsignal.protocol.state.SessionRecord;
import org.signal.libsignal.protocol.state.SignedPreKeyRecord;
import org.signal.libsignal.protocol.util.Medium;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;
/**
* Concrete implementation of the KeyUtil for an implementation using the Signal library.
*
@ -72,8 +73,8 @@ public class SignalOmemoKeyUtil extends OmemoKeyUtil<IdentityKeyPair, IdentityKe
start--;
for (int i=0;i<count;i++) {
int pkIdx = ((start + i) % (Medium.MAX_VALUE-1)) + 1;
for (int i = 0; i < count; i++) {
int pkIdx = ((start + i) % (Medium.MAX_VALUE - 1)) + 1;
results.add(new PreKeyRecord(pkIdx, Curve.generateKeyPair()));
}

View file

@ -468,7 +468,7 @@ public class CachingOmemoStore<T_IdKeyPair, T_IdKey, T_PreKey, T_SigPreKey, T_Se
* @param <T_SigPreKey> type of the public signed preKey
* @param <T_Sess> type of the OMEMO session
*/
private static class KeyCache<T_IdKeyPair, T_IdKey, T_PreKey, T_SigPreKey, T_Sess> {
private static final class KeyCache<T_IdKeyPair, T_IdKey, T_PreKey, T_SigPreKey, T_Sess> {
private T_IdKeyPair identityKeyPair;
private final TreeMap<Integer, T_PreKey> preKeys = new TreeMap<>();
private final TreeMap<Integer, T_SigPreKey> signedPreKeys = new TreeMap<>();

Some files were not shown because too many files have changed in this diff Show more