diff --git a/driver/src/main/java/org/neo4j/driver/TransactionWork.java b/driver/src/main/java/org/neo4j/driver/TransactionWork.java index 0a662fd4ad..97f6823a3a 100644 --- a/driver/src/main/java/org/neo4j/driver/TransactionWork.java +++ b/driver/src/main/java/org/neo4j/driver/TransactionWork.java @@ -26,6 +26,7 @@ * @deprecated superseded by {@link TransactionCallback}. */ @Deprecated +@SuppressWarnings("DeprecatedIsStillUsed") public interface TransactionWork { /** * Executes all given operations against the same transaction. diff --git a/driver/src/main/java/org/neo4j/driver/async/AsyncTransactionWork.java b/driver/src/main/java/org/neo4j/driver/async/AsyncTransactionWork.java index 67c67062fc..5a9f6d52c0 100644 --- a/driver/src/main/java/org/neo4j/driver/async/AsyncTransactionWork.java +++ b/driver/src/main/java/org/neo4j/driver/async/AsyncTransactionWork.java @@ -27,6 +27,7 @@ * @deprecated superseded by {@link AsyncTransactionCallback}. */ @Deprecated +@SuppressWarnings("DeprecatedIsStillUsed") public interface AsyncTransactionWork { /** * Executes all given operations against the same transaction. diff --git a/driver/src/main/java/org/neo4j/driver/internal/cluster/RediscoveryImpl.java b/driver/src/main/java/org/neo4j/driver/internal/cluster/RediscoveryImpl.java index c801058689..7ea548ce76 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/cluster/RediscoveryImpl.java +++ b/driver/src/main/java/org/neo4j/driver/internal/cluster/RediscoveryImpl.java @@ -310,6 +310,7 @@ private CompletionStage lookupOnRouter( }); } + @SuppressWarnings("ThrowableNotThrown") private ClusterComposition handleRoutingProcedureError( Throwable error, RoutingTable routingTable, BoltServerAddress routerAddress, Throwable baseError) { if (mustAbortDiscovery(error)) { diff --git a/driver/src/main/java/org/neo4j/driver/internal/handlers/RunResponseHandler.java b/driver/src/main/java/org/neo4j/driver/internal/handlers/RunResponseHandler.java index 97ecf0db8a..3cf0fcc3ff 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/handlers/RunResponseHandler.java +++ b/driver/src/main/java/org/neo4j/driver/internal/handlers/RunResponseHandler.java @@ -61,6 +61,7 @@ public void onSuccess(Map metadata) { } @Override + @SuppressWarnings("ThrowableNotThrown") public void onFailure(Throwable error) { if (tx != null) { tx.markTerminated(error); diff --git a/driver/src/main/java/org/neo4j/driver/internal/handlers/TransactionPullResponseCompletionListener.java b/driver/src/main/java/org/neo4j/driver/internal/handlers/TransactionPullResponseCompletionListener.java index 71b7872259..0567f98d05 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/handlers/TransactionPullResponseCompletionListener.java +++ b/driver/src/main/java/org/neo4j/driver/internal/handlers/TransactionPullResponseCompletionListener.java @@ -35,6 +35,7 @@ public TransactionPullResponseCompletionListener(UnmanagedTransaction tx) { public void afterSuccess(Map metadata) {} @Override + @SuppressWarnings("ThrowableNotThrown") public void afterFailure(Throwable error) { // always mark transaction as terminated because every error is "acknowledged" with a RESET message // so database forgets about the transaction after the first error diff --git a/driver/src/main/java/org/neo4j/driver/internal/messaging/common/CommonValuePacker.java b/driver/src/main/java/org/neo4j/driver/internal/messaging/common/CommonValuePacker.java index 1207bd9377..97e748bcc0 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/messaging/common/CommonValuePacker.java +++ b/driver/src/main/java/org/neo4j/driver/internal/messaging/common/CommonValuePacker.java @@ -173,6 +173,7 @@ private void packLocalDateTime(LocalDateTime localDateTime) throws IOException { packer.pack(nano); } + @SuppressWarnings("DuplicatedCode") private void packZonedDateTimeUsingUtcBaseline(ZonedDateTime zonedDateTime) throws IOException { var instant = zonedDateTime.toInstant(); var epochSecondLocal = instant.getEpochSecond(); @@ -196,6 +197,7 @@ private void packZonedDateTimeUsingUtcBaseline(ZonedDateTime zonedDateTime) thro } } + @SuppressWarnings("DuplicatedCode") private void packZonedDateTime(ZonedDateTime zonedDateTime) throws IOException { var epochSecondLocal = zonedDateTime.toLocalDateTime().toEpochSecond(UTC); var nano = zonedDateTime.getNano(); diff --git a/driver/src/main/java/org/neo4j/driver/internal/messaging/common/CommonValueUnpacker.java b/driver/src/main/java/org/neo4j/driver/internal/messaging/common/CommonValueUnpacker.java index bf8671302e..5647479fa7 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/messaging/common/CommonValueUnpacker.java +++ b/driver/src/main/java/org/neo4j/driver/internal/messaging/common/CommonValueUnpacker.java @@ -277,6 +277,7 @@ protected Value unpackRelationship() throws IOException { return new RelationshipValue(adapted); } + @SuppressWarnings("DuplicatedCode") protected InternalNode unpackNode() throws IOException { var urn = unpacker.unpackLong(); @@ -295,7 +296,7 @@ protected InternalNode unpackNode() throws IOException { return new InternalNode(urn, String.valueOf(urn), labels, props); } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "DuplicatedCode"}) protected Value unpackPath() throws IOException { // List of unique nodes var uniqNodes = new Node[(int) unpacker.unpackListHeader()]; diff --git a/driver/src/main/java/org/neo4j/driver/internal/messaging/v4/MessageWriterV4.java b/driver/src/main/java/org/neo4j/driver/internal/messaging/v4/MessageWriterV4.java index 06762171bb..e6c5a05385 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/messaging/v4/MessageWriterV4.java +++ b/driver/src/main/java/org/neo4j/driver/internal/messaging/v4/MessageWriterV4.java @@ -48,6 +48,7 @@ public MessageWriterV4(PackOutput output) { super(new CommonValuePacker(output, false), buildEncoders()); } + @SuppressWarnings("DuplicatedCode") private static Map buildEncoders() { Map result = Iterables.newHashMapWithSize(9); result.put(HelloMessage.SIGNATURE, new HelloMessageEncoder()); diff --git a/driver/src/main/java/org/neo4j/driver/internal/messaging/v43/MessageWriterV43.java b/driver/src/main/java/org/neo4j/driver/internal/messaging/v43/MessageWriterV43.java index 49a0b9b3ab..4334d0b3fb 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/messaging/v43/MessageWriterV43.java +++ b/driver/src/main/java/org/neo4j/driver/internal/messaging/v43/MessageWriterV43.java @@ -56,6 +56,7 @@ public MessageWriterV43(PackOutput output, boolean dateTimeUtcEnabled) { super(new CommonValuePacker(output, dateTimeUtcEnabled), buildEncoders()); } + @SuppressWarnings("DuplicatedCode") private static Map buildEncoders() { Map result = Iterables.newHashMapWithSize(9); result.put(HelloMessage.SIGNATURE, new HelloMessageEncoder()); diff --git a/driver/src/main/java/org/neo4j/driver/internal/messaging/v44/MessageWriterV44.java b/driver/src/main/java/org/neo4j/driver/internal/messaging/v44/MessageWriterV44.java index 31fe5d7842..0b1b2d7b19 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/messaging/v44/MessageWriterV44.java +++ b/driver/src/main/java/org/neo4j/driver/internal/messaging/v44/MessageWriterV44.java @@ -53,6 +53,7 @@ public MessageWriterV44(PackOutput output, boolean dateTimeUtcEnabled) { super(new CommonValuePacker(output, dateTimeUtcEnabled), buildEncoders()); } + @SuppressWarnings("DuplicatedCode") private static Map buildEncoders() { Map result = Iterables.newHashMapWithSize(9); result.put(HelloMessage.SIGNATURE, new HelloMessageEncoder()); diff --git a/driver/src/main/java/org/neo4j/driver/internal/messaging/v5/MessageWriterV5.java b/driver/src/main/java/org/neo4j/driver/internal/messaging/v5/MessageWriterV5.java index e3528c816b..12dded9e6c 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/messaging/v5/MessageWriterV5.java +++ b/driver/src/main/java/org/neo4j/driver/internal/messaging/v5/MessageWriterV5.java @@ -50,6 +50,7 @@ public MessageWriterV5(PackOutput output) { super(new CommonValuePacker(output, true), buildEncoders()); } + @SuppressWarnings("DuplicatedCode") private static Map buildEncoders() { Map result = Iterables.newHashMapWithSize(9); result.put(HelloMessage.SIGNATURE, new HelloMessageEncoder()); diff --git a/driver/src/main/java/org/neo4j/driver/internal/messaging/v5/ValueUnpackerV5.java b/driver/src/main/java/org/neo4j/driver/internal/messaging/v5/ValueUnpackerV5.java index 6894a0b43f..1959335ed8 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/messaging/v5/ValueUnpackerV5.java +++ b/driver/src/main/java/org/neo4j/driver/internal/messaging/v5/ValueUnpackerV5.java @@ -55,6 +55,7 @@ protected int getRelationshipFields() { return RELATIONSHIP_FIELDS; } + @SuppressWarnings("DuplicatedCode") @Override protected InternalNode unpackNode() throws IOException { var urn = unpacker.unpackLong(); @@ -76,6 +77,7 @@ protected InternalNode unpackNode() throws IOException { return new InternalNode(urn, elementId, labels, props); } + @SuppressWarnings("DuplicatedCode") @Override protected Value unpackPath() throws IOException { // List of unique nodes diff --git a/driver/src/main/java/org/neo4j/driver/internal/messaging/v51/MessageWriterV51.java b/driver/src/main/java/org/neo4j/driver/internal/messaging/v51/MessageWriterV51.java index be40f72c9f..054f1f719b 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/messaging/v51/MessageWriterV51.java +++ b/driver/src/main/java/org/neo4j/driver/internal/messaging/v51/MessageWriterV51.java @@ -54,6 +54,7 @@ public MessageWriterV51(PackOutput output) { super(new CommonValuePacker(output, true), buildEncoders()); } + @SuppressWarnings("DuplicatedCode") private static Map buildEncoders() { Map result = Iterables.newHashMapWithSize(9); result.put(HelloMessage.SIGNATURE, new HelloMessageEncoder()); diff --git a/driver/src/main/java/org/neo4j/driver/internal/packstream/PackStream.java b/driver/src/main/java/org/neo4j/driver/internal/packstream/PackStream.java index fc28e3beed..b34a65ee13 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/packstream/PackStream.java +++ b/driver/src/main/java/org/neo4j/driver/internal/packstream/PackStream.java @@ -346,6 +346,7 @@ public void packBytesHeader(int size) throws IOException { } } + @SuppressWarnings("DuplicatedCode") private void packStringHeader(int size) throws IOException { if (size < 0x10) { out.writeByte((byte) (TINY_STRING | size)); @@ -358,6 +359,7 @@ private void packStringHeader(int size) throws IOException { } } + @SuppressWarnings("DuplicatedCode") public void packListHeader(int size) throws IOException { if (size < 0x10) { out.writeByte((byte) (TINY_LIST | size)); @@ -370,6 +372,7 @@ public void packListHeader(int size) throws IOException { } } + @SuppressWarnings("DuplicatedCode") public void packMapHeader(int size) throws IOException { if (size < 0x10) { out.writeByte((byte) (TINY_MAP | size)); diff --git a/driver/src/main/java/org/neo4j/driver/internal/reactive/AbstractReactiveSession.java b/driver/src/main/java/org/neo4j/driver/internal/reactive/AbstractReactiveSession.java index d03144c313..7469d06e4e 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/reactive/AbstractReactiveSession.java +++ b/driver/src/main/java/org/neo4j/driver/internal/reactive/AbstractReactiveSession.java @@ -62,6 +62,7 @@ Publisher doBeginTransaction(TransactionConfig config) { return doBeginTransaction(config, null); } + @SuppressWarnings("DuplicatedCode") protected Publisher doBeginTransaction(TransactionConfig config, String txType) { return createSingleItemPublisher( () -> { @@ -80,6 +81,7 @@ protected Publisher doBeginTransaction(TransactionConfig config, String txTyp tx -> Mono.fromDirect(closeTransaction(tx, false)).subscribe()); } + @SuppressWarnings("DuplicatedCode") private Publisher beginTransaction(AccessMode mode, TransactionConfig config) { return createSingleItemPublisher( () -> { @@ -101,21 +103,24 @@ private Publisher beginTransaction(AccessMode mode, TransactionConfig config) @SuppressWarnings("deprecation") protected Publisher runTransaction( AccessMode mode, Function> work, TransactionConfig config) { - work = work.andThen(publisher -> Flux.from(publisher).map(value -> { + work = work.andThen(publisher -> Flux.from(publisher).handle((value, sink) -> { if (value instanceof ReactiveResult) { - throw new ClientException(String.format( + sink.error(new ClientException(String.format( "%s is not a valid return value, it should be consumed before producing a return value", - ReactiveResult.class.getName())); + ReactiveResult.class.getName()))); + return; } else if (value instanceof org.neo4j.driver.reactive.ReactiveResult) { - throw new ClientException(String.format( + sink.error(new ClientException(String.format( "%s is not a valid return value, it should be consumed before producing a return value", - org.neo4j.driver.reactive.ReactiveResult.class.getName())); + org.neo4j.driver.reactive.ReactiveResult.class.getName()))); + return; } else if (value instanceof RxResult) { - throw new ClientException(String.format( + sink.error(new ClientException(String.format( "%s is not a valid return value, it should be consumed before producing a return value", - RxResult.class.getName())); + RxResult.class.getName()))); + return; } - return value; + sink.next(value); })); var repeatableWork = Flux.usingWhen( beginTransaction(mode, config), diff --git a/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalReactiveTransaction.java b/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalReactiveTransaction.java index 2f3c5dfe34..131373cdcb 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalReactiveTransaction.java +++ b/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalReactiveTransaction.java @@ -37,6 +37,7 @@ protected InternalReactiveTransaction(UnmanagedTransaction tx) { } @Override + @SuppressWarnings({"ThrowableNotThrown", "DuplicatedCode"}) public Publisher run(Query query) { CompletionStage cursorStage; try { diff --git a/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalRxResult.java b/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalRxResult.java index bb881ffe19..7f2cffc22e 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalRxResult.java +++ b/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalRxResult.java @@ -36,6 +36,7 @@ import reactor.core.publisher.Mono; @Deprecated +@SuppressWarnings("DeprecatedIsStillUsed") public class InternalRxResult implements RxResult { private Supplier> cursorFutureSupplier; private volatile CompletionStage cursorFuture; diff --git a/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalRxSession.java b/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalRxSession.java index e135ffa187..7f5225daf7 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalRxSession.java +++ b/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalRxSession.java @@ -37,6 +37,7 @@ import org.reactivestreams.Publisher; @Deprecated +@SuppressWarnings("DeprecatedIsStillUsed") public class InternalRxSession extends AbstractReactiveSession implements RxSession { public InternalRxSession(NetworkSession session) { super(session); diff --git a/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalRxTransaction.java b/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalRxTransaction.java index af06c456d8..9833c57952 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalRxTransaction.java +++ b/driver/src/main/java/org/neo4j/driver/internal/reactive/InternalRxTransaction.java @@ -28,12 +28,14 @@ import org.reactivestreams.Publisher; @Deprecated +@SuppressWarnings("DeprecatedIsStillUsed") public class InternalRxTransaction extends AbstractReactiveTransaction implements RxTransaction { public InternalRxTransaction(UnmanagedTransaction tx) { super(tx); } @Override + @SuppressWarnings("ThrowableNotThrown") public RxResult run(Query query) { return new InternalRxResult(() -> { var cursorFuture = new CompletableFuture(); diff --git a/driver/src/main/java/org/neo4j/driver/internal/reactivestreams/InternalReactiveTransaction.java b/driver/src/main/java/org/neo4j/driver/internal/reactivestreams/InternalReactiveTransaction.java index 60c8a2ba55..63e406b01f 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/reactivestreams/InternalReactiveTransaction.java +++ b/driver/src/main/java/org/neo4j/driver/internal/reactivestreams/InternalReactiveTransaction.java @@ -36,6 +36,7 @@ protected InternalReactiveTransaction(UnmanagedTransaction tx) { } @Override + @SuppressWarnings({"ThrowableNotThrown", "DuplicatedCode"}) public Publisher run(Query query) { CompletionStage cursorStage; try { diff --git a/driver/src/main/java/org/neo4j/driver/reactive/RxTransactionWork.java b/driver/src/main/java/org/neo4j/driver/reactive/RxTransactionWork.java index 43a1640406..e2fa7f28f1 100644 --- a/driver/src/main/java/org/neo4j/driver/reactive/RxTransactionWork.java +++ b/driver/src/main/java/org/neo4j/driver/reactive/RxTransactionWork.java @@ -27,6 +27,7 @@ * @deprecated superseded by {@link org.neo4j.driver.reactive.ReactiveTransactionCallback} and {@link org.neo4j.driver.reactivestreams.ReactiveTransactionCallback} */ @Deprecated +@SuppressWarnings("DeprecatedIsStillUsed") public interface RxTransactionWork { /** * Executes all given operations against the same transaction. diff --git a/driver/src/main/java/org/neo4j/driver/types/Relationship.java b/driver/src/main/java/org/neo4j/driver/types/Relationship.java index 424e8c062c..625cecfb01 100644 --- a/driver/src/main/java/org/neo4j/driver/types/Relationship.java +++ b/driver/src/main/java/org/neo4j/driver/types/Relationship.java @@ -32,6 +32,7 @@ public interface Relationship extends Entity { * @deprecated superseded by {@link #startNodeElementId()} */ @Deprecated + @SuppressWarnings("DeprecatedIsStillUsed") long startNodeId(); /** @@ -50,6 +51,7 @@ public interface Relationship extends Entity { * @deprecated superseded by {@link #endNodeElementId()} */ @Deprecated + @SuppressWarnings("DeprecatedIsStillUsed") long endNodeId(); /** diff --git a/driver/src/test/java/org/neo4j/driver/GraphDatabaseTest.java b/driver/src/test/java/org/neo4j/driver/GraphDatabaseTest.java index 1f5a60767e..0c2d41046b 100644 --- a/driver/src/test/java/org/neo4j/driver/GraphDatabaseTest.java +++ b/driver/src/test/java/org/neo4j/driver/GraphDatabaseTest.java @@ -22,6 +22,7 @@ import static org.hamcrest.Matchers.containsString; import static org.hamcrest.junit.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.neo4j.driver.Logging.none; import static org.neo4j.driver.internal.logging.DevNullLogging.DEV_NULL_LOGGING; @@ -31,6 +32,7 @@ import java.net.URI; import org.junit.jupiter.api.Test; import org.neo4j.driver.exceptions.ServiceUnavailableException; +import org.neo4j.driver.internal.security.StaticAuthTokenManager; import org.neo4j.driver.testutil.TestUtil; class GraphDatabaseTest { @@ -38,17 +40,20 @@ class GraphDatabaseTest { Config.builder().withoutEncryption().withLogging(none()).build(); @Test + @SuppressWarnings("resource") void throwsWhenBoltSchemeUsedWithRoutingParams() { assertThrows( IllegalArgumentException.class, () -> GraphDatabase.driver("bolt://localhost:7687/?policy=my_policy")); } @Test + @SuppressWarnings("ResultOfMethodCallIgnored") void shouldRespondToInterruptsWhenConnectingToUnresponsiveServer() throws Exception { try (var serverSocket = new ServerSocket(0)) { // setup other thread to interrupt current thread when it blocks TestUtil.interruptWhenInWaitingState(Thread.currentThread()); + @SuppressWarnings("resource") final var driver = GraphDatabase.driver("bolt://localhost:" + serverSocket.getLocalPort()); try { assertThrows(ServiceUnavailableException.class, driver::verifyConnectivity); @@ -65,6 +70,7 @@ void shouldPrintNiceErrorWhenConnectingToUnresponsiveServer() throws Exception { try (var serverSocket = new ServerSocket(0)) { localPort = serverSocket.getLocalPort(); } + @SuppressWarnings("resource") final var driver = GraphDatabase.driver("bolt://localhost:" + localPort, INSECURE_CONFIG); final var error = assertThrows(ServiceUnavailableException.class, driver::verifyConnectivity); assertThat(error.getMessage(), containsString("Unable to connect to")); @@ -76,6 +82,7 @@ void shouldPrintNiceRoutingErrorWhenConnectingToUnresponsiveServer() throws Exce try (var serverSocket = new ServerSocket(0)) { localPort = serverSocket.getLocalPort(); } + @SuppressWarnings("resource") final var driver = GraphDatabase.driver("neo4j://localhost:" + localPort, INSECURE_CONFIG); final var error = assertThrows(ServiceUnavailableException.class, driver::verifyConnectivity); assertThat(error.getMessage(), containsString("Unable to connect to")); @@ -92,31 +99,37 @@ void shouldFailToCreateEncryptedDriverWhenServerDoesNotRespond() throws IOExcept } @Test + @SuppressWarnings("resource") void shouldAcceptNullTokenOnFactoryWithString() { GraphDatabase.driver("neo4j://host", (AuthToken) null); } @Test + @SuppressWarnings("resource") void shouldAcceptNullTokenOnFactoryWithUri() { GraphDatabase.driver(URI.create("neo4j://host"), (AuthToken) null); } @Test + @SuppressWarnings("resource") void shouldAcceptNullTokenOnFactoryWithStringAndConfig() { GraphDatabase.driver("neo4j://host", (AuthToken) null, Config.defaultConfig()); } @Test + @SuppressWarnings("resource") void shouldAcceptNullTokenOnFactoryWithUriAndConfig() { GraphDatabase.driver(URI.create("neo4j://host"), (AuthToken) null, Config.defaultConfig()); } @Test + @SuppressWarnings("resource") void shouldRejectNullAuthTokenManagerOnFactoryWithString() { assertThrows(NullPointerException.class, () -> GraphDatabase.driver("neo4j://host", (AuthTokenManager) null)); } @Test + @SuppressWarnings("resource") void shouldRejectNullAuthTokenManagerOnFactoryWithUri() { assertThrows( NullPointerException.class, @@ -124,6 +137,7 @@ void shouldRejectNullAuthTokenManagerOnFactoryWithUri() { } @Test + @SuppressWarnings("resource") void shouldRejectNullAuthTokenManagerOnFactoryWithStringAndConfig() { assertThrows( NullPointerException.class, @@ -131,6 +145,7 @@ void shouldRejectNullAuthTokenManagerOnFactoryWithStringAndConfig() { } @Test + @SuppressWarnings("resource") void shouldRejectNullAuthTokenManagerOnFactoryWithUriAndConfig() { assertThrows( NullPointerException.class, @@ -138,11 +153,23 @@ void shouldRejectNullAuthTokenManagerOnFactoryWithUriAndConfig() { URI.create("neo4j://host"), (AuthTokenManager) null, Config.defaultConfig())); } + @Test + void shouldCreateDriverWithManager() { + assertNotNull(GraphDatabase.driver("neo4j://host", new StaticAuthTokenManager(AuthTokens.bearer("token")))); + } + + @Test + void shouldCreateDriverWithManagerAndConfig() { + assertNotNull(GraphDatabase.driver( + "neo4j://host", new StaticAuthTokenManager(AuthTokens.bearer("token")), Config.defaultConfig())); + } + private static void testFailureWhenServerDoesNotRespond(boolean encrypted) throws IOException { try (var server = new ServerSocket(0)) // server that accepts connections but does not reply { var connectionTimeoutMillis = 1_000; var config = createConfig(encrypted, connectionTimeoutMillis); + @SuppressWarnings("resource") final var driver = GraphDatabase.driver(URI.create("bolt://localhost:" + server.getLocalPort()), config); var e = assertThrows(ServiceUnavailableException.class, driver::verifyConnectivity); diff --git a/driver/src/test/java/org/neo4j/driver/QueryConfigTest.java b/driver/src/test/java/org/neo4j/driver/QueryConfigTest.java index e47d3f8ea1..1518c49b43 100644 --- a/driver/src/test/java/org/neo4j/driver/QueryConfigTest.java +++ b/driver/src/test/java/org/neo4j/driver/QueryConfigTest.java @@ -33,6 +33,7 @@ class QueryConfigTest { @Test + @SuppressWarnings("OptionalGetWithoutIsPresent") void shouldReturnDefaultValues() { var config = QueryConfig.defaultConfig(); var manager = Mockito.mock(BookmarkManager.class); diff --git a/driver/src/test/java/org/neo4j/driver/integration/ConnectionPoolIT.java b/driver/src/test/java/org/neo4j/driver/integration/ConnectionPoolIT.java index 2e69060b64..41cd3dca4a 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/ConnectionPoolIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/ConnectionPoolIT.java @@ -250,6 +250,7 @@ void assertSessionsAvailableWithin() throws InterruptedException { + "timeout. Last failure was: " + lastExceptionFromDriver.getMessage()); } + @SuppressWarnings("ResultOfMethodCallIgnored") public void stop() throws InterruptedException { run = false; stopped.await(10, SECONDS); diff --git a/driver/src/test/java/org/neo4j/driver/integration/CredentialsIT.java b/driver/src/test/java/org/neo4j/driver/integration/CredentialsIT.java index c0a1ee0700..96980912b1 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/CredentialsIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/CredentialsIT.java @@ -111,6 +111,7 @@ private void testDriverFailureOnWrongCredentials(String uri) { var config = Config.builder().withLogging(DEV_NULL_LOGGING).build(); var authToken = AuthTokens.basic("neo4j", "wrongSecret"); + @SuppressWarnings("resource") final var driver = GraphDatabase.driver(uri, authToken, config); assertThrows(AuthenticationException.class, driver::verifyConnectivity); } diff --git a/driver/src/test/java/org/neo4j/driver/integration/DirectDriverIT.java b/driver/src/test/java/org/neo4j/driver/integration/DirectDriverIT.java index 3c77fc697c..b3d74ebf51 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/DirectDriverIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/DirectDriverIT.java @@ -67,6 +67,7 @@ void shouldRejectInvalidAddress() { var uri = URI.create("*"); // When & Then + @SuppressWarnings("resource") var e = assertThrows(IllegalArgumentException.class, () -> GraphDatabase.driver(uri, neo4j.authTokenManager())); assertThat(e.getMessage(), equalTo("Scheme must not be null")); } diff --git a/driver/src/test/java/org/neo4j/driver/integration/DriverCloseIT.java b/driver/src/test/java/org/neo4j/driver/integration/DriverCloseIT.java index 30c8c69358..8fdf9d7453 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/DriverCloseIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/DriverCloseIT.java @@ -92,6 +92,7 @@ void useSessionAfterDriverIsClosed() { void shouldInterruptStreamConsumptionAndEndRetriesOnDriverClosure() { var fetchSize = 5; var config = Config.builder().withFetchSize(fetchSize).build(); + @SuppressWarnings("resource") var driver = GraphDatabase.driver(neo4j.uri(), neo4j.authTokenManager(), config); var session = driver.session(); diff --git a/driver/src/test/java/org/neo4j/driver/integration/EncryptionIT.java b/driver/src/test/java/org/neo4j/driver/integration/EncryptionIT.java index 819c7c8cf4..be296c4867 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/EncryptionIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/EncryptionIT.java @@ -112,6 +112,7 @@ private void testMismatchingEncryption(BoltTlsLevel tlsLevel, boolean driverEncr neo4j.deleteAndStartNeo4j(tlsConfig); var config = newConfig(driverEncrypted); + @SuppressWarnings("resource") var e = assertThrows(ServiceUnavailableException.class, () -> GraphDatabase.driver( neo4j.uri(), neo4j.authTokenManager(), config) .verifyConnectivity()); diff --git a/driver/src/test/java/org/neo4j/driver/integration/ErrorIT.java b/driver/src/test/java/org/neo4j/driver/integration/ErrorIT.java index d8b38b13ce..e6f904f94c 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/ErrorIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/ErrorIT.java @@ -133,6 +133,7 @@ void shouldAllowNewTransactionAfterRecoverableError() { @Test void shouldExplainConnectionError() { + @SuppressWarnings("resource") final var driver = GraphDatabase.driver("bolt://localhost:7777"); var e = assertThrows(ServiceUnavailableException.class, driver::verifyConnectivity); @@ -174,6 +175,7 @@ void shouldGetHelpfulErrorWhenTryingToConnectToHttpPort() { var boltUri = session.uri(); var uri = URI.create(String.format("%s://%s:%d", boltUri.getScheme(), boltUri.getHost(), session.httpPort())); + @SuppressWarnings("resource") final var driver = GraphDatabase.driver(uri, config); var e = assertThrows(ClientException.class, driver::verifyConnectivity); assertEquals( diff --git a/driver/src/test/java/org/neo4j/driver/integration/ResolverIT.java b/driver/src/test/java/org/neo4j/driver/integration/ResolverIT.java index da900bc8c9..01a429dd49 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/ResolverIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/ResolverIT.java @@ -43,6 +43,7 @@ void shouldFailInitialDiscoveryWhenConfiguredResolverThrows() { .withLogging(none()) .withResolver(resolver) .build(); + @SuppressWarnings("resource") final var driver = GraphDatabase.driver("neo4j://my.server.com:9001", config); var error = assertThrows(RuntimeException.class, driver::verifyConnectivity); diff --git a/driver/src/test/java/org/neo4j/driver/integration/SessionBoltV3IT.java b/driver/src/test/java/org/neo4j/driver/integration/SessionBoltV3IT.java index 3a4c4c7a6b..7de926db0b 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/SessionBoltV3IT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/SessionBoltV3IT.java @@ -81,6 +81,7 @@ void shouldSetTransactionMetadata() { var config = TransactionConfig.builder().withMetadata(metadata).build(); + @SuppressWarnings("resource") var result = driver.session().run(showTxMetadata, config); var receivedMetadata = result.single().get("metaData").asMap(); @@ -179,6 +180,7 @@ void shouldSetTransactionMetadataWithWriteTransactionFunction() { @Test @SuppressWarnings("deprecation") void shouldUseBookmarksForAutoCommitTransactions() { + @SuppressWarnings("resource") var session = driver.session(); var initialBookmark = session.lastBookmark(); @@ -204,6 +206,7 @@ void shouldUseBookmarksForAutoCommitTransactions() { @Test @SuppressWarnings("deprecation") void shouldUseBookmarksForAutoCommitAndUnmanagedTransactions() { + @SuppressWarnings("resource") var session = driver.session(); var initialBookmark = session.lastBookmark(); @@ -235,6 +238,7 @@ void shouldUseBookmarksForAutoCommitAndUnmanagedTransactions() { @Test @SuppressWarnings("deprecation") void shouldUseBookmarksForAutoCommitTransactionsAndTransactionFunctions() { + @SuppressWarnings("resource") var session = driver.session(); var initialBookmark = session.lastBookmark(); @@ -317,6 +321,7 @@ private static void testTransactionMetadataWithAsyncTransactionFunctions(boolean @SuppressWarnings("deprecation") private static void testTransactionMetadataWithTransactionFunctions(boolean read) { + @SuppressWarnings("resource") var session = driver.session(); Map metadata = new HashMap<>(); metadata.put("foo", "bar"); diff --git a/driver/src/test/java/org/neo4j/driver/integration/SessionIT.java b/driver/src/test/java/org/neo4j/driver/integration/SessionIT.java index 78ff3bf163..fe87d10fd8 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/SessionIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/SessionIT.java @@ -140,14 +140,12 @@ void shouldHandleNullConfig() { assertFalse(session.isOpen()); } - @SuppressWarnings("ConstantConditions") @Test + @SuppressWarnings({"resource"}) void shouldHandleNullAuthToken() { - AuthToken token = null; - // null auth token should be interpreted as AuthTokens.none() and fail driver creation // because server expects basic auth - assertThrows(AuthenticationException.class, () -> GraphDatabase.driver(neo4j.uri(), token) + assertThrows(AuthenticationException.class, () -> GraphDatabase.driver(neo4j.uri(), (AuthToken) null) .verifyConnectivity()); } @@ -884,7 +882,7 @@ void shouldAllowToConsumeRecordsSlowlyAndRetrieveSummary() throws InterruptedExc } @Test - @SuppressWarnings("resource") + @SuppressWarnings({"resource", "ResultOfMethodCallIgnored"}) void shouldBeResponsiveToThreadInterruptWhenWaitingForResult() { try (var session1 = neo4j.driver().session(); var session2 = neo4j.driver().session()) { diff --git a/driver/src/test/java/org/neo4j/driver/integration/SessionResetIT.java b/driver/src/test/java/org/neo4j/driver/integration/SessionResetIT.java index 738924d4e1..c32c6701cd 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/SessionResetIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/SessionResetIT.java @@ -295,7 +295,7 @@ void shouldHandleResetBeforeRun() { } @Test - @SuppressWarnings("resource") + @SuppressWarnings({"resource", "ResultOfMethodCallIgnored"}) void shouldHandleResetFromMultipleThreads() throws Throwable { var session = (InternalSession) neo4j.driver().session(); diff --git a/driver/src/test/java/org/neo4j/driver/integration/TransactionBoltV3IT.java b/driver/src/test/java/org/neo4j/driver/integration/TransactionBoltV3IT.java index 46f1af960a..84ef285901 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/TransactionBoltV3IT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/TransactionBoltV3IT.java @@ -60,6 +60,7 @@ void beforeAll() { } @Test + @SuppressWarnings("resource") void shouldSetTransactionMetadata() { Map metadata = new HashMap<>(); metadata.put("key1", "value1"); diff --git a/driver/src/test/java/org/neo4j/driver/integration/TransactionIT.java b/driver/src/test/java/org/neo4j/driver/integration/TransactionIT.java index 308238f385..28573ff1d7 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/TransactionIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/TransactionIT.java @@ -293,6 +293,7 @@ void shouldFailRun() { } @Test + @SuppressWarnings("ResultOfMethodCallIgnored") void shouldBeResponsiveToThreadInterruptWhenWaitingForResult() { try (var otherSession = session.driver().session()) { session.run("CREATE (:Person {name: 'Beta Ray Bill'})").consume(); @@ -321,6 +322,7 @@ void shouldBeResponsiveToThreadInterruptWhenWaitingForResult() { } @Test + @SuppressWarnings("ResultOfMethodCallIgnored") void shouldBeResponsiveToThreadInterruptWhenWaitingForCommit() { try (var otherSession = session.driver().session()) { session.run("CREATE (:Person {name: 'Beta Ray Bill'})").consume(); diff --git a/driver/src/test/java/org/neo4j/driver/integration/UnmanagedTransactionIT.java b/driver/src/test/java/org/neo4j/driver/integration/UnmanagedTransactionIT.java index a2c24552f7..4e5aa9e0bf 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/UnmanagedTransactionIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/UnmanagedTransactionIT.java @@ -109,6 +109,7 @@ void shouldFailToCommitAfterRollback() { } @Test + @SuppressWarnings("ThrowableNotThrown") void shouldFailToCommitAfterTermination() { var tx = beginTransaction(); @@ -140,6 +141,7 @@ void shouldFailToRollbackAfterCommit() { } @Test + @SuppressWarnings("ThrowableNotThrown") void shouldRollbackAfterTermination() { var tx = beginTransaction(); @@ -150,6 +152,7 @@ void shouldRollbackAfterTermination() { } @Test + @SuppressWarnings("ThrowableNotThrown") void shouldFailToRunQueryWhenTerminated() { var tx = beginTransaction(); txRun(tx, "CREATE (:MyLabel)"); @@ -162,6 +165,7 @@ void shouldFailToRunQueryWhenTerminated() { } @Test + @SuppressWarnings("ThrowableNotThrown") void shouldBePossibleToRunMoreTransactionsAfterOneIsTerminated() { var tx1 = beginTransaction(); tx1.markTerminated(null); diff --git a/driver/src/test/java/org/neo4j/driver/integration/UnsupportedBoltV3IT.java b/driver/src/test/java/org/neo4j/driver/integration/UnsupportedBoltV3IT.java index d63f83b2e6..6dafd7499e 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/UnsupportedBoltV3IT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/UnsupportedBoltV3IT.java @@ -48,6 +48,7 @@ class UnsupportedBoltV3IT { .build(); @Test + @SuppressWarnings("resource") void shouldNotSupportAutoCommitQueriesWithTransactionConfig() { assertTxConfigNotSupported(() -> driver.session().run("RETURN 42", txConfig)); } @@ -58,7 +59,7 @@ void shouldNotSupportAsyncAutoCommitQueriesWithTransactionConfig() { } @Test - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "resource"}) void shouldNotSupportTransactionFunctionsWithTransactionConfig() { assertTxConfigNotSupported(() -> driver.session().readTransaction(tx -> tx.run("RETURN 42"), txConfig)); } @@ -71,6 +72,7 @@ void shouldNotSupportAsyncTransactionFunctionsWithTransactionConfig() { } @Test + @SuppressWarnings("resource") void shouldNotSupportUnmanagedTransactionsWithTransactionConfig() { assertTxConfigNotSupported(() -> driver.session().beginTransaction(txConfig)); } diff --git a/driver/src/test/java/org/neo4j/driver/integration/reactive/RxResultIT.java b/driver/src/test/java/org/neo4j/driver/integration/reactive/RxResultIT.java index 344db2d973..f21d959e0a 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/reactive/RxResultIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/reactive/RxResultIT.java @@ -69,11 +69,11 @@ void shouldAllowIteratingOverLargeResultStream() { var res = session.run("UNWIND range(1, $size) AS x RETURN x", parameters("size", size)); // Then I should be able to iterate over the result - var step = StepVerifier.create( + var step = (StepVerifier.Step) StepVerifier.create( Flux.from(res.records()).limitRate(100).map(r -> r.get("x").asInt())); for (var i = 1; i <= size; i++) { - step.expectNext(i); + step = step.expectNext(i); } step.expectComplete().verify(); } diff --git a/driver/src/test/java/org/neo4j/driver/integration/reactive/RxTransactionIT.java b/driver/src/test/java/org/neo4j/driver/integration/reactive/RxTransactionIT.java index ec074c67e9..e45c0eb9f4 100644 --- a/driver/src/test/java/org/neo4j/driver/integration/reactive/RxTransactionIT.java +++ b/driver/src/test/java/org/neo4j/driver/integration/reactive/RxTransactionIT.java @@ -524,9 +524,7 @@ void shouldFailWhenListTransformationFunctionFails() { var records = Flux.usingWhen( session.beginTransaction(), - tx -> Flux.from(tx.run("RETURN 'Hi!'").records()).map(record -> { - throw e; - }), + tx -> Flux.from(tx.run("RETURN 'Hi!'").records()).handle((record, sink) -> sink.error(e)), RxTransaction::commit, (tx, error) -> tx.rollback(), null); diff --git a/driver/src/test/java/org/neo4j/driver/internal/InternalExecutableQueryTest.java b/driver/src/test/java/org/neo4j/driver/internal/InternalExecutableQueryTest.java index 4b6fdaac3a..0cfcf6148b 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/InternalExecutableQueryTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/InternalExecutableQueryTest.java @@ -120,7 +120,7 @@ static List routingControls() { @ParameterizedTest @MethodSource("routingControls") - @SuppressWarnings({"unchecked", "resource"}) + @SuppressWarnings({"unchecked", "resource", "ResultOfMethodCallIgnored"}) void shouldExecuteAndReturnResult(RoutingControl routingControl) { // GIVEN var driver = mock(Driver.class); @@ -173,6 +173,7 @@ var record = mock(Record.class); var sessionConfigCapture = ArgumentCaptor.forClass(SessionConfig.class); then(driver).should().session(sessionConfigCapture.capture()); var sessionConfig = sessionConfigCapture.getValue(); + @SuppressWarnings("OptionalGetWithoutIsPresent") var expectedSessionConfig = SessionConfig.builder() .withDatabase(config.database().get()) .withImpersonatedUser(config.impersonatedUser().get()) diff --git a/driver/src/test/java/org/neo4j/driver/internal/async/LeakLoggingNetworkSessionTest.java b/driver/src/test/java/org/neo4j/driver/internal/async/LeakLoggingNetworkSessionTest.java index 9e5fe8c08f..e5dedfc782 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/async/LeakLoggingNetworkSessionTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/async/LeakLoggingNetworkSessionTest.java @@ -60,6 +60,7 @@ void logsNothingDuringFinalizationIfClosed() throws Exception { } @Test + @SuppressWarnings("OptionalGetWithoutIsPresent") void logsMessageWithStacktraceDuringFinalizationIfLeaked(TestInfo testInfo) throws Exception { var logging = mock(Logging.class); var log = mock(Logger.class); diff --git a/driver/src/test/java/org/neo4j/driver/internal/async/UnmanagedTransactionTest.java b/driver/src/test/java/org/neo4j/driver/internal/async/UnmanagedTransactionTest.java index cdf7f17348..720a27f834 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/async/UnmanagedTransactionTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/async/UnmanagedTransactionTest.java @@ -157,6 +157,7 @@ void shouldBeOpenAfterConstruction() { } @Test + @SuppressWarnings("ThrowableNotThrown") void shouldBeClosedWhenMarkedAsTerminated() { var tx = beginTx(connectionMock()); @@ -166,6 +167,7 @@ void shouldBeClosedWhenMarkedAsTerminated() { } @Test + @SuppressWarnings("ThrowableNotThrown") void shouldBeClosedWhenMarkedTerminatedAndClosed() { var tx = beginTx(connectionMock()); @@ -204,6 +206,7 @@ void shouldNotReleaseConnectionWhenBeginSucceeds() { } @Test + @SuppressWarnings("ThrowableNotThrown") void shouldReleaseConnectionWhenTerminatedAndCommitted() { var connection = connectionMock(); var tx = new UnmanagedTransaction(connection, (ignored) -> {}, UNLIMITED_FETCH_SIZE, null, Logging.none()); @@ -217,6 +220,7 @@ void shouldReleaseConnectionWhenTerminatedAndCommitted() { } @Test + @SuppressWarnings("ThrowableNotThrown") void shouldNotCreateCircularExceptionWhenTerminationCauseEqualsToCursorFailure() { var connection = connectionMock(); var terminationCause = new ClientException("Custom exception"); @@ -232,6 +236,7 @@ void shouldNotCreateCircularExceptionWhenTerminationCauseEqualsToCursorFailure() } @Test + @SuppressWarnings("ThrowableNotThrown") void shouldNotCreateCircularExceptionWhenTerminationCauseDifferentFromCursorFailure() { var connection = connectionMock(); var terminationCause = new ClientException("Custom exception"); @@ -250,6 +255,7 @@ void shouldNotCreateCircularExceptionWhenTerminationCauseDifferentFromCursorFail } @Test + @SuppressWarnings("ThrowableNotThrown") void shouldNotCreateCircularExceptionWhenTerminatedWithoutFailure() { var connection = connectionMock(); var terminationCause = new ClientException("Custom exception"); @@ -264,6 +270,7 @@ void shouldNotCreateCircularExceptionWhenTerminatedWithoutFailure() { } @Test + @SuppressWarnings("ThrowableNotThrown") void shouldReleaseConnectionWhenTerminatedAndRolledBack() { var connection = connectionMock(); var tx = new UnmanagedTransaction(connection, (ignored) -> {}, UNLIMITED_FETCH_SIZE, null, Logging.none()); @@ -578,6 +585,7 @@ private ResultCursorsHolder mockResultCursorWith(ClientException clientException return resultCursorsHolder; } + @SuppressWarnings("ThrowableNotThrown") private Supplier> mapTransactionAction(String actionName, UnmanagedTransaction tx) { Supplier> action; if ("commit".equals(actionName)) { diff --git a/driver/src/test/java/org/neo4j/driver/internal/cluster/loadbalancing/RoutingTableAndConnectionPoolTest.java b/driver/src/test/java/org/neo4j/driver/internal/cluster/loadbalancing/RoutingTableAndConnectionPoolTest.java index f5d8513550..40b061135e 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/cluster/loadbalancing/RoutingTableAndConnectionPoolTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/cluster/loadbalancing/RoutingTableAndConnectionPoolTest.java @@ -274,6 +274,7 @@ void shouldHandleAddAndRemoveFromRoutingTableAndConnectionPool() throws Throwabl assertFalse(connectionPool.isOpen(openServer)); } + @SuppressWarnings("ResultOfMethodCallIgnored") private void acquireAndReleaseConnections(LoadBalancer loadBalancer) throws InterruptedException { var executorService = Executors.newFixedThreadPool(4); var count = 100; diff --git a/driver/src/test/java/org/neo4j/driver/internal/handlers/RunResponseHandlerTest.java b/driver/src/test/java/org/neo4j/driver/internal/handlers/RunResponseHandlerTest.java index 8093dc6c6a..49dbe7280d 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/handlers/RunResponseHandlerTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/handlers/RunResponseHandlerTest.java @@ -124,6 +124,7 @@ void shouldReturnResultAvailableAfterWhenSucceededV3() { } @Test + @SuppressWarnings("ThrowableNotThrown") void shouldMarkTxAndKeepConnectionAndFailOnFailure() { var runFuture = new CompletableFuture(); var connection = mock(Connection.class); diff --git a/driver/src/test/java/org/neo4j/driver/internal/handlers/TransactionPullResponseCompletionListenerTest.java b/driver/src/test/java/org/neo4j/driver/internal/handlers/TransactionPullResponseCompletionListenerTest.java index 40b655ceaf..400883c30c 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/handlers/TransactionPullResponseCompletionListenerTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/handlers/TransactionPullResponseCompletionListenerTest.java @@ -54,6 +54,7 @@ void shouldMarkTransactionAsTerminatedOnFailures() { testErrorHandling(new ClientException("Neo.ClientError.Request.Invalid")); } + @SuppressWarnings("ThrowableNotThrown") private static void testErrorHandling(Throwable error) { var connection = mock(Connection.class); when(connection.serverAddress()).thenReturn(BoltServerAddress.LOCAL_DEFAULT); diff --git a/driver/src/test/java/org/neo4j/driver/internal/handlers/pulln/TransactionPullResponseCompletionListenerTest.java b/driver/src/test/java/org/neo4j/driver/internal/handlers/pulln/TransactionPullResponseCompletionListenerTest.java index 2d9d751cba..d5386f1d4b 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/handlers/pulln/TransactionPullResponseCompletionListenerTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/handlers/pulln/TransactionPullResponseCompletionListenerTest.java @@ -58,6 +58,7 @@ protected void shouldHandleSuccessWithSummary(BasicPullResponseHandler.State sta } @Override + @SuppressWarnings("ThrowableNotThrown") protected void shouldHandleFailure(BasicPullResponseHandler.State state) { // Given var conn = mockConnection(); diff --git a/driver/src/test/java/org/neo4j/driver/internal/reactive/InternalReactiveSessionTest.java b/driver/src/test/java/org/neo4j/driver/internal/reactive/InternalReactiveSessionTest.java index 0562c762d4..03107ee790 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/reactive/InternalReactiveSessionTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/reactive/InternalReactiveSessionTest.java @@ -41,6 +41,7 @@ import java.util.Arrays; import java.util.List; +import java.util.Set; import java.util.concurrent.CompletionException; import java.util.concurrent.Flow.Publisher; import java.util.concurrent.atomic.AtomicInteger; @@ -51,6 +52,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.neo4j.driver.AccessMode; +import org.neo4j.driver.Bookmark; import org.neo4j.driver.Query; import org.neo4j.driver.TransactionConfig; import org.neo4j.driver.Value; @@ -312,6 +314,22 @@ void shouldDelegateExecuteReadToRetryLogic(ExecuteVariation executeVariation) { then(logic).should().retryRx(any()); } + @Test + void shouldDelegateLastBookmarks() { + // Given + var session = mock(NetworkSession.class); + var expectedBookmarks = Set.of(mock(Bookmark.class)); + given(session.lastBookmarks()).willReturn(expectedBookmarks); + var reactiveSession = new InternalReactiveSession(session); + + // When + var bookmarks = reactiveSession.lastBookmarks(); + + // Then + assertEquals(expectedBookmarks, bookmarks); + then(session).should().lastBookmarks(); + } + static List executeVariations() { return Arrays.asList( new ExecuteVariation(false, false), diff --git a/driver/src/test/java/org/neo4j/driver/internal/reactive/InternalRxTransactionTest.java b/driver/src/test/java/org/neo4j/driver/internal/reactive/InternalRxTransactionTest.java index 64990a50ec..26a8477941 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/reactive/InternalRxTransactionTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/reactive/InternalRxTransactionTest.java @@ -110,6 +110,7 @@ void shouldDelegateRun(Function runReturnOne) { @ParameterizedTest @MethodSource("allTxRunMethods") + @SuppressWarnings("ThrowableNotThrown") void shouldMarkTxIfFailedToRun(Function runReturnOne) { // Given Throwable error = new RuntimeException("Hi there"); diff --git a/driver/src/test/java/org/neo4j/driver/internal/retry/ExponentialBackoffRetryLogicTest.java b/driver/src/test/java/org/neo4j/driver/internal/retry/ExponentialBackoffRetryLogicTest.java index a0a1f7a109..b0602a4281 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/retry/ExponentialBackoffRetryLogicTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/retry/ExponentialBackoffRetryLogicTest.java @@ -551,6 +551,7 @@ void scheduleNoRetryOnErrorRx(Exception error) { } @Test + @SuppressWarnings("ResultOfMethodCallIgnored") void throwsWhenSleepInterrupted() throws Exception { var clock = mock(Clock.class); var sleepTask = mock(ExponentialBackoffRetryLogic.SleepTask.class); diff --git a/driver/src/test/java/org/neo4j/driver/internal/summary/InternalNotificationTest.java b/driver/src/test/java/org/neo4j/driver/internal/summary/InternalNotificationTest.java index 8b977511f7..e28473c0b5 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/summary/InternalNotificationTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/summary/InternalNotificationTest.java @@ -34,7 +34,7 @@ class InternalNotificationTest { @Test - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "OptionalGetWithoutIsPresent"}) void shouldHandleNotificationWithPosition() { // GIVEN Map map = new HashMap<>(); diff --git a/driver/src/test/java/org/neo4j/driver/internal/util/FuturesTest.java b/driver/src/test/java/org/neo4j/driver/internal/util/FuturesTest.java index 9b289cdca0..f8d45904a1 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/util/FuturesTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/util/FuturesTest.java @@ -186,6 +186,7 @@ void shouldReturnFromBlockingGetWhenFutureCompletes() { } @Test + @SuppressWarnings("ResultOfMethodCallIgnored") void shouldWaitForFutureInBlockingGetEvenWhenInterrupted() { var executor = Executors.newSingleThreadExecutor(daemon("InterruptThread")); try { @@ -206,6 +207,7 @@ void shouldWaitForFutureInBlockingGetEvenWhenInterrupted() { } @Test + @SuppressWarnings("ResultOfMethodCallIgnored") void shouldHandleInterruptsInBlockingGet() { try { var future = new CompletableFuture(); diff --git a/driver/src/test/java/org/neo4j/driver/internal/util/IterablesTest.java b/driver/src/test/java/org/neo4j/driver/internal/util/IterablesTest.java index 6dfbbdf32f..b4abb67082 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/util/IterablesTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/util/IterablesTest.java @@ -62,6 +62,7 @@ void shouldReturnEmptyQueue() { } @Test + @SuppressWarnings("EqualsWithItself") void shouldReturnSameEmptyQueue() { assertSame(Iterables.emptyQueue(), Iterables.emptyQueue()); } diff --git a/driver/src/test/java/org/neo4j/driver/internal/util/MetadataExtractorTest.java b/driver/src/test/java/org/neo4j/driver/internal/util/MetadataExtractorTest.java index 8b6542190e..5121cd0376 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/util/MetadataExtractorTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/util/MetadataExtractorTest.java @@ -257,7 +257,7 @@ void shouldBuildResultSummaryWithoutProfiledPlan() { } @Test - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "OptionalGetWithoutIsPresent"}) void shouldBuildResultSummaryWithNotifications() { var notification1 = parameters( "description", "Almost bad thing", diff --git a/driver/src/test/java/org/neo4j/driver/testutil/CertificateUtil.java b/driver/src/test/java/org/neo4j/driver/testutil/CertificateUtil.java index 147d16a092..0d19fe2bd6 100644 --- a/driver/src/test/java/org/neo4j/driver/testutil/CertificateUtil.java +++ b/driver/src/test/java/org/neo4j/driver/testutil/CertificateUtil.java @@ -184,6 +184,7 @@ public static X509Certificate generateSelfSignedCertificate() return new SelfSignedCertificateGenerator().certificate; } + @SuppressWarnings("ResultOfMethodCallIgnored") private static void writePem(String type, byte[] encodedContent, File path) throws IOException { if (path.getParentFile() != null && path.getParentFile().exists()) { path.getParentFile().mkdirs(); diff --git a/driver/src/test/java/org/neo4j/driver/testutil/FileTools.java b/driver/src/test/java/org/neo4j/driver/testutil/FileTools.java index 5aed9527fa..0724f08574 100644 --- a/driver/src/test/java/org/neo4j/driver/testutil/FileTools.java +++ b/driver/src/test/java/org/neo4j/driver/testutil/FileTools.java @@ -136,6 +136,7 @@ public static void copyFile(File srcFile, File dstFile) throws IOException { /* * See http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4715154. */ + @SuppressWarnings("ResultOfMethodCallIgnored") private static void waitAndThenTriggerGC() { try { Thread.sleep(500); diff --git a/examples/src/test/java/org/neo4j/docs/driver/ExamplesIT.java b/examples/src/test/java/org/neo4j/docs/driver/ExamplesIT.java index d3e129ce9f..ab91b277e4 100644 --- a/examples/src/test/java/org/neo4j/docs/driver/ExamplesIT.java +++ b/examples/src/test/java/org/neo4j/docs/driver/ExamplesIT.java @@ -60,6 +60,7 @@ class ExamplesIT { private String uri; + @SuppressWarnings("resource") private int readInt(String database, final String query, final Value parameters) { SessionConfig sessionConfig; if (database == null) { @@ -81,6 +82,7 @@ private int readInt(final String query) { return readInt(query, parameters()); } + @SuppressWarnings("resource") private void write(final String query, final Value parameters) { try (var session = neo4j.driver().session()) { session.executeWriteWithoutResult(tx -> tx.run(query, parameters).consume()); @@ -119,6 +121,7 @@ void testShouldRunAutocommitTransactionExample() { } @Test + @SuppressWarnings("resource") void testShouldRunAsyncAutocommitTransactionExample() { try (var example = new AsyncAutocommitTransactionExample(uri, USER, neo4j.adminPassword())) { @@ -328,6 +331,7 @@ void testShouldConfigureTransactionMetadataExample() { } @Test + @SuppressWarnings("resource") void testShouldRunAsyncTransactionFunctionExample() { try (var example = new AsyncTransactionFunctionExample(uri, USER, neo4j.adminPassword())) { @@ -378,6 +382,7 @@ void testPassBookmarksExample() { @Test @EnabledOnNeo4jWith(BOLT_V4) + @SuppressWarnings("resource") void testShouldRunRxAutocommitTransactionExample() { try (var example = new RxAutocommitTransactionExample(uri, USER, neo4j.adminPassword())) { @@ -395,6 +400,7 @@ void testShouldRunRxAutocommitTransactionExample() { @Test @EnabledOnNeo4jWith(BOLT_V4) + @SuppressWarnings("resource") void testShouldRunRxTransactionFunctionExampleReactor() { try (var example = new RxTransactionFunctionExample(uri, USER, neo4j.adminPassword())) { diff --git a/examples/src/test/java/org/neo4j/docs/driver/RoutingExamplesIT.java b/examples/src/test/java/org/neo4j/docs/driver/RoutingExamplesIT.java index 7ecd82e59d..0d3a70f482 100644 --- a/examples/src/test/java/org/neo4j/docs/driver/RoutingExamplesIT.java +++ b/examples/src/test/java/org/neo4j/docs/driver/RoutingExamplesIT.java @@ -36,6 +36,7 @@ class RoutingExamplesIT { Optional.ofNullable(System.getenv("NEO4J_VERSION")).orElse("4.4"); @Container + @SuppressWarnings("resource") private static final Neo4jContainer NEO4J_CONTAINER = new Neo4jContainer<>( String.format("neo4j:%s-enterprise", NEO4J_VERSION)) .withEnv("NEO4J_ACCEPT_LICENSE_AGREEMENT", "yes") diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/AbstractResultNext.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/AbstractResultNext.java index 2892d7c910..06d8a20990 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/AbstractResultNext.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/AbstractResultNext.java @@ -54,6 +54,7 @@ public CompletionStage processAsync(TestkitState testkitState) } @Override + @SuppressWarnings("DuplicatedCode") public Mono processRx(TestkitState testkitState) { return testkitState.getRxResultHolder(getResultId()).flatMap(resultHolder -> { var subscriber = resultHolder.getSubscriber().orElseGet(() -> { @@ -86,6 +87,7 @@ public Mono processReactive(TestkitState testkitState) { } @Override + @SuppressWarnings("DuplicatedCode") public Mono processReactiveStreams(TestkitState testkitState) { return testkitState.getReactiveResultStreamsHolder(getResultId()).flatMap(resultHolder -> { var subscriber = resultHolder.getSubscriber().orElseGet(() -> { diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionBeginTransaction.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionBeginTransaction.java index 8a17fd4afd..6a1cb8f98a 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionBeginTransaction.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionBeginTransaction.java @@ -56,7 +56,7 @@ public CompletionStage processAsync(TestkitState testkitState) } @Override - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "RedundantSuppression"}) public Mono processRx(TestkitState testkitState) { return testkitState.getRxSessionHolder(data.getSessionId()).flatMap(sessionHolder -> { var session = sessionHolder.getSession(); diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionLastBookmarks.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionLastBookmarks.java index c82b281d15..619b4deee7 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionLastBookmarks.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionLastBookmarks.java @@ -53,8 +53,9 @@ public CompletionStage processAsync(TestkitState testkitState) public Mono processRx(TestkitState testkitState) { return testkitState .getRxSessionHolder(data.getSessionId()) - .map(sessionHolder -> sessionHolder.getSession().lastBookmark()) - .map(bookmark -> bookmark.values().stream().map(Bookmark::from).collect(Collectors.toSet())) + .map(sessionHolder -> sessionHolder.getSession().lastBookmark().values().stream() + .map(Bookmark::from) + .collect(Collectors.toSet())) .map(this::createResponse); } diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionReadTransaction.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionReadTransaction.java index 2302b3a18a..e57b0a2054 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionReadTransaction.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionReadTransaction.java @@ -57,7 +57,7 @@ public TestkitResponse process(TestkitState testkitState) { } @Override - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "DuplicatedCode"}) public CompletionStage processAsync(TestkitState testkitState) { return testkitState .getAsyncSessionHolder(data.getSessionId()) @@ -79,7 +79,7 @@ public CompletionStage processAsync(TestkitState testkitState) } @Override - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "DuplicatedCode"}) public Mono processRx(TestkitState testkitState) { return testkitState .getRxSessionHolder(data.getSessionId()) @@ -98,6 +98,7 @@ public Mono processRx(TestkitState testkitState) { } @Override + @SuppressWarnings("DuplicatedCode") public Mono processReactive(TestkitState testkitState) { return testkitState .getReactiveSessionHolder(data.getSessionId()) @@ -118,6 +119,7 @@ public Mono processReactive(TestkitState testkitState) { } @Override + @SuppressWarnings("DuplicatedCode") public Mono processReactiveStreams(TestkitState testkitState) { return testkitState .getReactiveSessionStreamsHolder(data.getSessionId()) @@ -137,7 +139,7 @@ public Mono processReactiveStreams(TestkitState testkitState) { .then(Mono.just(retryableDone())); } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "DuplicatedCode"}) private TransactionWork handle(TestkitState testkitState, SessionHolder sessionHolder) { return tx -> { var txId = testkitState.addTransactionHolder(new TransactionHolder(sessionHolder, tx)); diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionWriteTransaction.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionWriteTransaction.java index b238c43687..ad405c5fc7 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionWriteTransaction.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/SessionWriteTransaction.java @@ -57,7 +57,7 @@ public TestkitResponse process(TestkitState testkitState) { } @Override - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "DuplicatedCode"}) public CompletionStage processAsync(TestkitState testkitState) { return testkitState .getAsyncSessionHolder(data.getSessionId()) @@ -79,7 +79,7 @@ public CompletionStage processAsync(TestkitState testkitState) } @Override - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "DuplicatedCode"}) public Mono processRx(TestkitState testkitState) { return testkitState .getRxSessionHolder(data.getSessionId()) @@ -98,6 +98,7 @@ public Mono processRx(TestkitState testkitState) { } @Override + @SuppressWarnings("DuplicatedCode") public Mono processReactive(TestkitState testkitState) { return testkitState .getReactiveSessionHolder(data.getSessionId()) @@ -118,6 +119,7 @@ public Mono processReactive(TestkitState testkitState) { } @Override + @SuppressWarnings("DuplicatedCode") public Mono processReactiveStreams(TestkitState testkitState) { return testkitState .getReactiveSessionStreamsHolder(data.getSessionId()) @@ -137,7 +139,7 @@ public Mono processReactiveStreams(TestkitState testkitState) { .then(Mono.just(retryableDone())); } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "DuplicatedCode"}) private TransactionWork handle(TestkitState testkitState, SessionHolder sessionHolder) { return tx -> { var txId = testkitState.addTransactionHolder(new TransactionHolder(sessionHolder, tx)); diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/StartSubTest.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/StartSubTest.java index 3d6c71ecb2..f00b2fb20c 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/StartSubTest.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/StartSubTest.java @@ -58,12 +58,9 @@ static SkipDecision ofSkipped(String reason) { private static SkipDecision checkTzIdSupported(Map params) { var tzId = (String) params.get("tz_id"); - try { - ZoneId.of(tzId); - return SkipDecision.ofNonSkipped(); - } catch (DateTimeException e) { - return SkipDecision.ofSkipped("Timezone not supported: " + tzId); - } + return ZoneId.getAvailableZoneIds().contains(tzId) + ? SkipDecision.ofNonSkipped() + : SkipDecision.ofSkipped("Timezone not supported: " + tzId); } private static SkipDecision checkDateTimeSupported(Map params) { diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TransactionClose.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TransactionClose.java index eeb31e6b28..a0627b9876 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TransactionClose.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/TransactionClose.java @@ -51,7 +51,7 @@ public CompletionStage processAsync(TestkitState testkitState) } @Override - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "RedundantSuppression"}) public Mono processRx(TestkitState testkitState) { return testkitState .getRxTransactionHolder(data.getTxId()) diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/deserializer/TestkitCypherParamDeserializer.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/deserializer/TestkitCypherParamDeserializer.java index 124ff20fbb..5af083b7a8 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/deserializer/TestkitCypherParamDeserializer.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/deserializer/TestkitCypherParamDeserializer.java @@ -62,7 +62,7 @@ public Map deserialize(JsonParser p, DeserializationContext ctxt } for (; key != null; key = p.nextFieldName()) { - String paramType = null; + String paramType; if (p.nextToken() == JsonToken.START_OBJECT) { var fieldName = p.nextFieldName(); diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/deserializer/TestkitListDeserializer.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/deserializer/TestkitListDeserializer.java index ac322aaa8c..6620157fe4 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/deserializer/TestkitListDeserializer.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/deserializer/TestkitListDeserializer.java @@ -66,7 +66,7 @@ public List deserialize(JsonParser p, DeserializationContext ctxt) throws IOE // cypher parameter list while (nextToken != JsonToken.END_ARRAY) { - String paramType = null; + String paramType; if (nextToken == JsonToken.START_OBJECT) { var fieldName = p.nextFieldName();