diff --git a/.travis.yml b/.travis.yml index 3bfa93892..ad03d90f1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ cache: - $HOME/.m2 before_install: - - export GRADLE_VERSION=5.5.1 + - export GRADLE_VERSION=6.2 - wget https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-all.zip - unzip -q gradle-${GRADLE_VERSION}-all.zip - export PATH="$(pwd)/gradle-${GRADLE_VERSION}/bin:$PATH" diff --git a/build.gradle b/build.gradle index 0ae894a8c..2e9b23ecb 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,7 @@ buildscript { plugins { id 'ru.vyarus.animalsniffer' version '1.5.0' - id 'net.ltgt.errorprone' version '0.8.1' + id 'net.ltgt.errorprone' version '1.1.1' } apply plugin: 'org.kordamp.gradle.markdown' @@ -129,7 +129,7 @@ allprojects { ':smack-omemo-signal', ':smack-openpgp', ].collect { project(it) } - junitVersion = '5.4.2' + junitVersion = '5.6.0' powerMockVersion = '2.0.2' commonsIoVersion = '2.6' } @@ -680,7 +680,7 @@ def getAndroidRuntimeJar() { if (androidJar.isFile()) { return androidJar } else { - throw new Exception("Can't find android.jar for $androidApiLevel API. Please install corresponding SDK platform package") + throw new Exception("Can't find android.jar for API level ${androidApiLevel}. Please install corresponding SDK platform package") } } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/proxy/ProxySocketConnection.java b/smack-core/src/main/java/org/jivesoftware/smack/proxy/ProxySocketConnection.java index aad3cb5bf..7f31f94dc 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/proxy/ProxySocketConnection.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/proxy/ProxySocketConnection.java @@ -1,6 +1,6 @@ /** * - * Copyright 2015-2016 Florian Schmaus. + * Copyright 2015-2019 Florian Schmaus. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,16 @@ import java.net.Socket; public interface ProxySocketConnection { + /** + * Initiate a connection to the given host on the given port. Note that the caller is responsible for closing the + * socket in case this method throws. + * + * @param socket the socket to use to initiate the connection to the proxy. + * @param host the host to connect to. + * @param port the port to connect to. + * @param timeout the timeout in milliseconds. + * @throws IOException in case an I/O error occurs. + */ void connect(Socket socket, String host, int port, int timeout) throws IOException; diff --git a/smack-core/src/main/java/org/jivesoftware/smack/proxy/Socks4ProxySocketConnection.java b/smack-core/src/main/java/org/jivesoftware/smack/proxy/Socks4ProxySocketConnection.java index 2c2658c99..a30777a34 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/proxy/Socks4ProxySocketConnection.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/proxy/Socks4ProxySocketConnection.java @@ -16,6 +16,8 @@ */ package org.jivesoftware.smack.proxy; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -24,6 +26,8 @@ import java.net.InetSocketAddress; import java.net.Socket; import java.nio.charset.StandardCharsets; +import org.jivesoftware.smack.util.OutputStreamUtil; + /** * Socket factory for socks4 proxy. * @@ -39,20 +43,17 @@ public class Socks4ProxySocketConnection implements ProxySocketConnection { @Override public void connect(Socket socket, String host, int port, int timeout) throws IOException { - InputStream in = null; - OutputStream out = null; String proxy_host = proxy.getProxyAddress(); int proxy_port = proxy.getProxyPort(); String user = proxy.getProxyUsername(); - try { - socket.connect(new InetSocketAddress(proxy_host, proxy_port), timeout); - in = socket.getInputStream(); - out = socket.getOutputStream(); - socket.setTcpNoDelay(true); + socket.connect(new InetSocketAddress(proxy_host, proxy_port), timeout); + InputStream in = socket.getInputStream(); + DataInputStream dis = new DataInputStream(in); + OutputStream out = socket.getOutputStream(); - byte[] buf = new byte[1024]; - int index = 0; + ByteArrayOutputStream outBuf = new ByteArrayOutputStream(); + byte[] inBuf; /* 1) CONNECT @@ -72,25 +73,22 @@ public class Socks4ProxySocketConnection implements ProxySocketConnection { of all zero bits. */ - buf[index++] = 4; - buf[index++] = 1; + outBuf.write(4); + outBuf.write(1); - buf[index++] = (byte) (port >>> 8); - buf[index++] = (byte) (port & 0xff); + outBuf.write(port >>> 8); + outBuf.write(port & 0xff); - InetAddress inetAddress = InetAddress.getByName(proxy_host); - byte[] byteAddress = inetAddress.getAddress(); - for (int i = 0; i < byteAddress.length; i++) { - buf[index++] = byteAddress[i]; - } + InetAddress inetAddress = InetAddress.getByName(proxy_host); + byte[] byteAddress = inetAddress.getAddress(); + outBuf.write(byteAddress); - if (user != null) { - byte[] userBytes = user.getBytes(StandardCharsets.UTF_8); - System.arraycopy(userBytes, 0, buf, index, user.length()); - index += user.length(); - } - buf[index++] = 0; - out.write(buf, 0, index); + if (user != null) { + byte[] userBytes = user.getBytes(StandardCharsets.UTF_8); + outBuf.write(userBytes); + } + outBuf.write(0); + OutputStreamUtil.writeResetAndFlush(outBuf, out); /* The SOCKS server checks to see whether such a request should be granted @@ -119,43 +117,17 @@ public class Socks4ProxySocketConnection implements ProxySocketConnection { The remaining fields are ignored. */ - int len = 6; - int s = 0; - while (s < len) { - int i = in.read(buf, s, len - s); - if (i <= 0) { - throw new ProxyException(ProxyInfo.ProxyType.SOCKS4, - "stream is closed"); - } - s += i; - } - if (buf[0] != 0) { - throw new ProxyException(ProxyInfo.ProxyType.SOCKS4, - "server returns VN " + buf[0]); - } - if (buf[1] != 90) { - try { - socket.close(); - } - catch (Exception eee) { - } - String message = "ProxySOCKS4: server returns CD " + buf[1]; - throw new ProxyException(ProxyInfo.ProxyType.SOCKS4, message); - } - byte[] temp = new byte[2]; - in.read(temp, 0, 2); + inBuf = new byte[6]; + dis.readFully(inBuf); + if (inBuf[0] != 0) { + throw new ProxyException(ProxyInfo.ProxyType.SOCKS4, + "server returns VN " + inBuf[0]); } - catch (RuntimeException e) { - throw e; - } - catch (Exception e) { - try { - socket.close(); - } - catch (Exception eee) { - } - throw new ProxyException(ProxyInfo.ProxyType.SOCKS4, e.toString()); + if (inBuf[1] != 90) { + String message = "ProxySOCKS4: server returns CD " + inBuf[1]; + throw new ProxyException(ProxyInfo.ProxyType.SOCKS4, message); } + inBuf = new byte[2]; + dis.readFully(inBuf); } - } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/proxy/Socks5ProxySocketConnection.java b/smack-core/src/main/java/org/jivesoftware/smack/proxy/Socks5ProxySocketConnection.java index 3c8a080e6..d81f4d65f 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/proxy/Socks5ProxySocketConnection.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/proxy/Socks5ProxySocketConnection.java @@ -16,15 +16,16 @@ */ package org.jivesoftware.smack.proxy; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Socket; import java.nio.charset.StandardCharsets; -import java.util.logging.Logger; -import org.jivesoftware.smack.util.CloseableUtil; +import org.jivesoftware.smack.util.OutputStreamUtil; /** * Socket factory for Socks5 proxy. @@ -32,7 +33,6 @@ import org.jivesoftware.smack.util.CloseableUtil; * @author Atul Aggarwal */ public class Socks5ProxySocketConnection implements ProxySocketConnection { - private static final Logger LOGGER = Logger.getLogger(Socks5ProxySocketConnection.class.getName()); private final ProxyInfo proxy; @@ -43,22 +43,18 @@ public class Socks5ProxySocketConnection implements ProxySocketConnection { @Override public void connect(Socket socket, String host, int port, int timeout) throws IOException { - InputStream in = null; - OutputStream out = null; String proxy_host = proxy.getProxyAddress(); int proxy_port = proxy.getProxyPort(); String user = proxy.getProxyUsername(); String passwd = proxy.getProxyPassword(); - try { - socket.connect(new InetSocketAddress(proxy_host, proxy_port), timeout); - in = socket.getInputStream(); - out = socket.getOutputStream(); + socket.connect(new InetSocketAddress(proxy_host, proxy_port), timeout); + InputStream in = socket.getInputStream(); + DataInputStream dis = new DataInputStream(in); + OutputStream out = socket.getOutputStream(); - socket.setTcpNoDelay(true); - - byte[] buf = new byte[1024]; - int index = 0; + ByteArrayOutputStream outBuf = new ByteArrayOutputStream(); + byte[] inBuf; /* +----+----------+----------+ @@ -81,13 +77,13 @@ public class Socks5ProxySocketConnection implements ProxySocketConnection { o X'FF' NO ACCEPTABLE METHODS */ - buf[index++] = 5; + outBuf.write(5); - buf[index++] = 2; - buf[index++] = 0; // NO AUTHENTICATION REQUIRED - buf[index++] = 2; // USERNAME/PASSWORD + outBuf.write(2); + outBuf.write(0); // NO AUTHENTICATION REQUIRED + outBuf.write(2); // USERNAME/PASSWORD - out.write(buf, 0, index); + OutputStreamUtil.writeResetAndFlush(outBuf, out); /* The server selects from one of the methods given in METHODS, and @@ -99,17 +95,18 @@ public class Socks5ProxySocketConnection implements ProxySocketConnection { | 1 | 1 | +----+--------+ */ - fill(in, buf, 2); + inBuf = new byte[2]; + dis.readFully(inBuf); - boolean check = false; - switch (buf[1] & 0xff) { - case 0: // NO AUTHENTICATION REQUIRED - check = true; + boolean check = false; + switch (inBuf[1] & 0xff) { + case 0: // NO AUTHENTICATION REQUIRED + check = true; + break; + case 2: // USERNAME/PASSWORD + if (user == null || passwd == null) { break; - case 2: // USERNAME/PASSWORD - if (user == null || passwd == null) { - break; - } + } /* Once the SOCKS V5 server has started, and the client has selected the @@ -130,20 +127,16 @@ public class Socks5ProxySocketConnection implements ProxySocketConnection { PASSWD field that follows. The PASSWD field contains the password association with the given UNAME. */ - index = 0; - buf[index++] = 1; - buf[index++] = (byte) user.length(); - byte[] userBytes = user.getBytes(StandardCharsets.UTF_8); - System.arraycopy(userBytes, 0, buf, index, - user.length()); - index += user.length(); - byte[] passwordBytes = passwd.getBytes(StandardCharsets.UTF_8); - buf[index++] = (byte) passwordBytes.length; - System.arraycopy(passwordBytes, 0, buf, index, - passwd.length()); - index += passwd.length(); + outBuf.write(1); + byte[] userBytes = user.getBytes(StandardCharsets.UTF_8); + OutputStreamUtil.writeByteSafe(outBuf, userBytes.length, "Username to long"); + outBuf.write(userBytes); - out.write(buf, 0, index); + byte[] passwordBytes = passwd.getBytes(StandardCharsets.UTF_8); + OutputStreamUtil.writeByteSafe(outBuf, passwordBytes.length, "Password to long"); + outBuf.write(passwordBytes); + + OutputStreamUtil.writeResetAndFlush(outBuf, out); /* The server verifies the supplied UNAME and PASSWD, and sends the @@ -159,19 +152,19 @@ public class Socks5ProxySocketConnection implements ProxySocketConnection { `failure' (STATUS value other than X'00') status, it MUST close the connection. */ - fill(in, buf, 2); - if (buf[1] == 0) { - check = true; - } - break; - default: - } + inBuf = new byte[2]; + dis.readFully(inBuf); + if (inBuf[1] == 0) { + check = true; + } + break; + default: + } - if (!check) { - CloseableUtil.maybeClose(socket, LOGGER); - throw new ProxyException(ProxyInfo.ProxyType.SOCKS5, - "fail in SOCKS5 proxy"); - } + if (!check) { + throw new ProxyException(ProxyInfo.ProxyType.SOCKS5, + "fail in SOCKS5 proxy"); + } /* The SOCKS request is formed as follows: @@ -199,21 +192,19 @@ public class Socks5ProxySocketConnection implements ProxySocketConnection { order */ - index = 0; - buf[index++] = 5; - buf[index++] = 1; // CONNECT - buf[index++] = 0; + outBuf.write(5); + outBuf.write(1); // CONNECT + outBuf.write(0); - byte[] hostb = host.getBytes(StandardCharsets.UTF_8); - int len = hostb.length; - buf[index++] = 3; // DOMAINNAME - buf[index++] = (byte) len; - System.arraycopy(hostb, 0, buf, index, len); - index += len; - buf[index++] = (byte) (port >>> 8); - buf[index++] = (byte) (port & 0xff); + byte[] hostb = host.getBytes(StandardCharsets.UTF_8); + int len = hostb.length; + outBuf.write(3); // DOMAINNAME + OutputStreamUtil.writeByteSafe(outBuf, len, "Hostname too long"); + outBuf.write(hostb); + outBuf.write(port >>> 8); + outBuf.write(port & 0xff); - out.write(buf, 0, index); + OutputStreamUtil.writeResetAndFlush(outBuf, out); /* The SOCKS request information is sent by the client as soon as it has @@ -250,49 +241,33 @@ public class Socks5ProxySocketConnection implements ProxySocketConnection { o BND.PORT server bound port in network octet order */ - fill(in, buf, 4); + inBuf = new byte[4]; + dis.readFully(inBuf); - if (buf[1] != 0) { - CloseableUtil.maybeClose(socket, LOGGER); - throw new ProxyException(ProxyInfo.ProxyType.SOCKS5, - "server returns " + buf[1]); - } + if (inBuf[1] != 0) { + throw new ProxyException(ProxyInfo.ProxyType.SOCKS5, + "server returns " + inBuf[1]); + } - switch (buf[3] & 0xff) { - case 1: - fill(in, buf, 6); - break; - case 3: - fill(in, buf, 1); - fill(in, buf, (buf[0] & 0xff) + 2); - break; - case 4: - fill(in, buf, 18); - break; - default: - } - } - catch (RuntimeException e) { - throw e; - } - catch (Exception e) { - CloseableUtil.maybeClose(socket, LOGGER); - // TODO convert to IOException(e) when minimum Android API level is 9 or higher - throw new IOException(e.getLocalizedMessage()); + final int addressBytes; + // TODO: Use Byte.toUnsignedInt() once Smack's minimum Android SDK level is 26 or higher. + final int atyp = inBuf[3] & 0xff; + switch (atyp) { + case 1: + addressBytes = 4; + break; + case 3: + byte domainnameLengthByte = dis.readByte(); + // TODO: Use Byte.toUnsignedInt() once Smack's minimum Android SDK level is 26 or higher. + addressBytes = domainnameLengthByte & 0xff; + break; + case 4: + addressBytes = 16; + break; + default: + throw new IOException("Unknown ATYP value: " + atyp); } + inBuf = new byte[addressBytes + 2]; + dis.readFully(inBuf); } - - private static void fill(InputStream in, byte[] buf, int len) - throws IOException { - int s = 0; - while (s < len) { - int i = in.read(buf, s, len - s); - if (i <= 0) { - throw new ProxyException(ProxyInfo.ProxyType.SOCKS5, "stream " + - "is closed"); - } - s += i; - } - } - } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/OutputStreamUtil.java b/smack-core/src/main/java/org/jivesoftware/smack/util/OutputStreamUtil.java new file mode 100644 index 000000000..9f27a09a3 --- /dev/null +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/OutputStreamUtil.java @@ -0,0 +1,39 @@ +/** + * + * Copyright 2019 Florian Schmaus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jivesoftware.smack.util; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +public class OutputStreamUtil { + + public static void writeByteSafe(OutputStream outputStream, int i, String message) throws IOException { + if (i < 0 || i > 0xff) { + throw new IOException(message + ". The value " + i + " is not within the allowed range for bytes"); + } + outputStream.write(i); + } + + public static void writeResetAndFlush(ByteArrayOutputStream byteArrayOutputStream, OutputStream outputStream) + throws IOException { + byteArrayOutputStream.writeTo(outputStream); + byteArrayOutputStream.reset(); + outputStream.flush(); + } + +} diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/stringencoder/Base32.java b/smack-core/src/main/java/org/jivesoftware/smack/util/stringencoder/Base32.java index 12856c29a..9711ab8a5 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/stringencoder/Base32.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/stringencoder/Base32.java @@ -45,7 +45,7 @@ public class Base32 { } }; - private static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ2345678"; + private static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; public static StringEncoder getStringEncoder() { return base32Stringencoder; diff --git a/smack-core/src/test/java/org/jivesoftware/smack/parsing/ParsingExceptionTest.java b/smack-core/src/test/java/org/jivesoftware/smack/parsing/ParsingExceptionTest.java index c8673bc0c..4fce7a186 100644 --- a/smack-core/src/test/java/org/jivesoftware/smack/parsing/ParsingExceptionTest.java +++ b/smack-core/src/test/java/org/jivesoftware/smack/parsing/ParsingExceptionTest.java @@ -16,8 +16,8 @@ */ package org.jivesoftware.smack.parsing; +import static org.hamcrest.MatcherAssert.assertThat; import static org.jivesoftware.smack.test.util.CharSequenceEquals.equalsCharSequence; -import static org.junit.Assert.assertThat; import java.io.IOException; diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/MamManager.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/MamManager.java index 6912d8e5d..e95048665 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/MamManager.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/MamManager.java @@ -44,6 +44,7 @@ import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smackx.disco.ServiceDiscoveryManager; import org.jivesoftware.smackx.forward.packet.Forwarded; +import org.jivesoftware.smackx.mam.MamManager.MamQueryArgs; import org.jivesoftware.smackx.mam.element.MamElements; import org.jivesoftware.smackx.mam.element.MamElements.MamResultExtension; import org.jivesoftware.smackx.mam.element.MamFinIQ; diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/forward/ForwardedTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/forward/ForwardedTest.java index 59e8b42f4..983d7c887 100644 --- a/smack-extensions/src/test/java/org/jivesoftware/smackx/forward/ForwardedTest.java +++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/forward/ForwardedTest.java @@ -16,10 +16,10 @@ */ package org.jivesoftware.smackx.forward; +import static org.hamcrest.MatcherAssert.assertThat; import static org.jivesoftware.smack.test.util.CharSequenceEquals.equalsCharSequence; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThat; import java.util.Properties; diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/iqversion/VersionTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/iqversion/VersionTest.java index 574bed4e9..e7d317919 100644 --- a/smack-extensions/src/test/java/org/jivesoftware/smackx/iqversion/VersionTest.java +++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/iqversion/VersionTest.java @@ -16,9 +16,9 @@ */ package org.jivesoftware.smackx.iqversion; +import static org.hamcrest.MatcherAssert.assertThat; import static org.jivesoftware.smack.test.util.CharSequenceEquals.equalsCharSequence; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import org.jivesoftware.smack.DummyConnection; diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/ping/PingTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/ping/PingTest.java index 37082a358..95a992a68 100644 --- a/smack-extensions/src/test/java/org/jivesoftware/smackx/ping/PingTest.java +++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/ping/PingTest.java @@ -16,10 +16,10 @@ */ package org.jivesoftware.smackx.ping; +import static org.hamcrest.MatcherAssert.assertThat; import static org.jivesoftware.smack.test.util.CharSequenceEquals.equalsCharSequence; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.jxmpp.jid.JidTestUtil.DUMMY_AT_EXAMPLE_ORG; diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/pubsub/provider/PubSubProviderTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/pubsub/provider/PubSubProviderTest.java index 59f33e43d..632396b8f 100644 --- a/smack-extensions/src/test/java/org/jivesoftware/smackx/pubsub/provider/PubSubProviderTest.java +++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/pubsub/provider/PubSubProviderTest.java @@ -16,9 +16,9 @@ */ package org.jivesoftware.smackx.pubsub.provider; +import static org.hamcrest.MatcherAssert.assertThat; import static org.jivesoftware.smack.test.util.CharSequenceEquals.equalsCharSequence; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; import java.util.List; diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/receipts/DeliveryReceiptTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/receipts/DeliveryReceiptTest.java index 01d1a60e8..91374b43d 100644 --- a/smack-extensions/src/test/java/org/jivesoftware/smackx/receipts/DeliveryReceiptTest.java +++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/receipts/DeliveryReceiptTest.java @@ -16,11 +16,11 @@ */ package org.jivesoftware.smackx.receipts; +import static org.hamcrest.MatcherAssert.assertThat; import static org.jivesoftware.smack.test.util.CharSequenceEquals.equalsCharSequence; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import java.util.Properties; diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/xhtmlim/provider/XHTMLExtensionProviderTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/xhtmlim/provider/XHTMLExtensionProviderTest.java index 41acbece8..6375c9410 100644 --- a/smack-extensions/src/test/java/org/jivesoftware/smackx/xhtmlim/provider/XHTMLExtensionProviderTest.java +++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/xhtmlim/provider/XHTMLExtensionProviderTest.java @@ -17,8 +17,8 @@ package org.jivesoftware.smackx.xhtmlim.provider; import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.MatcherAssert.assertThat; import static org.jivesoftware.smack.test.util.CharSequenceEquals.equalsCharSequence; -import static org.junit.Assert.assertThat; import java.io.IOException; import java.io.InputStream; diff --git a/smack-integration-test/src/test/java/org/igniterealtime/smack/inttest/unittest/SmackIntegrationTestFrameworkUnitTest.java b/smack-integration-test/src/test/java/org/igniterealtime/smack/inttest/unittest/SmackIntegrationTestFrameworkUnitTest.java index fe943873b..a73b432df 100644 --- a/smack-integration-test/src/test/java/org/igniterealtime/smack/inttest/unittest/SmackIntegrationTestFrameworkUnitTest.java +++ b/smack-integration-test/src/test/java/org/igniterealtime/smack/inttest/unittest/SmackIntegrationTestFrameworkUnitTest.java @@ -1,6 +1,6 @@ /** * - * Copyright 2015-2019 Florian Schmaus + * Copyright 2015-2020 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,6 +19,7 @@ package org.igniterealtime.smack.inttest.unittest; import static org.igniterealtime.smack.inttest.SmackIntegrationTestUnitTestUtil.getFrameworkForUnitTest; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import java.io.IOException; @@ -43,15 +44,10 @@ import org.igniterealtime.smack.inttest.SmackIntegrationTestFramework; import org.igniterealtime.smack.inttest.SmackIntegrationTestFramework.TestRunResult; import org.junit.AfterClass; import org.junit.BeforeClass; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExpectedException; public class SmackIntegrationTestFrameworkUnitTest { - @Rule - public ExpectedException expectedException = ExpectedException.none(); - private static boolean beforeClassInvoked; private static boolean afterClassInvoked; @@ -68,10 +64,10 @@ public class SmackIntegrationTestFrameworkUnitTest { @Test public void throwsRuntimeExceptionsTest() throws KeyManagementException, NoSuchAlgorithmException, SmackException, IOException, XMPPException, InterruptedException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { - expectedException.expect(RuntimeException.class); - expectedException.expectMessage(ThrowsRuntimeExceptionDummyTest.RUNTIME_EXCEPTION_MESSAGE); DummySmackIntegrationTestFramework sinttest = getFrameworkForUnitTest(ThrowsRuntimeExceptionDummyTest.class); - sinttest.run(); + assertThrows(RuntimeException.class, () -> { + sinttest.run(); + }); } public static class ThrowsRuntimeExceptionDummyTest extends AbstractSmackIntegrationTest { diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoMessageBuilder.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoMessageBuilder.java index e45a8cfd3..1f20e39cc 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoMessageBuilder.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/util/OmemoMessageBuilder.java @@ -274,13 +274,13 @@ public class OmemoMessageBuilder