Search in sources :

Example 1 with AuthResponse

use of com.datastax.oss.protocol.internal.request.AuthResponse in project java-driver by datastax.

the class SegmentToFrameDecoderTest method should_decode_sequence_of_slices.

@Test
public void should_decode_sequence_of_slices() {
    ByteBuf encodedFrame = encodeFrame(new AuthResponse(Bytes.fromHexString("0x" + Strings.repeat("aa", 1011))));
    int sliceLength = 100;
    do {
        ByteBuf payload = encodedFrame.readRetainedSlice(Math.min(sliceLength, encodedFrame.readableBytes()));
        channel.writeInbound(new Segment<>(payload, false));
    } while (encodedFrame.isReadable());
    Frame frame = channel.readInbound();
    assertThat(frame.message).isInstanceOf(AuthResponse.class);
}
Also used : Frame(com.datastax.oss.protocol.internal.Frame) ByteBuf(io.netty.buffer.ByteBuf) AuthResponse(com.datastax.oss.protocol.internal.request.AuthResponse) Test(org.junit.Test)

Example 2 with AuthResponse

use of com.datastax.oss.protocol.internal.request.AuthResponse in project java-driver by datastax.

the class ProtocolInitHandlerTest method should_initialize_with_authentication.

@Test
public void should_initialize_with_authentication() {
    channel.pipeline().addLast(ChannelFactory.INIT_HANDLER_NAME, new ProtocolInitHandler(internalDriverContext, DefaultProtocolVersion.V4, null, END_POINT, DriverChannelOptions.DEFAULT, heartbeatHandler, false));
    String serverAuthenticator = "mockServerAuthenticator";
    AuthProvider authProvider = mock(AuthProvider.class);
    MockAuthenticator authenticator = new MockAuthenticator();
    when(authProvider.newAuthenticator(END_POINT, serverAuthenticator)).thenReturn(authenticator);
    when(internalDriverContext.getAuthProvider()).thenReturn(Optional.of(authProvider));
    ChannelFuture connectFuture = channel.connect(new InetSocketAddress("localhost", 9042));
    Frame requestFrame = readOutboundFrame();
    assertThat(requestFrame.message).isInstanceOf(Startup.class);
    assertThat(connectFuture).isNotDone();
    // Simulate a response that says that the server requires authentication
    writeInboundFrame(requestFrame, new Authenticate(serverAuthenticator));
    // The connection should have created an authenticator from the auth provider
    verify(authProvider).newAuthenticator(END_POINT, serverAuthenticator);
    // And sent an auth response
    requestFrame = readOutboundFrame();
    assertThat(requestFrame.message).isInstanceOf(AuthResponse.class);
    AuthResponse authResponse = (AuthResponse) requestFrame.message;
    assertThat(Bytes.toHexString(authResponse.token)).isEqualTo(MockAuthenticator.INITIAL_RESPONSE);
    assertThat(connectFuture).isNotDone();
    // As long as the server sends an auth challenge, the client should reply with another
    // auth_response
    String mockToken = "0xabcd";
    for (int i = 0; i < 5; i++) {
        writeInboundFrame(requestFrame, new AuthChallenge(Bytes.fromHexString(mockToken)));
        requestFrame = readOutboundFrame();
        assertThat(requestFrame.message).isInstanceOf(AuthResponse.class);
        authResponse = (AuthResponse) requestFrame.message;
        // Our mock impl happens to send back the same token
        assertThat(Bytes.toHexString(authResponse.token)).isEqualTo(mockToken);
        assertThat(connectFuture).isNotDone();
    }
    // When the server finally sends back a success message, should proceed to the cluster name
    // check and succeed
    writeInboundFrame(requestFrame, new AuthSuccess(Bytes.fromHexString(mockToken)));
    assertThat(authenticator.successToken).isEqualTo(mockToken);
    requestFrame = readOutboundFrame();
    writeInboundFrame(requestFrame, TestResponses.clusterNameResponse("someClusterName"));
    assertThat(connectFuture).isSuccess();
}
Also used : ChannelFuture(io.netty.channel.ChannelFuture) Frame(com.datastax.oss.protocol.internal.Frame) AuthChallenge(com.datastax.oss.protocol.internal.response.AuthChallenge) Authenticate(com.datastax.oss.protocol.internal.response.Authenticate) InetSocketAddress(java.net.InetSocketAddress) AuthSuccess(com.datastax.oss.protocol.internal.response.AuthSuccess) AuthProvider(com.datastax.oss.driver.api.core.auth.AuthProvider) EndPoint(com.datastax.oss.driver.api.core.metadata.EndPoint) AuthResponse(com.datastax.oss.protocol.internal.request.AuthResponse) Test(org.junit.Test)

Example 3 with AuthResponse

use of com.datastax.oss.protocol.internal.request.AuthResponse in project java-driver by datastax.

the class SegmentToFrameDecoderTest method should_decode_self_contained.

@Test
public void should_decode_self_contained() {
    ByteBuf payload = UnpooledByteBufAllocator.DEFAULT.buffer();
    payload.writeBytes(encodeFrame(Void.INSTANCE));
    payload.writeBytes(encodeFrame(new AuthResponse(Bytes.fromHexString("0xabcdef"))));
    channel.writeInbound(new Segment<>(payload, true));
    Frame frame1 = channel.readInbound();
    assertThat(frame1.message).isInstanceOf(Void.class);
    Frame frame2 = channel.readInbound();
    assertThat(frame2.message).isInstanceOf(AuthResponse.class);
}
Also used : Frame(com.datastax.oss.protocol.internal.Frame) ByteBuf(io.netty.buffer.ByteBuf) AuthResponse(com.datastax.oss.protocol.internal.request.AuthResponse) Test(org.junit.Test)

Aggregations

Frame (com.datastax.oss.protocol.internal.Frame)3 AuthResponse (com.datastax.oss.protocol.internal.request.AuthResponse)3 Test (org.junit.Test)3 ByteBuf (io.netty.buffer.ByteBuf)2 AuthProvider (com.datastax.oss.driver.api.core.auth.AuthProvider)1 EndPoint (com.datastax.oss.driver.api.core.metadata.EndPoint)1 AuthChallenge (com.datastax.oss.protocol.internal.response.AuthChallenge)1 AuthSuccess (com.datastax.oss.protocol.internal.response.AuthSuccess)1 Authenticate (com.datastax.oss.protocol.internal.response.Authenticate)1 ChannelFuture (io.netty.channel.ChannelFuture)1 InetSocketAddress (java.net.InetSocketAddress)1