Search in sources :

Example 11 with BoltProtocol

use of org.neo4j.bolt.BoltProtocol in project neo4j by neo4j.

the class ProtocolHandshakerTest method shouldRejectIfWrongPreamble.

@Test
void shouldRejectIfWrongPreamble() {
    // Given
    BoltProtocol protocol = newBoltProtocol(1, 0);
    BoltProtocolFactory handlerFactory = newProtocolFactory(1, 0, protocol);
    var memoryTracker = mock(MemoryTracker.class);
    EmbeddedChannel channel = new EmbeddedChannel(new ProtocolHandshaker(handlerFactory, boltChannel, logProvider, false, true, mock(ChannelProtector.class), memoryTracker));
    // When
    ByteBuf input = // create handshake data
    Unpooled.wrappedBuffer(// preamble
    new byte[] { (byte) 0xDE, (byte) 0xAB, (byte) 0xCD, (byte) 0xEF }, // first choice - no protocol
    new byte[] { 0, 0, 0, 1 }, // second choice - protocol 1
    new byte[] { 0, 0, 0, 2 }, // third choice - no protocol
    new byte[] { 0, 0, 0, 3 }, // fourth choice - no protocol
    new byte[] { 0, 0, 0, 4 });
    channel.writeInbound(input);
    // Then
    assertEquals(0, channel.outboundMessages().size());
    assertFalse(channel.isActive());
    verify(protocol, never()).install();
}
Also used : BoltProtocol(org.neo4j.bolt.BoltProtocol) EmbeddedChannel(io.netty.channel.embedded.EmbeddedChannel) ByteBuf(io.netty.buffer.ByteBuf) BoltProtocolFactory(org.neo4j.bolt.transport.BoltProtocolFactory) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 12 with BoltProtocol

use of org.neo4j.bolt.BoltProtocol in project neo4j by neo4j.

the class ProtocolHandshakerTest method shouldRejectIfHttp.

@Test
void shouldRejectIfHttp() {
    // Given
    BoltProtocol protocol = newBoltProtocol(1, 0);
    BoltProtocolFactory handlerFactory = newProtocolFactory(1, 0, protocol);
    var memoryTracker = mock(MemoryTracker.class);
    EmbeddedChannel channel = new EmbeddedChannel(new ProtocolHandshaker(handlerFactory, boltChannel, logProvider, false, true, mock(ChannelProtector.class), memoryTracker));
    // When
    FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, "http://hello_world:10000");
    request.headers().setInt(HttpHeaderNames.CONTENT_LENGTH, 0);
    channel.writeInbound(request);
    // Then
    assertEquals(0, channel.outboundMessages().size());
    assertFalse(channel.isActive());
    verify(protocol, never()).install();
    assertThat(logProvider).forClass(ProtocolHandshaker.class).forLevel(WARN).containsMessages("Unsupported connection type: 'HTTP'. Bolt protocol only operates over a TCP connection or WebSocket.");
}
Also used : DefaultFullHttpRequest(io.netty.handler.codec.http.DefaultFullHttpRequest) FullHttpRequest(io.netty.handler.codec.http.FullHttpRequest) BoltProtocol(org.neo4j.bolt.BoltProtocol) DefaultFullHttpRequest(io.netty.handler.codec.http.DefaultFullHttpRequest) EmbeddedChannel(io.netty.channel.embedded.EmbeddedChannel) BoltProtocolFactory(org.neo4j.bolt.transport.BoltProtocolFactory) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 13 with BoltProtocol

use of org.neo4j.bolt.BoltProtocol in project neo4j by neo4j.

the class ProtocolHandshakerTest method shouldHandleMaxVersionNumber.

@Test
void shouldHandleMaxVersionNumber() {
    int maxVersionNumber = 255;
    // Given
    BoltProtocol protocol = newBoltProtocol(maxVersionNumber, maxVersionNumber);
    BoltProtocolFactory handlerFactory = newProtocolFactory(maxVersionNumber, maxVersionNumber, protocol);
    var memoryTracker = mock(MemoryTracker.class, RETURNS_MOCKS);
    EmbeddedChannel channel = new EmbeddedChannel(new ProtocolHandshaker(handlerFactory, boltChannel, logProvider, false, true, mock(ChannelProtector.class), memoryTracker));
    // When
    ByteBuf input = // create handshake data
    Unpooled.wrappedBuffer(// preamble
    new byte[] { (byte) 0x60, (byte) 0x60, (byte) 0xB0, (byte) 0x17 }, // first choice - no protocol
    new byte[] { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF }, // second choice - protocol 1
    new byte[] { 0, 0, 0, 0 }, // third choice - no protocol
    new byte[] { 0, 0, 0, 0 }, // fourth choice - no protocol
    new byte[] { 0, 0, 0, 0 });
    channel.writeInbound(input);
    // Then
    assertEquals(1, channel.outboundMessages().size());
    assertByteBufEquals(Unpooled.buffer().writeInt(new BoltProtocolVersion(maxVersionNumber, maxVersionNumber).toInt()), channel.readOutbound());
    assertThrows(NoSuchElementException.class, () -> channel.pipeline().remove(ProtocolHandshaker.class));
    assertTrue(channel.isActive());
    verify(protocol).install();
}
Also used : BoltProtocol(org.neo4j.bolt.BoltProtocol) BoltProtocolVersion(org.neo4j.bolt.BoltProtocolVersion) EmbeddedChannel(io.netty.channel.embedded.EmbeddedChannel) ByteBuf(io.netty.buffer.ByteBuf) BoltProtocolFactory(org.neo4j.bolt.transport.BoltProtocolFactory) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 14 with BoltProtocol

use of org.neo4j.bolt.BoltProtocol in project neo4j by neo4j.

the class ProtocolHandshakerTest method shouldRejectIfInsecureWhenEncryptionRequired.

@Test
void shouldRejectIfInsecureWhenEncryptionRequired() {
    // Given
    BoltProtocol protocol = newBoltProtocol(1, 0);
    BoltProtocolFactory handlerFactory = newProtocolFactory(1, 0, protocol);
    var memoryTracker = mock(MemoryTracker.class);
    EmbeddedChannel channel = new EmbeddedChannel(new ProtocolHandshaker(handlerFactory, boltChannel, logProvider, true, false, mock(ChannelProtector.class), memoryTracker));
    // When
    ByteBuf input = // create handshake data
    Unpooled.wrappedBuffer(// preamble
    new byte[] { (byte) 0x60, (byte) 0x60, (byte) 0xB0, (byte) 0x17 }, // first choice - no protocol
    new byte[] { 0, 0, 0, 1 }, // second choice - protocol 1
    new byte[] { 0, 0, 0, 2 }, // third choice - no protocol
    new byte[] { 0, 0, 0, 3 }, // fourth choice - no protocol
    new byte[] { 0, 0, 0, 4 });
    channel.writeInbound(input);
    // Then
    assertEquals(0, channel.outboundMessages().size());
    assertFalse(channel.isActive());
    verify(protocol, never()).install();
}
Also used : BoltProtocol(org.neo4j.bolt.BoltProtocol) EmbeddedChannel(io.netty.channel.embedded.EmbeddedChannel) ByteBuf(io.netty.buffer.ByteBuf) BoltProtocolFactory(org.neo4j.bolt.transport.BoltProtocolFactory) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 15 with BoltProtocol

use of org.neo4j.bolt.BoltProtocol in project neo4j by neo4j.

the class DefaultBoltProtocolFactoryTest method shouldCreateNothingForUnknownProtocolVersion.

@Test
void shouldCreateNothingForUnknownProtocolVersion() {
    int protocolVersion = 42;
    BoltChannel channel = newTestBoltChannel();
    BoltProtocolFactory factory = new DefaultBoltProtocolFactory(mock(BoltConnectionFactory.class), mock(BoltStateMachineFactory.class), Config.defaults(), NullLogService.getInstance(), new TestDatabaseIdRepository(), CustomBookmarkFormatParser.DEFAULT, mock(TransportThrottleGroup.class), Clocks.fakeClock(), Duration.ZERO);
    BoltProtocol protocol = factory.create(new BoltProtocolVersion(protocolVersion, 0), channel, mock(ChannelProtector.class), mock(MemoryTracker.class));
    // handler is not created
    assertNull(protocol);
}
Also used : ChannelProtector(org.neo4j.bolt.transport.pipeline.ChannelProtector) BoltConnectionFactory(org.neo4j.bolt.runtime.BoltConnectionFactory) BoltProtocol(org.neo4j.bolt.BoltProtocol) BoltStateMachineFactory(org.neo4j.bolt.runtime.statemachine.BoltStateMachineFactory) BoltProtocolVersion(org.neo4j.bolt.BoltProtocolVersion) BoltChannel(org.neo4j.bolt.BoltChannel) BoltTestUtil.newTestBoltChannel(org.neo4j.bolt.testing.BoltTestUtil.newTestBoltChannel) TestDatabaseIdRepository(org.neo4j.kernel.database.TestDatabaseIdRepository) MemoryTracker(org.neo4j.memory.MemoryTracker) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

BoltProtocol (org.neo4j.bolt.BoltProtocol)15 EmbeddedChannel (io.netty.channel.embedded.EmbeddedChannel)12 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)12 Test (org.junit.jupiter.api.Test)10 BoltProtocolFactory (org.neo4j.bolt.transport.BoltProtocolFactory)10 ByteBuf (io.netty.buffer.ByteBuf)9 BoltProtocolVersion (org.neo4j.bolt.BoltProtocolVersion)5 BoltChannel (org.neo4j.bolt.BoltChannel)4 BoltTestUtil.newTestBoltChannel (org.neo4j.bolt.testing.BoltTestUtil.newTestBoltChannel)4 BoltConnectionFactory (org.neo4j.bolt.runtime.BoltConnectionFactory)3 BoltStateMachineFactory (org.neo4j.bolt.runtime.statemachine.BoltStateMachineFactory)3 ChannelProtector (org.neo4j.bolt.transport.pipeline.ChannelProtector)3 MethodSource (org.junit.jupiter.params.provider.MethodSource)2 BoltConnection (org.neo4j.bolt.runtime.BoltConnection)2 BoltStateMachine (org.neo4j.bolt.runtime.statemachine.BoltStateMachine)2 TestDatabaseIdRepository (org.neo4j.kernel.database.TestDatabaseIdRepository)2 DefaultFullHttpRequest (io.netty.handler.codec.http.DefaultFullHttpRequest)1 FullHttpRequest (io.netty.handler.codec.http.FullHttpRequest)1 CsvSource (org.junit.jupiter.params.provider.CsvSource)1 BoltResponseMessageWriter (org.neo4j.bolt.messaging.BoltResponseMessageWriter)1