Skip to content

Commit a20ef2e

Browse files
committed
No unbounded Future#get() in tests
Production code uses unbounded `Futures#blockingGet()` that ignores interrupts and waits until task completes. This is not desired in tests because we do not expect async calls to take long time there. Commit makes all tests use bounded wait from `TestUtil` class instead.
1 parent 0be2121 commit a20ef2e

22 files changed

+209
-213
lines changed

driver/src/main/java/org/neo4j/driver/internal/DriverFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,15 @@ public final Driver newInstance( URI uri, AuthToken authToken, RoutingSettings r
8080
{
8181
InternalDriver driver = createDriver( uri, address, connectionPool, config, newRoutingSettings,
8282
eventExecutorGroup, securityPlan, retryLogic );
83-
Futures.getBlocking( driver.verifyConnectivity() );
83+
Futures.blockingGet( driver.verifyConnectivity() );
8484
return driver;
8585
}
8686
catch ( Throwable driverError )
8787
{
8888
// we need to close the connection pool if driver creation threw exception
8989
try
9090
{
91-
Futures.getBlocking( connectionPool.close() );
91+
Futures.blockingGet( connectionPool.close() );
9292
}
9393
catch ( Throwable closeError )
9494
{

driver/src/main/java/org/neo4j/driver/internal/ExplicitTransaction.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@
4949

5050
import static java.util.Collections.emptyMap;
5151
import static java.util.concurrent.CompletableFuture.completedFuture;
52+
import static org.neo4j.driver.internal.util.Futures.blockingGet;
5253
import static org.neo4j.driver.internal.util.Futures.completionErrorCause;
5354
import static org.neo4j.driver.internal.util.Futures.failedFuture;
54-
import static org.neo4j.driver.internal.util.Futures.getBlocking;
5555
import static org.neo4j.driver.v1.Values.value;
5656

5757
public class ExplicitTransaction implements Transaction
@@ -151,7 +151,7 @@ public void failure()
151151
@Override
152152
public void close()
153153
{
154-
getBlocking( closeAsync() );
154+
blockingGet( closeAsync() );
155155
}
156156

157157
CompletionStage<Void> closeAsync()
@@ -275,7 +275,7 @@ public CompletionStage<StatementResultCursor> runAsync( String statementTemplate
275275
@Override
276276
public StatementResult run( Statement statement )
277277
{
278-
StatementResultCursor cursor = getBlocking( run( statement, false ) );
278+
StatementResultCursor cursor = blockingGet( run( statement, false ) );
279279
return new InternalStatementResult( cursor );
280280
}
281281

driver/src/main/java/org/neo4j/driver/internal/InternalDriver.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import org.neo4j.driver.v1.Session;
2828

2929
import static java.util.concurrent.CompletableFuture.completedFuture;
30-
import static org.neo4j.driver.internal.util.Futures.getBlocking;
30+
import static org.neo4j.driver.internal.util.Futures.blockingGet;
3131

3232
public class InternalDriver implements Driver
3333
{
@@ -100,7 +100,7 @@ private Session newSession( AccessMode mode, Bookmark bookmark )
100100
@Override
101101
public void close()
102102
{
103-
getBlocking( closeAsync() );
103+
blockingGet( closeAsync() );
104104
}
105105

106106
@Override

driver/src/main/java/org/neo4j/driver/internal/InternalStatementResult.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import org.neo4j.driver.v1.summary.ResultSummary;
2929
import org.neo4j.driver.v1.util.Function;
3030

31-
import static org.neo4j.driver.internal.util.Futures.getBlocking;
31+
import static org.neo4j.driver.internal.util.Futures.blockingGet;
3232

3333
public class InternalStatementResult implements StatementResult
3434
{
@@ -45,7 +45,7 @@ public List<String> keys()
4545
{
4646
if ( keys == null )
4747
{
48-
getBlocking( cursor.peekAsync() );
48+
blockingGet( cursor.peekAsync() );
4949
keys = cursor.keys();
5050
}
5151
return keys;
@@ -54,13 +54,13 @@ public List<String> keys()
5454
@Override
5555
public boolean hasNext()
5656
{
57-
return getBlocking( cursor.peekAsync() ) != null;
57+
return blockingGet( cursor.peekAsync() ) != null;
5858
}
5959

6060
@Override
6161
public Record next()
6262
{
63-
Record record = getBlocking( cursor.nextAsync() );
63+
Record record = blockingGet( cursor.nextAsync() );
6464
if ( record == null )
6565
{
6666
throw new NoSuchRecordException( "No more records" );
@@ -71,13 +71,13 @@ public Record next()
7171
@Override
7272
public Record single()
7373
{
74-
return getBlocking( cursor.singleAsync() );
74+
return blockingGet( cursor.singleAsync() );
7575
}
7676

7777
@Override
7878
public Record peek()
7979
{
80-
Record record = getBlocking( cursor.peekAsync() );
80+
Record record = blockingGet( cursor.peekAsync() );
8181
if ( record == null )
8282
{
8383
throw new NoSuchRecordException( "Cannot peek past the last record" );
@@ -88,25 +88,25 @@ public Record peek()
8888
@Override
8989
public List<Record> list()
9090
{
91-
return getBlocking( cursor.listAsync() );
91+
return blockingGet( cursor.listAsync() );
9292
}
9393

9494
@Override
9595
public <T> List<T> list( Function<Record, T> mapFunction )
9696
{
97-
return getBlocking( cursor.listAsync( mapFunction ) );
97+
return blockingGet( cursor.listAsync( mapFunction ) );
9898
}
9999

100100
@Override
101101
public ResultSummary consume()
102102
{
103-
return getBlocking( cursor.consumeAsync() );
103+
return blockingGet( cursor.consumeAsync() );
104104
}
105105

106106
@Override
107107
public ResultSummary summary()
108108
{
109-
return getBlocking( cursor.summaryAsync() );
109+
return blockingGet( cursor.summaryAsync() );
110110
}
111111

112112
@Override

driver/src/main/java/org/neo4j/driver/internal/LeakLoggingNetworkSession.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ protected void finalize() throws Throwable
4646

4747
private void logLeakIfNeeded()
4848
{
49-
Boolean isOpen = Futures.getBlocking( currentConnectionIsOpen() );
49+
Boolean isOpen = Futures.blockingGet( currentConnectionIsOpen() );
5050
if ( isOpen )
5151
{
5252
logger.error( "Neo4j Session object leaked, please ensure that your application" +

driver/src/main/java/org/neo4j/driver/internal/NetworkSession.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@
4848
import org.neo4j.driver.v1.types.TypeSystem;
4949

5050
import static java.util.concurrent.CompletableFuture.completedFuture;
51+
import static org.neo4j.driver.internal.util.Futures.blockingGet;
5152
import static org.neo4j.driver.internal.util.Futures.failedFuture;
52-
import static org.neo4j.driver.internal.util.Futures.getBlocking;
5353
import static org.neo4j.driver.v1.Values.value;
5454

5555
public class NetworkSession implements Session
@@ -133,7 +133,7 @@ public CompletionStage<StatementResultCursor> runAsync( String statementText, Va
133133
@Override
134134
public StatementResult run( Statement statement )
135135
{
136-
StatementResultCursor cursor = getBlocking( runAsync( statement, false ) );
136+
StatementResultCursor cursor = blockingGet( runAsync( statement, false ) );
137137
return new InternalStatementResult( cursor );
138138
}
139139

@@ -153,7 +153,7 @@ public boolean isOpen()
153153
@Override
154154
public void close()
155155
{
156-
getBlocking( closeAsync() );
156+
blockingGet( closeAsync() );
157157
}
158158

159159
@Override
@@ -190,7 +190,7 @@ public CompletionStage<Void> closeAsync()
190190
@Override
191191
public Transaction beginTransaction()
192192
{
193-
return getBlocking( beginTransactionAsync( mode ) );
193+
return blockingGet( beginTransactionAsync( mode ) );
194194
}
195195

196196
@Deprecated
@@ -249,7 +249,7 @@ public String lastBookmark()
249249
@Override
250250
public void reset()
251251
{
252-
getBlocking( resetAsync() );
252+
blockingGet( resetAsync() );
253253
}
254254

255255
private CompletionStage<Void> resetAsync()
@@ -289,7 +289,7 @@ private <T> T transaction( AccessMode mode, TransactionWork<T> work )
289289
// event loop thread will bock and wait for itself to read some data
290290
return retryLogic.retry( () ->
291291
{
292-
try ( Transaction tx = getBlocking( beginTransactionAsync( mode ) ) )
292+
try ( Transaction tx = blockingGet( beginTransactionAsync( mode ) ) )
293293
{
294294
try
295295
{

driver/src/main/java/org/neo4j/driver/internal/util/Futures.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public static <T> CompletableFuture<T> failedFuture( Throwable error )
7373
return result;
7474
}
7575

76-
public static <V> V getBlocking( CompletionStage<V> stage )
76+
public static <V> V blockingGet( CompletionStage<V> stage )
7777
{
7878
EventLoopGroupFactory.assertNotInEventLoopThread();
7979

driver/src/test/java/org/neo4j/driver/internal/DirectConnectionProviderTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@
3333
import static org.mockito.Mockito.mock;
3434
import static org.mockito.Mockito.verify;
3535
import static org.mockito.Mockito.when;
36-
import static org.neo4j.driver.internal.util.Futures.getBlocking;
3736
import static org.neo4j.driver.v1.AccessMode.READ;
3837
import static org.neo4j.driver.v1.AccessMode.WRITE;
38+
import static org.neo4j.driver.v1.util.TestUtil.await;
3939

4040
public class DirectConnectionProviderTest
4141
{
@@ -49,8 +49,8 @@ public void acquiresConnectionsFromThePool()
4949
ConnectionPool pool = poolMock( address, connection1, connection2 );
5050
DirectConnectionProvider provider = new DirectConnectionProvider( address, pool );
5151

52-
assertSame( connection1, getBlocking( provider.acquireConnection( READ ) ) );
53-
assertSame( connection2, getBlocking( provider.acquireConnection( WRITE ) ) );
52+
assertSame( connection1, await( provider.acquireConnection( READ ) ) );
53+
assertSame( connection2, await( provider.acquireConnection( WRITE ) ) );
5454
}
5555

5656
@Test

driver/src/test/java/org/neo4j/driver/internal/ExplicitTransactionTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
import static org.mockito.Mockito.mock;
4040
import static org.mockito.Mockito.never;
4141
import static org.mockito.Mockito.verify;
42-
import static org.neo4j.driver.internal.util.Futures.getBlocking;
42+
import static org.neo4j.driver.v1.util.TestUtil.await;
4343
import static org.neo4j.driver.v1.util.TestUtil.connectionMock;
4444

4545
public class ExplicitTransactionTest
@@ -235,7 +235,7 @@ public void shouldReleaseConnectionWhenBeginFails()
235235

236236
try
237237
{
238-
getBlocking( tx.beginAsync( Bookmark.from( "SomeBookmark" ) ) );
238+
await( tx.beginAsync( Bookmark.from( "SomeBookmark" ) ) );
239239
fail( "Exception expected" );
240240
}
241241
catch ( RuntimeException e )
@@ -251,7 +251,7 @@ public void shouldNotReleaseConnectionWhenBeginSucceeds()
251251
{
252252
Connection connection = connectionWithBegin( handler -> handler.onSuccess( emptyMap() ) );
253253
ExplicitTransaction tx = new ExplicitTransaction( connection, mock( NetworkSession.class ) );
254-
getBlocking( tx.beginAsync( Bookmark.from( "SomeBookmark" ) ) );
254+
await( tx.beginAsync( Bookmark.from( "SomeBookmark" ) ) );
255255

256256
verify( connection, never() ).release();
257257
}
@@ -270,7 +270,7 @@ private static ExplicitTransaction beginTx( Connection connection, NetworkSessio
270270
Bookmark initialBookmark )
271271
{
272272
ExplicitTransaction tx = new ExplicitTransaction( connection, session );
273-
return getBlocking( tx.beginAsync( initialBookmark ) );
273+
return await( tx.beginAsync( initialBookmark ) );
274274
}
275275

276276
private static Connection connectionWithBegin( Consumer<ResponseHandler> beginBehaviour )

driver/src/test/java/org/neo4j/driver/internal/InternalDriverTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import static org.mockito.Mockito.mock;
2828
import static org.mockito.Mockito.verify;
2929
import static org.mockito.Mockito.when;
30-
import static org.neo4j.driver.internal.util.Futures.getBlocking;
30+
import static org.neo4j.driver.v1.util.TestUtil.await;
3131

3232
public class InternalDriverTest
3333
{
@@ -37,7 +37,7 @@ public void shouldCloseSessionFactory()
3737
SessionFactory sessionFactory = sessionFactoryMock();
3838
InternalDriver driver = newDriver( sessionFactory );
3939

40-
assertNull( getBlocking( driver.closeAsync() ) );
40+
assertNull( await( driver.closeAsync() ) );
4141
verify( sessionFactory ).close();
4242
}
4343

@@ -47,9 +47,9 @@ public void shouldNotCloseSessionFactoryMultipleTimes()
4747
SessionFactory sessionFactory = sessionFactoryMock();
4848
InternalDriver driver = newDriver( sessionFactory );
4949

50-
assertNull( getBlocking( driver.closeAsync() ) );
51-
assertNull( getBlocking( driver.closeAsync() ) );
52-
assertNull( getBlocking( driver.closeAsync() ) );
50+
assertNull( await( driver.closeAsync() ) );
51+
assertNull( await( driver.closeAsync() ) );
52+
assertNull( await( driver.closeAsync() ) );
5353

5454
verify( sessionFactory ).close();
5555
}

driver/src/test/java/org/neo4j/driver/internal/NetworkSessionTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@
7171
import static org.mockito.Mockito.when;
7272
import static org.neo4j.driver.internal.logging.DevNullLogging.DEV_NULL_LOGGING;
7373
import static org.neo4j.driver.internal.util.Futures.failedFuture;
74-
import static org.neo4j.driver.internal.util.Futures.getBlocking;
7574
import static org.neo4j.driver.v1.AccessMode.READ;
7675
import static org.neo4j.driver.v1.AccessMode.WRITE;
76+
import static org.neo4j.driver.v1.util.TestUtil.await;
7777
import static org.neo4j.driver.v1.util.TestUtil.connectionMock;
7878

7979
public class NetworkSessionTest
@@ -211,7 +211,7 @@ public void releasesOpenConnectionUsedForRunWhenSessionIsClosed()
211211

212212
session.run( query );
213213

214-
getBlocking( session.closeAsync() );
214+
await( session.closeAsync() );
215215

216216
InOrder inOrder = inOrder( connection );
217217
inOrder.verify( connection ).runAndFlush( eq( "RETURN 1" ), any(), any(), any() );

driver/src/test/java/org/neo4j/driver/internal/async/ResultCursorsHolderTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import static org.junit.Assert.fail;
3333
import static org.mockito.Mockito.mock;
3434
import static org.mockito.Mockito.when;
35-
import static org.neo4j.driver.internal.util.Futures.getBlocking;
35+
import static org.neo4j.driver.v1.util.TestUtil.await;
3636

3737
public class ResultCursorsHolderTest
3838
{
@@ -41,7 +41,7 @@ public void shouldReturnNoErrorWhenNoCursorStages()
4141
{
4242
ResultCursorsHolder holder = new ResultCursorsHolder();
4343

44-
Throwable error = getBlocking( holder.retrieveNotConsumedError() );
44+
Throwable error = await( holder.retrieveNotConsumedError() );
4545
assertNull( error );
4646
}
4747

@@ -71,7 +71,7 @@ public void shouldReturnNoErrorWhenCursorStagesHaveNoErrors()
7171
holder.add( cursorWithoutError() );
7272
holder.add( cursorWithoutError() );
7373

74-
Throwable error = getBlocking( holder.retrieveNotConsumedError() );
74+
Throwable error = await( holder.retrieveNotConsumedError() );
7575
assertNull( error );
7676
}
7777

@@ -85,7 +85,7 @@ public void shouldNotReturnStageErrors()
8585
holder.add( cursorWithoutError() );
8686
holder.add( Futures.failedFuture( new IOException( "Failed to do IO" ) ) );
8787

88-
Throwable error = getBlocking( holder.retrieveNotConsumedError() );
88+
Throwable error = await( holder.retrieveNotConsumedError() );
8989
assertNull( error );
9090
}
9191

@@ -100,7 +100,7 @@ public void shouldReturnErrorWhenOneCursorFailed()
100100
holder.add( cursorWithError( error ) );
101101
holder.add( cursorWithoutError() );
102102

103-
Throwable retrievedError = getBlocking( holder.retrieveNotConsumedError() );
103+
Throwable retrievedError = await( holder.retrieveNotConsumedError() );
104104
assertEquals( error, retrievedError );
105105
}
106106

@@ -117,7 +117,7 @@ public void shouldReturnFirstError()
117117
holder.add( cursorWithError( error2 ) );
118118
holder.add( cursorWithError( error3 ) );
119119

120-
assertEquals( error1, getBlocking( holder.retrieveNotConsumedError() ) );
120+
assertEquals( error1, await( holder.retrieveNotConsumedError() ) );
121121
}
122122

123123
private CompletionStage<InternalStatementResultCursor> cursorWithoutError()

0 commit comments

Comments
 (0)