use of org.neo4j.kernel.GraphDatabaseQueryService in project neo4j by neo4j.
the class ConcurrentTransactionAccessTest method shouldThrowSpecificExceptionOnConcurrentTransactionAccess.
@Test
public void shouldThrowSpecificExceptionOnConcurrentTransactionAccess() throws Exception {
// given
TransactionRegistry registry = new TransactionHandleRegistry(mock(Clock.class), 0, NullLogProvider.getInstance());
TransitionalPeriodTransactionMessContainer kernel = mock(TransitionalPeriodTransactionMessContainer.class);
GraphDatabaseQueryService queryService = mock(GraphDatabaseQueryService.class);
when(kernel.newTransaction(any(KernelTransaction.Type.class), any(SecurityContext.class), anyLong())).thenReturn(mock(TransitionalTxManagementKernelTransaction.class));
TransactionFacade actions = new TransactionFacade(kernel, null, queryService, registry, NullLogProvider.getInstance());
final TransactionHandle transactionHandle = actions.newTransactionHandle(new DisgustingUriScheme(), true, SecurityContext.AUTH_DISABLED, -1);
final DoubleLatch latch = new DoubleLatch();
final StatementDeserializer statements = mock(StatementDeserializer.class);
when(statements.hasNext()).thenAnswer(invocation -> {
latch.startAndWaitForAllToStartAndFinish();
return false;
});
new Thread(() -> {
// start and block until finish
transactionHandle.execute(statements, mock(ExecutionResultSerializer.class), mock(HttpServletRequest.class));
}).start();
latch.waitForAllToStart();
try {
// when
actions.findTransactionHandle(DisgustingUriScheme.parseTxId(transactionHandle.uri()));
fail("should have thrown exception");
} catch (InvalidConcurrentTransactionAccess neo4jError) {
// then we get here
} finally {
latch.finish();
}
}
use of org.neo4j.kernel.GraphDatabaseQueryService in project neo4j by neo4j.
the class TransactionHandleTest method shouldLogMessageIfCommitErrorOccurs.
@Test
public void shouldLogMessageIfCommitErrorOccurs() throws Exception {
// given
TransitionalPeriodTransactionMessContainer kernel = mockKernel();
TransitionalTxManagementKernelTransaction transactionContext = kernel.newTransaction(explicit, AUTH_DISABLED, -1);
doThrow(new NullPointerException()).when(transactionContext).commit();
LogProvider logProvider = mock(LogProvider.class);
Log log = mock(Log.class);
when(logProvider.getLog(TransactionHandle.class)).thenReturn(log);
TransactionRegistry registry = mock(TransactionRegistry.class);
QueryExecutionEngine engine = mock(QueryExecutionEngine.class);
Result executionResult = mock(Result.class);
TransactionalContext transactionalContext = prepareKernelWithQuerySession(kernel);
when(engine.executeQuery("query", map(), transactionalContext)).thenReturn(executionResult);
when(registry.begin(any(TransactionHandle.class))).thenReturn(1337L);
GraphDatabaseQueryService queryService = mock(GraphDatabaseQueryService.class);
TransactionHandle handle = new TransactionHandle(kernel, engine, queryService, registry, uriScheme, false, AUTH_DISABLED, anyLong(), logProvider);
ExecutionResultSerializer output = mock(ExecutionResultSerializer.class);
// when
Statement statement = new Statement("query", map(), false, (ResultDataContent[]) null);
handle.commit(statements(statement), output, mock(HttpServletRequest.class));
// then
verify(log).error(eq("Failed to commit transaction."), any(NullPointerException.class));
verify(registry).forget(1337L);
InOrder outputOrder = inOrder(output);
outputOrder.verify(output).statementResult(executionResult, false, (ResultDataContent[]) null);
outputOrder.verify(output).notifications(anyCollectionOf(Notification.class));
outputOrder.verify(output).errors(argThat(hasErrors(Status.Transaction.TransactionCommitFailed)));
outputOrder.verify(output).finish();
verifyNoMoreInteractions(output);
}
use of org.neo4j.kernel.GraphDatabaseQueryService in project neo4j by neo4j.
the class TransactionHandleTest method shouldLogMessageIfCypherSyntaxErrorOccurs.
@Test
public void shouldLogMessageIfCypherSyntaxErrorOccurs() throws Exception {
// given
TransitionalPeriodTransactionMessContainer kernel = mockKernel();
QueryExecutionEngine executionEngine = mock(QueryExecutionEngine.class);
TransactionalContext transactionalContext = prepareKernelWithQuerySession(kernel);
when(executionEngine.executeQuery("matsch (n) return n", map(), transactionalContext)).thenThrow(new QueryExecutionKernelException(new SyntaxException("did you mean MATCH?")));
TransactionRegistry registry = mock(TransactionRegistry.class);
when(registry.begin(any(TransactionHandle.class))).thenReturn(1337L);
GraphDatabaseQueryService queryService = mock(GraphDatabaseQueryService.class);
TransactionHandle handle = new TransactionHandle(kernel, executionEngine, queryService, registry, uriScheme, false, AUTH_DISABLED, anyLong(), NullLogProvider.getInstance());
ExecutionResultSerializer output = mock(ExecutionResultSerializer.class);
// when
Statement statement = new Statement("matsch (n) return n", map(), false, (ResultDataContent[]) null);
handle.commit(statements(statement), output, mock(HttpServletRequest.class));
// then
verify(registry).forget(1337L);
InOrder outputOrder = inOrder(output);
outputOrder.verify(output).errors(argThat(hasErrors(Status.Statement.SyntaxError)));
outputOrder.verify(output).finish();
verifyNoMoreInteractions(output);
}
use of org.neo4j.kernel.GraphDatabaseQueryService in project neo4j by neo4j.
the class TransactionHandleTest method startTransactionWithRequestedTimeout.
@Test
public void startTransactionWithRequestedTimeout() {
QueryExecutionEngine executionEngine = mock(QueryExecutionEngine.class);
GraphDatabaseQueryService queryService = mock(GraphDatabaseQueryService.class);
ExecutionResultSerializer output = mock(ExecutionResultSerializer.class);
TransitionalPeriodTransactionMessContainer txManagerFacade = mockKernel();
TransactionHandle handle = new TransactionHandle(txManagerFacade, executionEngine, queryService, mock(TransactionRegistry.class), uriScheme, true, AUTH_DISABLED, 100, NullLogProvider.getInstance());
handle.commit(statements(new Statement("query", map(), false, (ResultDataContent[]) null)), output, mock(HttpServletRequest.class));
verify(txManagerFacade).newTransaction(Type.implicit, AUTH_DISABLED, 100);
}
use of org.neo4j.kernel.GraphDatabaseQueryService in project neo4j by neo4j.
the class TransactionHandleTest method shouldHandleExecutionEngineThrowingUndeclaredCheckedExceptions.
@Test
public void shouldHandleExecutionEngineThrowingUndeclaredCheckedExceptions() throws Exception {
// given
QueryExecutionEngine executionEngine = mock(QueryExecutionEngine.class);
when(executionEngine.executeQuery(eq("match (n) return n"), eq(map()), any(TransactionalContext.class))).thenAnswer(invocationOnMock -> {
throw new Exception("BOO");
});
TransactionRegistry registry = mock(TransactionRegistry.class);
when(registry.begin(any(TransactionHandle.class))).thenReturn(1337L);
GraphDatabaseQueryService queryService = mock(GraphDatabaseQueryService.class);
TransactionHandle handle = new TransactionHandle(mockKernel(), executionEngine, queryService, registry, uriScheme, false, AUTH_DISABLED, anyLong(), NullLogProvider.getInstance());
ExecutionResultSerializer output = mock(ExecutionResultSerializer.class);
// when
Statement statement = new Statement("match (n) return n", map(), false, (ResultDataContent[]) null);
handle.commit(statements(statement), output, mock(HttpServletRequest.class));
// then
verify(registry).forget(1337L);
InOrder outputOrder = inOrder(output);
outputOrder.verify(output).errors(argThat(hasErrors(Status.Statement.ExecutionFailed)));
outputOrder.verify(output).finish();
verifyNoMoreInteractions(output);
}
Aggregations