Search in sources :

Example 11 with Statement

use of org.neo4j.server.http.cypher.format.api.Statement in project neo4j by neo4j.

the class InvocationTest method shouldHandleAuthorizationErrorWhenStartingTransaction.

@Test
void shouldHandleAuthorizationErrorWhenStartingTransaction() {
    // given
    when(databaseFacade.beginTransaction(any(), any(), any())).thenThrow(new AuthorizationViolationException("Forbidden"));
    when(registry.begin(any(TransactionHandle.class))).thenReturn(1337L);
    TransactionHandle handle = getTransactionHandle(executionEngine, registry);
    InputEventStream inputEventStream = mock(InputEventStream.class);
    Statement statement = new Statement("query", map());
    when(inputEventStream.read()).thenReturn(statement, NULL_STATEMENT);
    mockDefaultResult();
    Invocation invocation = new Invocation(log, handle, uriScheme.txCommitUri(1337L), mock(MemoryPool.class, RETURNS_MOCKS), inputEventStream, true);
    // when
    invocation.execute(outputEventStream);
    // then
    verifyNoMoreInteractions(log);
    InOrder outputOrder = inOrder(outputEventStream);
    outputOrder.verify(outputEventStream).writeFailure(Status.Security.Forbidden, "Forbidden");
    outputOrder.verify(outputEventStream).writeTransactionInfo(TransactionNotificationState.NO_TRANSACTION, uriScheme.txCommitUri(1337L), -1);
    verifyNoMoreInteractions(outputEventStream);
}
Also used : InOrder(org.mockito.InOrder) InputEventStream(org.neo4j.server.http.cypher.format.api.InputEventStream) Statement(org.neo4j.server.http.cypher.format.api.Statement) AuthorizationViolationException(org.neo4j.graphdb.security.AuthorizationViolationException) MemoryPool(org.neo4j.memory.MemoryPool) Test(org.junit.jupiter.api.Test)

Example 12 with Statement

use of org.neo4j.server.http.cypher.format.api.Statement in project neo4j by neo4j.

the class InvocationTest method shouldCommitSinglePeriodicCommitStatement.

@Test
void shouldCommitSinglePeriodicCommitStatement() {
    // given
    String queryText = "USING PERIODIC COMMIT CREATE()";
    var transaction = mock(InternalTransaction.class);
    when(databaseFacade.beginTransaction(eq(IMPLICIT), any(LoginContext.class), any(ClientConnectionInfo.class), anyLong(), any(TimeUnit.class))).thenReturn(transaction);
    when(transaction.execute(eq(queryText), any())).thenReturn(executionResult);
    when(executionEngine.isPeriodicCommit(queryText)).thenReturn(true);
    when(registry.begin(any(TransactionHandle.class))).thenReturn(1337L);
    TransactionHandle handle = getTransactionHandle(executionEngine, registry);
    InputEventStream inputEventStream = mock(InputEventStream.class);
    Statement statement = new Statement(queryText, map());
    when(inputEventStream.read()).thenReturn(statement, NULL_STATEMENT);
    mockDefaultResult();
    Invocation invocation = new Invocation(log, handle, uriScheme.txCommitUri(1337L), mock(MemoryPool.class, RETURNS_MOCKS), inputEventStream, true);
    // when
    invocation.execute(outputEventStream);
    InOrder outputOrder = inOrder(outputEventStream);
    outputOrder.verify(outputEventStream).writeStatementStart(statement, List.of("c1", "c2", "c3"));
    verifyDefaultResultRows(outputOrder);
    outputOrder.verify(outputEventStream).writeStatementEnd(queryExecutionType, queryStatistics, executionPlanDescription, notifications);
    outputOrder.verify(outputEventStream).writeTransactionInfo(TransactionNotificationState.COMMITTED, uriScheme.txCommitUri(1337L), -1);
    verifyNoMoreInteractions(outputEventStream);
}
Also used : ClientConnectionInfo(org.neo4j.internal.kernel.api.connectioninfo.ClientConnectionInfo) LoginContext(org.neo4j.internal.kernel.api.security.LoginContext) InOrder(org.mockito.InOrder) InputEventStream(org.neo4j.server.http.cypher.format.api.InputEventStream) Statement(org.neo4j.server.http.cypher.format.api.Statement) TimeUnit(java.util.concurrent.TimeUnit) MemoryPool(org.neo4j.memory.MemoryPool) Test(org.junit.jupiter.api.Test)

Example 13 with Statement

use of org.neo4j.server.http.cypher.format.api.Statement in project neo4j by neo4j.

the class InvocationTest method shouldHandleErrorWhenStartingTransaction.

@Test
void shouldHandleErrorWhenStartingTransaction() {
    // given
    when(databaseFacade.beginTransaction(any(), any(), any())).thenThrow(new IllegalStateException("Something went wrong"));
    when(registry.begin(any(TransactionHandle.class))).thenReturn(1337L);
    TransactionHandle handle = getTransactionHandle(executionEngine, registry);
    InputEventStream inputEventStream = mock(InputEventStream.class);
    Statement statement = new Statement("query", map());
    when(inputEventStream.read()).thenReturn(statement, NULL_STATEMENT);
    mockDefaultResult();
    Invocation invocation = new Invocation(log, handle, uriScheme.txCommitUri(1337L), mock(MemoryPool.class, RETURNS_MOCKS), inputEventStream, true);
    // when
    invocation.execute(outputEventStream);
    // then
    verify(log).error(eq("Failed to start transaction"), any(IllegalStateException.class));
    InOrder outputOrder = inOrder(outputEventStream);
    outputOrder.verify(outputEventStream).writeFailure(Status.Transaction.TransactionStartFailed, "Something went wrong");
    outputOrder.verify(outputEventStream).writeTransactionInfo(TransactionNotificationState.NO_TRANSACTION, uriScheme.txCommitUri(1337L), -1);
    verifyNoMoreInteractions(outputEventStream);
}
Also used : InOrder(org.mockito.InOrder) InputEventStream(org.neo4j.server.http.cypher.format.api.InputEventStream) Statement(org.neo4j.server.http.cypher.format.api.Statement) MemoryPool(org.neo4j.memory.MemoryPool) Test(org.junit.jupiter.api.Test)

Example 14 with Statement

use of org.neo4j.server.http.cypher.format.api.Statement in project neo4j by neo4j.

the class InvocationTest method shouldCommitTransactionAndTellRegistryToForgetItsHandle.

@Test
void shouldCommitTransactionAndTellRegistryToForgetItsHandle() {
    // given
    when(internalTransaction.execute("query", emptyMap())).thenReturn(executionResult);
    when(registry.begin(any(TransactionHandle.class))).thenReturn(1337L);
    TransactionHandle handle = getTransactionHandle(executionEngine, registry);
    InputEventStream inputEventStream = mock(InputEventStream.class);
    Statement statement = new Statement("query", map());
    when(inputEventStream.read()).thenReturn(statement, NULL_STATEMENT);
    mockDefaultResult();
    Invocation invocation = new Invocation(log, handle, uriScheme.txCommitUri(1337L), mock(MemoryPool.class, RETURNS_MOCKS), inputEventStream, true);
    // when
    invocation.execute(outputEventStream);
    // then
    InOrder transactionOrder = inOrder(internalTransaction, registry);
    transactionOrder.verify(internalTransaction).commit();
    transactionOrder.verify(registry).forget(1337L);
    InOrder outputOrder = inOrder(outputEventStream);
    outputOrder.verify(outputEventStream).writeStatementStart(statement, List.of("c1", "c2", "c3"));
    verifyDefaultResultRows(outputOrder);
    outputOrder.verify(outputEventStream).writeStatementEnd(queryExecutionType, queryStatistics, executionPlanDescription, notifications);
    outputOrder.verify(outputEventStream).writeTransactionInfo(TransactionNotificationState.COMMITTED, uriScheme.txCommitUri(1337L), -1);
    verifyNoMoreInteractions(outputEventStream);
}
Also used : InOrder(org.mockito.InOrder) InputEventStream(org.neo4j.server.http.cypher.format.api.InputEventStream) Statement(org.neo4j.server.http.cypher.format.api.Statement) MemoryPool(org.neo4j.memory.MemoryPool) Test(org.junit.jupiter.api.Test)

Example 15 with Statement

use of org.neo4j.server.http.cypher.format.api.Statement in project neo4j by neo4j.

the class InvocationTest method shouldFreeMemoryOnException.

@Test
void shouldFreeMemoryOnException() {
    var handle = getTransactionHandle(executionEngine, registry, false);
    var memoryPool = mock(MemoryPool.class);
    var inputEventStream = mock(InputEventStream.class);
    when(internalTransaction.execute("query", emptyMap())).thenReturn(executionResult);
    when(registry.begin(any(TransactionHandle.class))).thenReturn(1337L);
    when(inputEventStream.read()).thenReturn(new Statement("query", map()), NULL_STATEMENT);
    mockDefaultResult();
    doThrow(new ConnectionException("Something broke", new IOException("Oh no"))).when(outputEventStream).writeStatementEnd(any(), any(), any(), any());
    var invocation = new Invocation(mock(Log.class), handle, uriScheme.txCommitUri(1337L), memoryPool, inputEventStream, true);
    assertThrows(ConnectionException.class, () -> invocation.execute(outputEventStream));
    verify(memoryPool).reserveHeap(Statement.SHALLOW_SIZE);
    verify(memoryPool).releaseHeap(Statement.SHALLOW_SIZE);
    verifyNoMoreInteractions(memoryPool);
}
Also used : Log(org.neo4j.logging.Log) Statement(org.neo4j.server.http.cypher.format.api.Statement) IOException(java.io.IOException) ConnectionException(org.neo4j.server.http.cypher.format.api.ConnectionException) Test(org.junit.jupiter.api.Test)

Aggregations

Statement (org.neo4j.server.http.cypher.format.api.Statement)21 Test (org.junit.jupiter.api.Test)19 InputEventStream (org.neo4j.server.http.cypher.format.api.InputEventStream)18 MemoryPool (org.neo4j.memory.MemoryPool)17 InOrder (org.mockito.InOrder)16 ConnectionException (org.neo4j.server.http.cypher.format.api.ConnectionException)4 IOException (java.io.IOException)3 AuthorizationViolationException (org.neo4j.graphdb.security.AuthorizationViolationException)2 LoginContext (org.neo4j.internal.kernel.api.security.LoginContext)2 DeadlockDetectedException (org.neo4j.kernel.DeadlockDetectedException)2 Log (org.neo4j.logging.Log)2 HashMap (java.util.HashMap)1 TimeUnit (java.util.concurrent.TimeUnit)1 InvalidSemanticsException (org.neo4j.exceptions.InvalidSemanticsException)1 KernelException (org.neo4j.exceptions.KernelException)1 Neo4jException (org.neo4j.exceptions.Neo4jException)1 SyntaxException (org.neo4j.exceptions.SyntaxException)1 QueryExecutionType (org.neo4j.graphdb.QueryExecutionType)1 WriteOperationsNotAllowedException (org.neo4j.graphdb.WriteOperationsNotAllowedException)1 ClientConnectionInfo (org.neo4j.internal.kernel.api.connectioninfo.ClientConnectionInfo)1