use of org.neo4j.bolt.v4.messaging.RunMessage in project neo4j by neo4j.
the class BoltV42TransportIT method shouldReturnUpdatedBookmarkAfterExplicitTransaction.
@ParameterizedTest(name = "{0}")
@MethodSource("argumentsProvider")
public void shouldReturnUpdatedBookmarkAfterExplicitTransaction(Class<? extends TransportConnection> connectionClass) throws Exception {
init(connectionClass);
negotiateBoltV42();
// bookmark is expected to advance once the auto-commit transaction is committed
var lastClosedTransactionId = getLastClosedTransactionId();
var expectedBookmark = new BookmarkWithDatabaseId(lastClosedTransactionId + 1, getDatabaseId()).toString();
connection.send(util.chunk(new BeginMessage()));
assertThat(connection).satisfies(util.eventuallyReceives(msgSuccess()));
connection.send(util.chunk(new RunMessage("CREATE ()"), new PullMessage(asMapValue(map("n", -1L)))));
assertThat(connection).satisfies(util.eventuallyReceives(msgSuccess(), msgSuccess(message -> assertThat(message).doesNotContainEntry("bookmark", expectedBookmark))));
connection.send(util.chunk(CommitMessage.COMMIT_MESSAGE));
assertThat(connection).satisfies(util.eventuallyReceives(msgSuccess(message -> assertThat(message).containsEntry("bookmark", expectedBookmark))));
}
use of org.neo4j.bolt.v4.messaging.RunMessage in project neo4j by neo4j.
the class BoltV42TransportIT method shouldReturnUpdatedBookmarkAfterAutoCommitTransaction.
@ParameterizedTest(name = "{0}")
@MethodSource("argumentsProvider")
public void shouldReturnUpdatedBookmarkAfterAutoCommitTransaction(Class<? extends TransportConnection> connectionClass) throws Exception {
init(connectionClass);
negotiateBoltV42();
// bookmark is expected to advance once the auto-commit transaction is committed
var lastClosedTransactionId = getLastClosedTransactionId();
var expectedBookmark = new BookmarkWithDatabaseId(lastClosedTransactionId + 1, getDatabaseId()).toString();
connection.send(util.chunk(new RunMessage("CREATE ()"), new PullMessage(asMapValue(map("n", -1L)))));
assertThat(connection).satisfies(util.eventuallyReceives(msgSuccess(), msgSuccess(responseMessage -> assertThat(responseMessage).containsEntry("bookmark", expectedBookmark))));
}
use of org.neo4j.bolt.v4.messaging.RunMessage in project neo4j by neo4j.
the class BoltV4TransportIT method shouldReturnUpdatedBookmarkAfterExplicitTransaction.
@ParameterizedTest(name = "{0}")
@MethodSource("argumentsProvider")
public void shouldReturnUpdatedBookmarkAfterExplicitTransaction(Class<? extends TransportConnection> connectionClass) throws Exception {
init(connectionClass);
negotiateBoltV4();
// bookmark is expected to advance once the auto-commit transaction is committed
var lastClosedTransactionId = getLastClosedTransactionId();
var expectedBookmark = new BookmarkWithDatabaseId(lastClosedTransactionId + 1, getDatabaseId()).toString();
connection.send(util.chunk(new BeginMessage()));
assertThat(connection).satisfies(util.eventuallyReceives(msgSuccess()));
connection.send(util.chunk(new RunMessage("CREATE ()"), new PullMessage(asMapValue(map("n", -1L)))));
assertThat(connection).satisfies(util.eventuallyReceives(msgSuccess(), msgSuccess(message -> assertThat(message).doesNotContainEntry("bookmark", expectedBookmark))));
connection.send(util.chunk(CommitMessage.COMMIT_MESSAGE));
assertThat(connection).satisfies(util.eventuallyReceives(msgSuccess(message -> assertThat(message).containsEntry("bookmark", expectedBookmark))));
}
use of org.neo4j.bolt.v4.messaging.RunMessage in project neo4j by neo4j.
the class AutoCommitStateIT method shouldThrowExceptionOnIllegalMessagesInAutoCommitState.
private void shouldThrowExceptionOnIllegalMessagesInAutoCommitState(RequestMessage message) throws Throwable {
// Given
BoltStateMachineV4 machine = newStateMachine();
machine.process(newHelloMessage(), nullResponseHandler());
machine.process(new RunMessage("CREATE (n {k:'k'}) RETURN n.k", EMPTY_PARAMS), nullResponseHandler());
assertThat(machine.state()).isInstanceOf(AutoCommitState.class);
// when
BoltResponseRecorder recorder = new BoltResponseRecorder();
verifyKillsConnection(() -> machine.process(message, recorder));
// then
assertThat(recorder.nextResponse()).satisfies(failedWithStatus(Status.Request.Invalid));
assertNull(machine.state());
}
use of org.neo4j.bolt.v4.messaging.RunMessage in project neo4j by neo4j.
the class FragmentedMessageDeliveryTest method testPermutation.
private void testPermutation(byte[] unfragmented, ByteBuf[] fragments) throws Exception {
// Given
channel = new EmbeddedChannel();
BoltChannel boltChannel = newTestBoltChannel(channel);
BoltStateMachine machine = mock(BoltStateMachine.class);
SynchronousBoltConnection boltConnection = new SynchronousBoltConnection(machine);
NullLogService logging = NullLogService.getInstance();
var bookmarksParser = mock(BookmarksParser.class);
var memoryTracker = mock(MemoryTracker.class);
BoltProtocol boltProtocol = new BoltProtocolV4(boltChannel, (ch, s, messageWriter) -> boltConnection, (v, ch, hints, mem) -> machine, Config.defaults(), bookmarksParser, logging, mock(TransportThrottleGroup.class), mock(ChannelProtector.class), memoryTracker);
boltProtocol.install();
// When data arrives split up according to the current permutation
for (ByteBuf fragment : fragments) {
channel.writeInbound(fragment.readerIndex(0).retain());
}
// Then the session should've received the specified messages, and the protocol should be in a nice clean state
try {
RequestMessage run = new RunMessage("Mjölnir", EMPTY_MAP);
verify(machine).process(eq(run), any(BoltResponseHandler.class));
} catch (AssertionError e) {
throw new AssertionError("Failed to handle fragmented delivery.\n" + "Messages: " + Arrays.toString(messages) + "\n" + "Chunk size: " + chunkSize + "\n" + "Serialized data delivered in fragments: " + describeFragments(fragments) + "\n" + "Unfragmented data: " + HexPrinter.hex(unfragmented) + "\n", e);
}
}
Aggregations