Skip to content

Commit

Permalink
THRIFT-5696: Allow custom TConfiguration for TByteBuffer.java
Browse files Browse the repository at this point in the history
  • Loading branch information
rizaon authored and fishy committed Apr 6, 2023
1 parent 12ab079 commit cb60265
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 3 deletions.
Expand Up @@ -10,17 +10,29 @@ public final class TByteBuffer extends TEndpointTransport {
private final ByteBuffer byteBuffer;

/**
* Creates a new TByteBuffer wrapping a given NIO ByteBuffer.
* Creates a new TByteBuffer wrapping a given NIO ByteBuffer and custom TConfiguration.
*
* @param configuration the custom TConfiguration.
* @param byteBuffer the NIO ByteBuffer to wrap.
* @throws TTransportException on error.
*/
public TByteBuffer(ByteBuffer byteBuffer) throws TTransportException {
super(new TConfiguration());
public TByteBuffer(TConfiguration configuration, ByteBuffer byteBuffer)
throws TTransportException {
super(configuration);
this.byteBuffer = byteBuffer;
updateKnownMessageSize(byteBuffer.capacity());
}

/**
* Creates a new TByteBuffer wrapping a given NIO ByteBuffer.
*
* @param byteBuffer the NIO ByteBuffer to wrap.
* @throws TTransportException on error.
*/
public TByteBuffer(ByteBuffer byteBuffer) throws TTransportException {
this(new TConfiguration(), byteBuffer);
}

@Override
public boolean isOpen() {
return true;
Expand Down
@@ -1,10 +1,12 @@
package org.apache.thrift.transport;

import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import org.apache.thrift.TConfiguration;
import org.junit.jupiter.api.Test;

public class TestTByteBuffer {
Expand Down Expand Up @@ -39,4 +41,29 @@ public void testOverflow() throws Exception {
() -> byteBuffer.write("Hello World".getBytes(StandardCharsets.UTF_8)));
assertEquals("Not enough room in output buffer", e.getMessage());
}

@Test
public void testSmallTConfiguration() throws Exception {
// Test that TByteBuffer init fail with small max message size.
final TConfiguration configSmall =
new TConfiguration(
4, TConfiguration.DEFAULT_MAX_FRAME_SIZE, TConfiguration.DEFAULT_RECURSION_DEPTH);
TTransportException e =
assertThrows(
TTransportException.class,
() -> new TByteBuffer(configSmall, ByteBuffer.allocate(100)));
assertEquals("MaxMessageSize reached", e.getMessage());
}

@Test
public void testLargeTConfiguration() throws Exception {
// Test that TByteBuffer init pass with large max message size beyond
// TConfiguration.DEFAULT_MAX_MESSAGE_SIZE.
int maxSize = 101 * 1024 * 1024;
int bufferSize = (100 * 1024 + 512) * 1024;
final TConfiguration configLarge =
new TConfiguration(
maxSize, TConfiguration.DEFAULT_MAX_FRAME_SIZE, TConfiguration.DEFAULT_RECURSION_DEPTH);
assertDoesNotThrow(() -> new TByteBuffer(configLarge, ByteBuffer.allocate(bufferSize)));
}
}

0 comments on commit cb60265

Please sign in to comment.