use of org.neo4j.bolt.runtime.statemachine.impl.TransactionStateMachine.StatementOutcome in project neo4j by neo4j.
the class BoltStateMachineV4Test method shouldNotFailWhenMarkedForTerminationAndPullAll.
@Test
void shouldNotFailWhenMarkedForTerminationAndPullAll() throws Exception {
BoltStateMachineSPIImpl spi = mock(BoltStateMachineSPIImpl.class, RETURNS_MOCKS);
BoltStateMachine machine = init(newMachine(spi));
// move to streaming state
machine.process(BoltV4Messages.run(), nullResponseHandler());
txStateMachine(machine).ctx.statementOutcomes.put(StatementMetadata.ABSENT_QUERY_ID, new StatementOutcome(BoltResult.EMPTY));
BoltResponseHandler responseHandler = mock(BoltResponseHandler.class);
machine.markForTermination();
machine.process(BoltV4Messages.pullAll(), responseHandler);
verify(spi, never()).reportError(any());
assertThat(machine).isNotEqualTo(inState(FailedState.class));
}
use of org.neo4j.bolt.runtime.statemachine.impl.TransactionStateMachine.StatementOutcome in project neo4j by neo4j.
the class TransactionStateMachineTest method shouldCloseResultHandlesWhenConsumeFailsInExplicitTransaction.
@Test
void shouldCloseResultHandlesWhenConsumeFailsInExplicitTransaction() throws Throwable {
BoltTransaction transaction = newTransaction();
TransactionStateMachineSPI stateMachineSPI = newTransactionStateMachineSPI(transaction);
TransactionStateMachine stateMachine = newTransactionStateMachine(stateMachineSPI);
beginTx(stateMachine);
stateMachine.run("SOME STATEMENT", null);
StatementOutcome outcome = stateMachine.ctx.statementOutcomes.get(StatementMetadata.ABSENT_QUERY_ID);
assertNotNull(outcome);
assertNotNull(outcome.resultHandle);
assertNotNull(outcome.result);
RuntimeException e = assertThrows(RuntimeException.class, () -> {
stateMachine.streamResult(StatementMetadata.ABSENT_QUERY_ID, ERROR);
});
assertEquals("some error", e.getMessage());
assertThat(stateMachine.ctx.statementOutcomes.entrySet()).hasSize(0);
assertNotNull(stateMachine.ctx.currentTransaction);
}
use of org.neo4j.bolt.runtime.statemachine.impl.TransactionStateMachine.StatementOutcome in project neo4j by neo4j.
the class TransactionStateMachineTest method shouldCloseResultAndTransactionHandlesWhenConsumeFails.
@Test
void shouldCloseResultAndTransactionHandlesWhenConsumeFails() throws Exception {
BoltTransaction transaction = newTransaction();
TransactionStateMachineSPI stateMachineSPI = newTransactionStateMachineSPI(transaction);
TransactionStateMachine stateMachine = newTransactionStateMachine(stateMachineSPI);
stateMachine.run("SOME STATEMENT", null);
StatementOutcome outcome = stateMachine.ctx.statementOutcomes.get(StatementMetadata.ABSENT_QUERY_ID);
assertNotNull(outcome);
assertNotNull(outcome.resultHandle);
assertNotNull(outcome.result);
RuntimeException e = assertThrows(RuntimeException.class, () -> {
stateMachine.streamResult(StatementMetadata.ABSENT_QUERY_ID, ERROR);
});
assertEquals("some error", e.getMessage());
assertThat(stateMachine.ctx.statementOutcomes.entrySet()).hasSize(0);
assertNull(stateMachine.ctx.currentTransaction);
}
use of org.neo4j.bolt.runtime.statemachine.impl.TransactionStateMachine.StatementOutcome in project neo4j by neo4j.
the class BoltStateMachineV4Test method shouldTerminateOnAuthExpiryDuringSTREAMINGDiscardAll.
@Test
void shouldTerminateOnAuthExpiryDuringSTREAMINGDiscardAll() throws Throwable {
// Given
BoltResponseHandler responseHandler = mock(BoltResponseHandler.class);
doThrow(new AuthorizationExpiredException("Auth expired!")).when(responseHandler).onDiscardRecords(any(), eq(STREAM_LIMIT_UNLIMITED));
BoltStateMachine machine = init(newMachine());
// move to streaming state
machine.process(BoltV4Messages.run(), nullResponseHandler());
// We assume the only implementation of statement processor is TransactionStateMachine
txStateMachine(machine).ctx.statementOutcomes.put(StatementMetadata.ABSENT_QUERY_ID, new StatementOutcome(BoltResult.EMPTY));
// When & Then
try {
machine.process(BoltV4Messages.discardAll(), responseHandler);
fail("Exception expected");
} catch (BoltConnectionAuthFatality e) {
assertEquals("Auth expired!", e.getCause().getMessage());
}
}
use of org.neo4j.bolt.runtime.statemachine.impl.TransactionStateMachine.StatementOutcome in project neo4j by neo4j.
the class BoltStateMachineV4Test method shouldTerminateOnAuthExpiryDuringSTREAMINGPullAll.
@Test
void shouldTerminateOnAuthExpiryDuringSTREAMINGPullAll() throws Throwable {
// Given
BoltResponseHandler responseHandler = mock(BoltResponseHandler.class);
doThrow(new AuthorizationExpiredException("Auth expired!")).when(responseHandler).onPullRecords(any(), eq(STREAM_LIMIT_UNLIMITED));
BoltStateMachine machine = init(newMachine());
// move to streaming state
machine.process(BoltV4Messages.run(), nullResponseHandler());
// We assume the only implementation of statement processor is TransactionStateMachine
txStateMachine(machine).ctx.statementOutcomes.put(StatementMetadata.ABSENT_QUERY_ID, new StatementOutcome(BoltResult.EMPTY));
// When & Then
try {
machine.process(BoltV4Messages.pullAll(), responseHandler);
fail("Exception expected");
} catch (BoltConnectionAuthFatality e) {
assertEquals("Auth expired!", e.getCause().getMessage());
}
verify(responseHandler).onPullRecords(any(), eq(STREAM_LIMIT_UNLIMITED));
}
Aggregations