use of org.neo4j.kernel.ha.com.master.MasterImpl.SPI in project neo4j by neo4j.
the class MasterImplTest method givenStartedAndAccessibleWhenNewLockSessionThenSucceeds.
@Test
public void givenStartedAndAccessibleWhenNewLockSessionThenSucceeds() throws Throwable {
// Given
MasterImpl.SPI spi = mockedSpi();
Config config = config();
when(spi.isAccessible()).thenReturn(true);
when(spi.getTransactionChecksum(anyLong())).thenReturn(1L);
MasterImpl instance = new MasterImpl(spi, mock(ConversationManager.class), mock(MasterImpl.Monitor.class), config);
instance.start();
HandshakeResult handshake = instance.handshake(1, newStoreIdForCurrentVersion()).response();
// When
try {
instance.newLockSession(new RequestContext(handshake.epoch(), 1, 2, 0, 0));
} catch (Exception e) {
fail(e.getMessage());
}
}
use of org.neo4j.kernel.ha.com.master.MasterImpl.SPI in project neo4j by neo4j.
the class MasterImplTest method mockedSpi.
public static SPI mockedSpi(final StoreId storeId) {
MasterImpl.SPI mock = mock(MasterImpl.SPI.class);
when(mock.storeId()).thenReturn(storeId);
when(mock.packEmptyResponse(any())).thenAnswer(invocation -> new TransactionObligationResponse<>(invocation.getArguments()[0], storeId, TransactionIdStore.BASE_TX_ID, ResourceReleaser.NO_OP));
return mock;
}
use of org.neo4j.kernel.ha.com.master.MasterImpl.SPI in project neo4j by neo4j.
the class MasterImplTest method shouldNotAllowCommitIfThereIsNoMatchingLockSession.
@Test
public void shouldNotAllowCommitIfThereIsNoMatchingLockSession() throws Throwable {
// Given
MasterImpl.SPI spi = mock(MasterImpl.SPI.class);
DefaultConversationSPI conversationSpi = mockedConversationSpi();
Config config = config();
ConversationManager conversationManager = new ConversationManager(conversationSpi, config);
when(spi.isAccessible()).thenReturn(true);
when(spi.getTransactionChecksum(anyLong())).thenReturn(1L);
mockEmptyResponse(spi);
MasterImpl master = new MasterImpl(spi, conversationManager, mock(MasterImpl.Monitor.class), config);
master.start();
HandshakeResult handshake = master.handshake(1, newStoreIdForCurrentVersion()).response();
RequestContext ctx = new RequestContext(handshake.epoch(), 1, 2, 0, 0);
// When
try {
master.commit(ctx, mock(TransactionRepresentation.class));
fail("Should have failed.");
} catch (TransactionNotPresentOnMasterException e) {
// Then
assertThat(e.getMessage(), equalTo(new TransactionNotPresentOnMasterException(ctx).getMessage()));
}
}
use of org.neo4j.kernel.ha.com.master.MasterImpl.SPI in project neo4j by neo4j.
the class MasterImplTest method shouldAllowStartNewTransactionAfterClientSessionWasRemovedOnTimeout.
@Test
public void shouldAllowStartNewTransactionAfterClientSessionWasRemovedOnTimeout() throws Throwable {
//Given
MasterImpl.SPI spi = mockedSpi();
DefaultConversationSPI conversationSpi = mockedConversationSpi();
Monitor monitor = mock(Monitor.class);
Config config = config();
Client client = mock(Client.class);
ConversationManager conversationManager = new ConversationManager(conversationSpi, config);
int machineId = 1;
MasterImpl master = new MasterImpl(spi, conversationManager, monitor, config);
when(spi.isAccessible()).thenReturn(true);
when(conversationSpi.acquireClient()).thenReturn(client);
master.start();
HandshakeResult handshake = master.handshake(1, newStoreIdForCurrentVersion()).response();
RequestContext requestContext = new RequestContext(handshake.epoch(), machineId, 0, 0, 0);
// When
master.newLockSession(requestContext);
master.acquireSharedLock(requestContext, ResourceTypes.NODE, 1L);
conversationManager.stop(requestContext);
master.newLockSession(requestContext);
//Then
Map<Integer, Collection<RequestContext>> transactions = master.getOngoingTransactions();
assertEquals(1, transactions.size());
assertThat(transactions.get(machineId), org.hamcrest.Matchers.hasItem(requestContext));
}
use of org.neo4j.kernel.ha.com.master.MasterImpl.SPI in project neo4j by neo4j.
the class MasterImplTest method shouldStartStopConversationManager.
@Test
public void shouldStartStopConversationManager() throws Throwable {
MasterImpl.SPI spi = mockedSpi();
ConversationManager conversationManager = mock(ConversationManager.class);
Config config = config();
MasterImpl master = new MasterImpl(spi, conversationManager, null, config);
master.start();
master.stop();
InOrder order = inOrder(conversationManager);
order.verify(conversationManager).start();
order.verify(conversationManager).stop();
verifyNoMoreInteractions(conversationManager);
}
Aggregations