Search in sources :

Example 16 with TransactionStateMachineSPI

use of org.neo4j.bolt.runtime.statemachine.TransactionStateMachineSPI 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);
}
Also used : BoltTransaction(org.neo4j.bolt.dbapi.BoltTransaction) StatementOutcome(org.neo4j.bolt.runtime.statemachine.impl.TransactionStateMachine.StatementOutcome) TransactionStateMachineSPI(org.neo4j.bolt.runtime.statemachine.TransactionStateMachineSPI) Test(org.junit.jupiter.api.Test)

Example 17 with TransactionStateMachineSPI

use of org.neo4j.bolt.runtime.statemachine.TransactionStateMachineSPI in project neo4j by neo4j.

the class TransactionStateMachineTest method newTransactionStateMachineSPI.

private static TransactionStateMachineSPI newTransactionStateMachineSPI(BoltTransaction transaction, BoltResultHandle resultHandle) {
    TransactionStateMachineSPI stateMachineSPI = mock(TransactionStateMachineSPI.class);
    when(stateMachineSPI.beginTransaction(any(), any(), any(), any(), any(), any())).thenReturn(transaction);
    when(stateMachineSPI.executeQuery(any(), anyString(), any())).thenReturn(resultHandle);
    return stateMachineSPI;
}
Also used : TransactionStateMachineSPI(org.neo4j.bolt.runtime.statemachine.TransactionStateMachineSPI)

Example 18 with TransactionStateMachineSPI

use of org.neo4j.bolt.runtime.statemachine.TransactionStateMachineSPI 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);
}
Also used : BoltTransaction(org.neo4j.bolt.dbapi.BoltTransaction) StatementOutcome(org.neo4j.bolt.runtime.statemachine.impl.TransactionStateMachine.StatementOutcome) TransactionStateMachineSPI(org.neo4j.bolt.runtime.statemachine.TransactionStateMachineSPI) Test(org.junit.jupiter.api.Test)

Example 19 with TransactionStateMachineSPI

use of org.neo4j.bolt.runtime.statemachine.TransactionStateMachineSPI in project neo4j by neo4j.

the class TransactionStateMachineTest method shouldOpenImplicitTransactionForPeriodicCommitQuery.

@Test
void shouldOpenImplicitTransactionForPeriodicCommitQuery() throws Exception {
    BoltTransaction transaction = newTransaction();
    TransactionStateMachineSPI stateMachineSPI = newTransactionStateMachineSPI(transaction);
    when(stateMachineSPI.isPeriodicCommit(PERIODIC_COMMIT_QUERY)).thenReturn(true);
    final BoltTransaction periodicTransaction = mock(BoltTransaction.class);
    when(stateMachineSPI.beginPeriodicCommitTransaction(any(), any(), any(), any(), any(), any())).thenReturn(periodicTransaction);
    TransactionStateMachine stateMachine = newTransactionStateMachine(stateMachineSPI);
    stateMachine.run(PERIODIC_COMMIT_QUERY, EMPTY_MAP);
    // transaction was created only to stream back result of the periodic commit query
    assertEquals(periodicTransaction, stateMachine.ctx.currentTransaction);
    InOrder inOrder = inOrder(stateMachineSPI);
    inOrder.verify(stateMachineSPI).isPeriodicCommit(PERIODIC_COMMIT_QUERY);
    // implicit transaction was started for periodic query execution
    inOrder.verify(stateMachineSPI).beginPeriodicCommitTransaction(any(LoginContext.class), any(), any(), any(), any(), any());
    // periodic commit query was executed after specific transaction started
    inOrder.verify(stateMachineSPI).executeQuery(any(BoltQueryExecutor.class), eq(PERIODIC_COMMIT_QUERY), eq(EMPTY_MAP));
}
Also used : BoltQueryExecutor(org.neo4j.bolt.dbapi.BoltQueryExecutor) BoltTransaction(org.neo4j.bolt.dbapi.BoltTransaction) InOrder(org.mockito.InOrder) LoginContext(org.neo4j.internal.kernel.api.security.LoginContext) TransactionStateMachineSPI(org.neo4j.bolt.runtime.statemachine.TransactionStateMachineSPI) Test(org.junit.jupiter.api.Test)

Example 20 with TransactionStateMachineSPI

use of org.neo4j.bolt.runtime.statemachine.TransactionStateMachineSPI in project neo4j by neo4j.

the class TransactionStateMachineTest method newTransactionStateMachineSPI.

private static TransactionStateMachineSPI newTransactionStateMachineSPI(BoltTransaction transaction) throws KernelException {
    BoltResultHandle resultHandle = newResultHandle();
    TransactionStateMachineSPI stateMachineSPI = mock(TransactionStateMachineSPI.class);
    when(stateMachineSPI.beginTransaction(any(), any(), any(), any(), any(), any())).thenReturn(transaction);
    when(stateMachineSPI.executeQuery(any(), anyString(), any())).thenReturn(resultHandle);
    return stateMachineSPI;
}
Also used : BoltResultHandle(org.neo4j.bolt.runtime.BoltResultHandle) TransactionStateMachineSPI(org.neo4j.bolt.runtime.statemachine.TransactionStateMachineSPI)

Aggregations

TransactionStateMachineSPI (org.neo4j.bolt.runtime.statemachine.TransactionStateMachineSPI)21 Test (org.junit.jupiter.api.Test)18 BoltTransaction (org.neo4j.bolt.dbapi.BoltTransaction)13 BoltResultHandle (org.neo4j.bolt.runtime.BoltResultHandle)4 StatementProcessorReleaseManager (org.neo4j.bolt.runtime.statemachine.StatementProcessorReleaseManager)3 TransactionStateMachineSPIProvider (org.neo4j.bolt.runtime.statemachine.TransactionStateMachineSPIProvider)3 DatabaseManagementService (org.neo4j.dbms.api.DatabaseManagementService)3 StatementOutcome (org.neo4j.bolt.runtime.statemachine.impl.TransactionStateMachine.StatementOutcome)2 InOrder (org.mockito.InOrder)1 BoltQueryExecutor (org.neo4j.bolt.dbapi.BoltQueryExecutor)1 BoltConnectionAuthFatality (org.neo4j.bolt.runtime.BoltConnectionAuthFatality)1 BoltStateMachine (org.neo4j.bolt.runtime.statemachine.BoltStateMachine)1 AuthorizationExpiredException (org.neo4j.graphdb.security.AuthorizationExpiredException)1 LoginContext (org.neo4j.internal.kernel.api.security.LoginContext)1