use of org.neo4j.bolt.runtime.statemachine.BoltStateMachine in project neo4j by neo4j.
the class AbstractBoltProtocol method install.
/**
* Install chunker, packstream, message reader, message handler, message encoder for protocol v1
*/
@Override
public void install() {
BoltStateMachine stateMachine = stateMachineFactory.newStateMachine(version(), channel, connectionHints, memoryTracker);
var neo4jPack = createPack(memoryTracker);
var messageWriter = createMessageWriter(neo4jPack, logging, memoryTracker);
var connection = connectionFactory.newConnection(channel, stateMachine, messageWriter);
var messageReader = createMessageReader(connection, messageWriter, bookmarksParser, logging, channelProtector, memoryTracker);
memoryTracker.allocateHeap(ChunkDecoder.SHALLOW_SIZE + MessageAccumulator.SHALLOW_SIZE + MessageDecoder.SHALLOW_SIZE + HouseKeeper.SHALLOW_SIZE);
channel.installBoltProtocol(new ChunkDecoder(), new MessageAccumulator(config), new MessageDecoder(neo4jPack, messageReader, logging), new HouseKeeper(connection, logging.getInternalLog(HouseKeeper.class)));
}
use of org.neo4j.bolt.runtime.statemachine.BoltStateMachine in project neo4j by neo4j.
the class SessionExtension method newMachine.
public BoltStateMachine newMachine(BoltProtocolVersion version, BoltChannel boltChannel, MemoryTracker memoryTracker) {
assertTestStarted();
BoltStateMachine machine = boltFactory.newStateMachine(version, boltChannel, MapValue.EMPTY, memoryTracker);
runningMachines.add(machine);
return machine;
}
use of org.neo4j.bolt.runtime.statemachine.BoltStateMachine in project neo4j by neo4j.
the class BoltConnectionAuthIT method shouldGiveKernelVersionOnInit.
@Test
void shouldGiveKernelVersionOnInit() throws Throwable {
// Given it is important for client applications to programmatically
// identify expired credentials as the cause of not being authenticated
BoltStateMachine machine = newStateMachine();
BoltResponseRecorder recorder = new BoltResponseRecorder();
String version = "Neo4j/" + Version.getNeo4jVersion();
// When
var hello = BoltV4Messages.hello(newBasicAuthToken("neo4j", "neo4j"));
machine.process(hello, recorder);
machine.process(BoltV4Messages.run("CREATE ()"), recorder);
// Then
assertThat(recorder.nextResponse()).satisfies(succeededWithMetadata("server", stringValue(version)));
}
use of org.neo4j.bolt.runtime.statemachine.BoltStateMachine in project neo4j by neo4j.
the class BoltConnectionAuthIT method shouldCloseConnectionAfterAuthenticationFailure.
@Test
void shouldCloseConnectionAfterAuthenticationFailure() throws Throwable {
// Given
BoltStateMachine machine = newStateMachine();
BoltResponseRecorder recorder = new BoltResponseRecorder();
// When... then
var hello = BoltV4Messages.hello(newBasicAuthToken("neo4j", "j4oen"));
verifyKillsConnection(() -> machine.process(hello, recorder));
// ...and
assertThat(recorder.nextResponse()).satisfies(failedWithStatus(Status.Security.Unauthorized));
}
use of org.neo4j.bolt.runtime.statemachine.BoltStateMachine 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