use of org.neo4j.bolt.runtime.statemachine.BoltStateMachine in project neo4j by neo4j.
the class BoltStateMachineV4Test method testReadyStateAfterMarkFailedOnNextMessage.
private static void testReadyStateAfterMarkFailedOnNextMessage(ThrowingBiConsumer<BoltStateMachine, BoltResponseHandler, BoltConnectionFatality> action) throws Exception {
// Given
BoltStateMachine machine = init(newMachine());
BoltResponseHandler responseHandler = mock(BoltResponseHandler.class);
Neo4jError error = Neo4jError.from(Status.Request.NoThreadsAvailable, "no threads");
machine.markFailed(error);
// When
action.accept(machine, responseHandler);
// Expect
assertNull(pendingError(machine));
assertFalse(pendingIgnore(machine));
assertThat(machine).satisfies(inState(ReadyState.class));
verify(responseHandler, never()).markFailed(any());
verify(responseHandler, never()).markIgnored();
}
use of org.neo4j.bolt.runtime.statemachine.BoltStateMachine in project neo4j by neo4j.
the class BoltStateMachineV4Test method testFailOnNestedTransactions.
@Test
void testFailOnNestedTransactions() throws Throwable {
// Given
BoltStateMachine machine = init(newMachine());
// Given there is a running transaction
machine.process(BoltV4Messages.begin(), nullResponseHandler());
// When
assertThrows(BoltProtocolBreachFatality.class, () -> machine.process(BoltV4Messages.begin(), nullResponseHandler()));
// Then
assertThat(machine).satisfies(inState(null));
}
use of org.neo4j.bolt.runtime.statemachine.BoltStateMachine in project neo4j by neo4j.
the class BoltStateMachineV4Test method shouldBeAbleToResetWhenInReadyState.
@Test
void shouldBeAbleToResetWhenInReadyState() throws Throwable {
BoltStateMachine machine = init(newMachine());
assertThat(machine).satisfies(canReset());
assertThat(machine).satisfies(hasNoTransaction());
}
use of org.neo4j.bolt.runtime.statemachine.BoltStateMachine in project neo4j by neo4j.
the class BoltStateMachineV4Test method shouldSetPendingIgnoreOnMarkFailedIfAlreadyFailedAndNoHandler.
@Test
void shouldSetPendingIgnoreOnMarkFailedIfAlreadyFailedAndNoHandler() throws Exception {
BoltStateMachine machine = newMachine();
Neo4jError error1 = Neo4jError.from(new RuntimeException());
machine.markFailed(error1);
Neo4jError error2 = Neo4jError.from(Status.Request.NoThreadsAvailable, "no threads");
machine.markFailed(error2);
assertTrue(pendingIgnore(machine));
// error remained the same and was ignored
assertEquals(error1, pendingError(machine));
assertThat(machine).satisfies(inState(FailedState.class));
}
use of org.neo4j.bolt.runtime.statemachine.BoltStateMachine in project neo4j by neo4j.
the class BoltStateMachineV4Test method shouldSetPendingErrorOnMarkFailedIfNoHandler.
@Test
void shouldSetPendingErrorOnMarkFailedIfNoHandler() {
BoltStateMachineSPIImpl spi = mock(BoltStateMachineSPIImpl.class);
BoltChannel boltChannel = mock(BoltChannel.class);
var memoryTracker = mock(MemoryTracker.class);
BoltStateMachine machine = new BoltStateMachineV4(spi, boltChannel, Clock.systemUTC(), mock(DefaultDatabaseResolver.class), MapValue.EMPTY, memoryTracker);
Neo4jError error = Neo4jError.from(Status.Request.NoThreadsAvailable, "no threads");
machine.markFailed(error);
assertEquals(error, pendingError(machine));
assertThat(machine).satisfies(inState(FailedState.class));
}
Aggregations