Search in sources :

Example 6 with Lock

use of org.neo4j.lock.Lock in project neo4j by neo4j.

the class RecordStorageEngineTest method shouldCloseLockGroupAfterAppliers.

@Test
void shouldCloseLockGroupAfterAppliers() throws Exception {
    // given
    long nodeId = 5;
    LockService lockService = mock(LockService.class);
    Lock nodeLock = mock(Lock.class);
    when(lockService.acquireNodeLock(nodeId, EXCLUSIVE)).thenReturn(nodeLock);
    // <-- simply so that we can use InOrder mockito construct
    Consumer<Boolean> applierCloseCall = mock(Consumer.class);
    CapturingTransactionApplierFactoryChain applier = new CapturingTransactionApplierFactoryChain(applierCloseCall);
    RecordStorageEngine engine = recordStorageEngineBuilder().lockService(lockService).transactionApplierTransformer(applier::wrapAroundActualApplier).build();
    CommandsToApply commandsToApply = mock(CommandsToApply.class);
    when(commandsToApply.cursorContext()).thenReturn(NULL);
    when(commandsToApply.accept(any())).thenAnswer(invocationOnMock -> {
        // Visit one node command
        Visitor<StorageCommand, IOException> visitor = invocationOnMock.getArgument(0);
        NodeRecord after = new NodeRecord(nodeId);
        after.setInUse(true);
        visitor.visit(new Command.NodeCommand(new NodeRecord(nodeId), after));
        return null;
    });
    // when
    engine.apply(commandsToApply, TransactionApplicationMode.INTERNAL);
    // then
    InOrder inOrder = inOrder(lockService, applierCloseCall, nodeLock);
    inOrder.verify(lockService).acquireNodeLock(nodeId, EXCLUSIVE);
    inOrder.verify(applierCloseCall).accept(true);
    inOrder.verify(nodeLock).release();
    inOrder.verifyNoMoreInteractions();
}
Also used : InOrder(org.mockito.InOrder) LockService(org.neo4j.lock.LockService) StorageCommand(org.neo4j.storageengine.api.StorageCommand) IOException(java.io.IOException) Lock(org.neo4j.lock.Lock) CommandsToApply(org.neo4j.storageengine.api.CommandsToApply) NodeRecord(org.neo4j.kernel.impl.store.record.NodeRecord) StorageCommand(org.neo4j.storageengine.api.StorageCommand) Test(org.junit.jupiter.api.Test)

Aggregations

Lock (org.neo4j.lock.Lock)6 Test (org.junit.jupiter.api.Test)4 InOrder (org.mockito.InOrder)3 StoreScan (org.neo4j.kernel.impl.api.index.StoreScan)2 IOException (java.io.IOException)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 Transaction (org.neo4j.graphdb.Transaction)1 NodeRecord (org.neo4j.kernel.impl.store.record.NodeRecord)1 LockGroup (org.neo4j.lock.LockGroup)1 LockService (org.neo4j.lock.LockService)1 CommandsToApply (org.neo4j.storageengine.api.CommandsToApply)1 StorageCommand (org.neo4j.storageengine.api.StorageCommand)1 StoragePropertyCursor (org.neo4j.storageengine.api.StoragePropertyCursor)1