Search in sources :

Example 1 with ProtocolChooser

use of org.neo4j.bolt.transport.ProtocolChooser in project neo4j by neo4j.

the class ProtocolChooserTest method shouldChooseFirstAvailableProtocol.

@Test
public void shouldChooseFirstAvailableProtocol() throws Throwable {
    // Given
    when(factory.apply(ch, true)).thenReturn(protocol);
    available.put(1L, factory);
    ProtocolChooser chooser = new ProtocolChooser(available, false, true);
    // When
    HandshakeOutcome outcome = chooser.handleVersionHandshakeChunk(wrappedBuffer(new byte[] { (byte) 0x60, (byte) 0x60, (byte) 0xB0, (byte) 0x17, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }), ch);
    // Then
    assertThat(outcome, equalTo(PROTOCOL_CHOSEN));
    assertThat(chooser.chosenProtocol(), equalTo(protocol));
}
Also used : ProtocolChooser(org.neo4j.bolt.transport.ProtocolChooser) HandshakeOutcome(org.neo4j.bolt.transport.HandshakeOutcome) Test(org.junit.Test)

Example 2 with ProtocolChooser

use of org.neo4j.bolt.transport.ProtocolChooser in project neo4j by neo4j.

the class ProtocolChooserTest method shouldRejectIfInsecureHandshake.

@Test
public void shouldRejectIfInsecureHandshake() throws Throwable {
    // Given
    when(factory.apply(ch, true)).thenReturn(protocol);
    available.put(1L, mock(BiFunction.class));
    ProtocolChooser chooser = new ProtocolChooser(available, true, false);
    // When
    HandshakeOutcome outcome = chooser.handleVersionHandshakeChunk(wrappedBuffer(new byte[] { (byte) 0x60, (byte) 0x60, (byte) 0xB0, (byte) 0x17, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }), ch);
    // Then
    assertThat(outcome, equalTo(INSECURE_HANDSHAKE));
    assertThat(chooser.chosenProtocol(), nullValue());
}
Also used : BiFunction(java.util.function.BiFunction) ProtocolChooser(org.neo4j.bolt.transport.ProtocolChooser) HandshakeOutcome(org.neo4j.bolt.transport.HandshakeOutcome) Test(org.junit.Test)

Example 3 with ProtocolChooser

use of org.neo4j.bolt.transport.ProtocolChooser in project neo4j by neo4j.

the class ProtocolChooserTest method shouldHandleFragmentedMessage.

@Test
public void shouldHandleFragmentedMessage() throws Throwable {
    // Given
    when(factory.apply(ch, true)).thenReturn(protocol);
    available.put(1L, factory);
    ProtocolChooser chooser = new ProtocolChooser(available, false, true);
    // When
    HandshakeOutcome firstOutcome = chooser.handleVersionHandshakeChunk(wrappedBuffer(new byte[] { (byte) 0x60, (byte) 0x60 }), ch);
    // When
    HandshakeOutcome secondOutcome = chooser.handleVersionHandshakeChunk(wrappedBuffer(new byte[] { (byte) 0xB0, (byte) 0x17 }), ch);
    HandshakeOutcome thirdOutcome = chooser.handleVersionHandshakeChunk(wrappedBuffer(new byte[] { 0, 0, 0, 0, 0, 0, 0 }), ch);
    HandshakeOutcome fourthOutcome = chooser.handleVersionHandshakeChunk(wrappedBuffer(new byte[] { 1, 0, 0, 0, 0, 0, 0, 0, 0 }), ch);
    // Then
    assertThat(firstOutcome, equalTo(PARTIAL_HANDSHAKE));
    assertThat(secondOutcome, equalTo(PARTIAL_HANDSHAKE));
    assertThat(thirdOutcome, equalTo(PARTIAL_HANDSHAKE));
    assertThat(fourthOutcome, equalTo(PROTOCOL_CHOSEN));
    assertThat(chooser.chosenProtocol(), equalTo(protocol));
}
Also used : ProtocolChooser(org.neo4j.bolt.transport.ProtocolChooser) HandshakeOutcome(org.neo4j.bolt.transport.HandshakeOutcome) Test(org.junit.Test)

Example 4 with ProtocolChooser

use of org.neo4j.bolt.transport.ProtocolChooser in project neo4j by neo4j.

the class ProtocolChooserTest method shouldRejectIfInvalidHandshake.

@Test
public void shouldRejectIfInvalidHandshake() throws Throwable {
    // Given
    when(factory.apply(ch, true)).thenReturn(protocol);
    available.put(1L, mock(BiFunction.class));
    ProtocolChooser chooser = new ProtocolChooser(available, false, true);
    // When
    HandshakeOutcome outcome = chooser.handleVersionHandshakeChunk(wrappedBuffer(new byte[] { (byte) 0xDE, (byte) 0xAD, (byte) 0xB0, (byte) 0x17, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }), ch);
    // Then
    assertThat(outcome, equalTo(INVALID_HANDSHAKE));
    assertThat(chooser.chosenProtocol(), nullValue());
}
Also used : BiFunction(java.util.function.BiFunction) ProtocolChooser(org.neo4j.bolt.transport.ProtocolChooser) HandshakeOutcome(org.neo4j.bolt.transport.HandshakeOutcome) Test(org.junit.Test)

Example 5 with ProtocolChooser

use of org.neo4j.bolt.transport.ProtocolChooser in project neo4j by neo4j.

the class SocketTransportHandlerTest method shouldInitializeProtocolOnFirstMessage.

@Test
public void shouldInitializeProtocolOnFirstMessage() throws Exception {
    BoltStateMachine machine = mock(BoltStateMachine.class);
    ProtocolChooser chooser = protocolChooser(machine);
    ChannelHandlerContext context = channelHandlerContextMock();
    SocketTransportHandler handler = new SocketTransportHandler(chooser, NullLogProvider.getInstance());
    handler.channelRead(context, handshake());
    BoltProtocol protocol1 = chooser.chosenProtocol();
    handler.channelRead(context, handshake());
    BoltProtocol protocol2 = chooser.chosenProtocol();
    assertSame(protocol1, protocol2);
}
Also used : BoltProtocol(org.neo4j.bolt.transport.BoltProtocol) BoltStateMachine(org.neo4j.bolt.v1.runtime.BoltStateMachine) SocketTransportHandler(org.neo4j.bolt.transport.SocketTransportHandler) ChannelHandlerContext(io.netty.channel.ChannelHandlerContext) ProtocolChooser(org.neo4j.bolt.transport.ProtocolChooser) Test(org.junit.Test)

Aggregations

ProtocolChooser (org.neo4j.bolt.transport.ProtocolChooser)9 Test (org.junit.Test)8 HandshakeOutcome (org.neo4j.bolt.transport.HandshakeOutcome)7 BiFunction (java.util.function.BiFunction)4 ByteBuf (io.netty.buffer.ByteBuf)1 ChannelHandlerContext (io.netty.channel.ChannelHandlerContext)1 HashMap (java.util.HashMap)1 BoltProtocol (org.neo4j.bolt.transport.BoltProtocol)1 SocketTransportHandler (org.neo4j.bolt.transport.SocketTransportHandler)1 BoltStateMachine (org.neo4j.bolt.v1.runtime.BoltStateMachine)1 SynchronousBoltWorker (org.neo4j.bolt.v1.runtime.SynchronousBoltWorker)1 BoltProtocolV1 (org.neo4j.bolt.v1.transport.BoltProtocolV1)1