Search in sources :

Example 1 with Frame

use of com.hazelcast.client.impl.protocol.ClientMessage.Frame in project hazelcast by hazelcast.

the class ClientMessageProtectionTest method testNegativeFrameLength.

@Test
public void testNegativeFrameLength() throws IOException {
    Config config = smallInstanceConfig();
    HazelcastInstance hz = factory.newHazelcastInstance(config);
    ClientMessage clientMessage = createAuthenticationMessage(hz, "");
    InetSocketAddress address = getNode(hz).getLocalMember().getSocketAddress(EndpointQualifier.CLIENT);
    try (Socket socket = new Socket(address.getAddress(), address.getPort())) {
        socket.setSoTimeout(5000);
        try (OutputStream os = socket.getOutputStream();
            InputStream is = socket.getInputStream()) {
            os.write(CLIENT_BINARY.getBytes(StandardCharsets.UTF_8));
            ByteBuffer buffer = ByteBuffer.allocateDirect(1024 * 1024);
            buffer.order(ByteOrder.LITTLE_ENDIAN);
            // it should be enough to write just the first frame
            Frame frame = clientMessage.getStartFrame();
            buffer.putInt(Integer.MIN_VALUE);
            buffer.putShort((short) (frame.flags));
            buffer.put(frame.content);
            os.write(byteBufferToBytes(buffer));
            os.flush();
            expected.expect(connectionClosedException());
            readResponse(is);
        }
    }
}
Also used : Frame(com.hazelcast.client.impl.protocol.ClientMessage.Frame) HazelcastInstance(com.hazelcast.core.HazelcastInstance) HazelcastTestSupport.smallInstanceConfig(com.hazelcast.test.HazelcastTestSupport.smallInstanceConfig) Config(com.hazelcast.config.Config) InetSocketAddress(java.net.InetSocketAddress) InputStream(java.io.InputStream) OutputStream(java.io.OutputStream) ClientMessage(com.hazelcast.client.impl.protocol.ClientMessage) ByteBuffer(java.nio.ByteBuffer) Socket(java.net.Socket) QuickTest(com.hazelcast.test.annotation.QuickTest) Test(org.junit.Test)

Example 2 with Frame

use of com.hazelcast.client.impl.protocol.ClientMessage.Frame in project hazelcast by hazelcast.

the class ClientMessageProtectionTest method testAccumulatedMessageSizeOverflow.

@Test
public void testAccumulatedMessageSizeOverflow() throws IOException {
    Config config = smallInstanceConfig();
    HazelcastInstance hz = factory.newHazelcastInstance(config);
    ClientMessage clientMessage = createAuthenticationMessage(hz, "");
    InetSocketAddress address = getNode(hz).getLocalMember().getSocketAddress(EndpointQualifier.CLIENT);
    try (Socket socket = new Socket(address.getAddress(), address.getPort())) {
        try (OutputStream os = socket.getOutputStream();
            InputStream is = socket.getInputStream()) {
            os.write(CLIENT_BINARY.getBytes(StandardCharsets.UTF_8));
            // it should be enough to write just the first frame
            byte[] firstFrameBytes = frameAsBytes(clientMessage.getStartFrame(), false);
            os.write(firstFrameBytes);
            ByteBuffer buffer = ByteBuffer.allocateDirect(SIZE_OF_FRAME_LENGTH_AND_FLAGS);
            buffer.order(ByteOrder.LITTLE_ENDIAN);
            // try to cause the size accumulator overflow
            buffer.putInt(Integer.MAX_VALUE - firstFrameBytes.length + 1);
            ClientMessage.ForwardFrameIterator iterator = clientMessage.frameIterator();
            // skip start frame
            iterator.next();
            Frame frame = iterator.next();
            buffer.putShort((short) frame.flags);
            os.write(byteBufferToBytes(buffer));
            os.flush();
            expected.expect(connectionClosedException());
            readResponse(is);
        }
    }
}
Also used : Frame(com.hazelcast.client.impl.protocol.ClientMessage.Frame) HazelcastInstance(com.hazelcast.core.HazelcastInstance) HazelcastTestSupport.smallInstanceConfig(com.hazelcast.test.HazelcastTestSupport.smallInstanceConfig) Config(com.hazelcast.config.Config) InetSocketAddress(java.net.InetSocketAddress) InputStream(java.io.InputStream) OutputStream(java.io.OutputStream) ClientMessage(com.hazelcast.client.impl.protocol.ClientMessage) ByteBuffer(java.nio.ByteBuffer) Socket(java.net.Socket) QuickTest(com.hazelcast.test.annotation.QuickTest) Test(org.junit.Test)

Example 3 with Frame

use of com.hazelcast.client.impl.protocol.ClientMessage.Frame in project hazelcast by hazelcast.

the class ClientMessageEncoderDecoderTest method test.

@Test
public void test() {
    ClientMessage message = ClientMessage.createForEncode();
    message.add(new Frame(new byte[100], UNFRAGMENTED_MESSAGE | IS_FINAL_FLAG));
    message.setMessageType(MapPutCodec.REQUEST_MESSAGE_TYPE);
    AtomicReference<ClientMessage> reference = new AtomicReference<>(message);
    ClientMessageEncoder encoder = new ClientMessageEncoder();
    encoder.src(() -> reference.getAndSet(null));
    ByteBuffer buffer = ByteBuffer.allocate(1000);
    upcast(buffer).flip();
    encoder.dst(buffer);
    HandlerStatus result = encoder.onWrite();
    assertEquals(CLEAN, result);
    AtomicReference<ClientMessage> resultingMessage = new AtomicReference<>();
    ClientMessageDecoder decoder = new ClientMessageDecoder(null, resultingMessage::set, null);
    decoder.setNormalPacketsRead(SwCounter.newSwCounter());
    upcast(buffer).position(buffer.limit());
    decoder.src(buffer);
    decoder.onRead();
    assertEquals(message.getMessageType(), resultingMessage.get().getMessageType());
    assertEquals(message.getFrameLength(), resultingMessage.get().getFrameLength());
    assertEquals(message.getHeaderFlags(), resultingMessage.get().getHeaderFlags());
    assertEquals(message.getPartitionId(), resultingMessage.get().getPartitionId());
}
Also used : HandlerStatus(com.hazelcast.internal.networking.HandlerStatus) Frame(com.hazelcast.client.impl.protocol.ClientMessage.Frame) AtomicReference(java.util.concurrent.atomic.AtomicReference) ClientMessage(com.hazelcast.client.impl.protocol.ClientMessage) ByteBuffer(java.nio.ByteBuffer) ParallelJVMTest(com.hazelcast.test.annotation.ParallelJVMTest) QuickTest(com.hazelcast.test.annotation.QuickTest) Test(org.junit.Test)

Example 4 with Frame

use of com.hazelcast.client.impl.protocol.ClientMessage.Frame in project hazelcast by hazelcast.

the class ClientMessageEncoderDecoderTest method createMessage.

private ClientMessage createMessage(int frameLength, int frameCount) {
    ClientMessage message = ClientMessage.createForEncode();
    Random random = new Random();
    for (int i = 0; i < frameCount; i++) {
        byte[] content = new byte[frameLength];
        random.nextBytes(content);
        message.add(new Frame(content));
    }
    return message;
}
Also used : Frame(com.hazelcast.client.impl.protocol.ClientMessage.Frame) Random(java.util.Random) ClientMessage(com.hazelcast.client.impl.protocol.ClientMessage)

Example 5 with Frame

use of com.hazelcast.client.impl.protocol.ClientMessage.Frame in project hazelcast by hazelcast.

the class ClientMessageProtectionTest method writeClientMessage.

private void writeClientMessage(OutputStream os, final ClientMessage clientMessage) throws IOException {
    for (ClientMessage.ForwardFrameIterator it = clientMessage.frameIterator(); it.hasNext(); ) {
        ClientMessage.Frame frame = it.next();
        os.write(frameAsBytes(frame, !it.hasNext()));
    }
    os.flush();
}
Also used : ClientMessage(com.hazelcast.client.impl.protocol.ClientMessage) Frame(com.hazelcast.client.impl.protocol.ClientMessage.Frame)

Aggregations

ClientMessage (com.hazelcast.client.impl.protocol.ClientMessage)5 Frame (com.hazelcast.client.impl.protocol.ClientMessage.Frame)5 QuickTest (com.hazelcast.test.annotation.QuickTest)3 ByteBuffer (java.nio.ByteBuffer)3 Test (org.junit.Test)3 Config (com.hazelcast.config.Config)2 HazelcastInstance (com.hazelcast.core.HazelcastInstance)2 HazelcastTestSupport.smallInstanceConfig (com.hazelcast.test.HazelcastTestSupport.smallInstanceConfig)2 InputStream (java.io.InputStream)2 OutputStream (java.io.OutputStream)2 InetSocketAddress (java.net.InetSocketAddress)2 Socket (java.net.Socket)2 HandlerStatus (com.hazelcast.internal.networking.HandlerStatus)1 ParallelJVMTest (com.hazelcast.test.annotation.ParallelJVMTest)1 Random (java.util.Random)1 AtomicReference (java.util.concurrent.atomic.AtomicReference)1