mirror of https://github.com/apache/activemq.git
AMQ-6675 AMQP Test client can't accept bigger frames on WS
Need to configure the WS Handshaker in the test client's netty transport with the same value given to the proton connection via setMaxFrameSize so that incoming frames larger than the default 65535 over WS don't trigger netty to fail the connection.
This commit is contained in:
parent
4f7c9ec811
commit
88efa01e11
|
@ -132,6 +132,7 @@ public class AmqpConnection extends AmqpAbstractResource<Connection> implements
|
|||
this.serializer.setContinueExistingPeriodicTasksAfterShutdownPolicy(false);
|
||||
|
||||
this.transport.setTransportListener(this);
|
||||
this.transport.setMaxFrameSize(getMaxFrameSize());
|
||||
}
|
||||
|
||||
public void connect() throws Exception {
|
||||
|
|
|
@ -55,6 +55,7 @@ public class NettyTcpTransport implements NettyTransport {
|
|||
private static final Logger LOG = LoggerFactory.getLogger(NettyTcpTransport.class);
|
||||
|
||||
private static final int SHUTDOWN_TIMEOUT = 100;
|
||||
public static final int DEFAULT_MAX_FRAME_SIZE = 65535;
|
||||
|
||||
protected Bootstrap bootstrap;
|
||||
protected EventLoopGroup group;
|
||||
|
@ -62,6 +63,7 @@ public class NettyTcpTransport implements NettyTransport {
|
|||
protected NettyTransportListener listener;
|
||||
protected final NettyTransportOptions options;
|
||||
protected final URI remote;
|
||||
protected int maxFrameSize = DEFAULT_MAX_FRAME_SIZE;
|
||||
|
||||
private final AtomicBoolean connected = new AtomicBoolean();
|
||||
private final AtomicBoolean closed = new AtomicBoolean();
|
||||
|
@ -265,6 +267,20 @@ public class NettyTcpTransport implements NettyTransport {
|
|||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMaxFrameSize(int maxFrameSize) {
|
||||
if (connected.get()) {
|
||||
throw new IllegalStateException("Cannot change Max Frame Size while connected.");
|
||||
}
|
||||
|
||||
this.maxFrameSize = maxFrameSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxFrameSize() {
|
||||
return maxFrameSize;
|
||||
}
|
||||
|
||||
//----- Internal implementation details, can be overridden as needed -----//
|
||||
|
||||
protected String getRemoteHost() {
|
||||
|
|
|
@ -49,4 +49,8 @@ public interface NettyTransport {
|
|||
|
||||
Principal getLocalPrincipal();
|
||||
|
||||
void setMaxFrameSize(int maxFrameSize);
|
||||
|
||||
int getMaxFrameSize();
|
||||
|
||||
}
|
|
@ -114,7 +114,8 @@ public class NettyWSTransport extends NettyTcpTransport {
|
|||
|
||||
public NettyWebSocketTransportHandler() {
|
||||
handshaker = WebSocketClientHandshakerFactory.newHandshaker(
|
||||
getRemoteLocation(), WebSocketVersion.V13, AMQP_SUB_PROTOCOL, true, new DefaultHttpHeaders());
|
||||
getRemoteLocation(), WebSocketVersion.V13, AMQP_SUB_PROTOCOL,
|
||||
true, new DefaultHttpHeaders(), getMaxFrameSize());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -74,6 +74,11 @@ public class AmqpConnectionsTest extends AmqpClientTestSupport {
|
|||
super(connectorScheme, secure);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getAdditionalConfig() {
|
||||
return "&wireFormat.maxAmqpFrameSize=1048576";
|
||||
}
|
||||
|
||||
@Test(timeout = 60000)
|
||||
public void testCanConnect() throws Exception {
|
||||
AmqpClient client = createAmqpClient();
|
||||
|
|
Loading…
Reference in New Issue