TrafficShapingHandlerTest Class — netty Architecture
Architecture documentation for the TrafficShapingHandlerTest class in TrafficShapingHandlerTest.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD c45ec8a8_dcb0_3e95_e745_052e848d3a77["TrafficShapingHandlerTest"] 404db140_5064_9959_d354_23c65d38839d["TrafficShapingHandlerTest.java"] c45ec8a8_dcb0_3e95_e745_052e848d3a77 -->|defined in| 404db140_5064_9959_d354_23c65d38839d 56cb18e0_debd_b20f_9b4b_15f1205ad4f5["destroy()"] c45ec8a8_dcb0_3e95_e745_052e848d3a77 -->|method| 56cb18e0_debd_b20f_9b4b_15f1205ad4f5 e30f0ba2_3cba_572e_09b3_b8686ac15980["testHandlerRemove()"] c45ec8a8_dcb0_3e95_e745_052e848d3a77 -->|method| e30f0ba2_3cba_572e_09b3_b8686ac15980 58b2820f_d42c_a4a5_0439_632b8c4c73e8["testHandlerRemove0()"] c45ec8a8_dcb0_3e95_e745_052e848d3a77 -->|method| 58b2820f_d42c_a4a5_0439_632b8c4c73e8
Relationship Graph
Source Code
handler/src/test/java/io/netty/handler/traffic/TrafficShapingHandlerTest.java lines 43–127
public class TrafficShapingHandlerTest {
private static final long READ_LIMIT_BYTES_PER_SECOND = 1;
private static final ScheduledExecutorService SES = Executors.newSingleThreadScheduledExecutor();
private static final EventLoopGroup GROUP = new MultiThreadIoEventLoopGroup(1, LocalIoHandler.newFactory());
@AfterAll
public static void destroy() {
GROUP.shutdownGracefully();
SES.shutdown();
}
@Test
public void testHandlerRemove() throws Exception {
testHandlerRemove0(new ChannelTrafficShapingHandler(0, READ_LIMIT_BYTES_PER_SECOND));
GlobalTrafficShapingHandler trafficHandler1 =
new GlobalTrafficShapingHandler(SES, 0, READ_LIMIT_BYTES_PER_SECOND);
try {
testHandlerRemove0(trafficHandler1);
} finally {
trafficHandler1.release();
}
GlobalChannelTrafficShapingHandler trafficHandler2 =
new GlobalChannelTrafficShapingHandler(SES, 0,
READ_LIMIT_BYTES_PER_SECOND, 0, READ_LIMIT_BYTES_PER_SECOND);
try {
testHandlerRemove0(trafficHandler2);
} finally {
trafficHandler2.release();
}
}
private void testHandlerRemove0(final AbstractTrafficShapingHandler trafficHandler)
throws Exception {
Channel svrChannel = null;
Channel ch = null;
try {
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.channel(LocalServerChannel.class).group(GROUP)
.childHandler(new ChannelInitializer<Channel>() {
@Override
protected void initChannel(Channel ch) throws Exception {
ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ctx.writeAndFlush(msg);
}
});
}
});
final LocalAddress svrAddr = new LocalAddress("foo");
svrChannel = serverBootstrap.bind(svrAddr).sync().channel();
Bootstrap bootstrap = new Bootstrap();
bootstrap.channel(LocalChannel.class).group(GROUP).handler(new ChannelInitializer<Channel>() {
@Override
protected void initChannel(Channel ch) throws Exception {
ch.pipeline().addLast("traffic-shaping", trafficHandler);
}
});
ch = bootstrap.connect(svrAddr).sync().channel();
Attribute<Runnable> attr = ch.attr(AbstractTrafficShapingHandler.REOPEN_TASK);
assertNull(attr.get());
ch.writeAndFlush(Unpooled.wrappedBuffer("foo".getBytes(CharsetUtil.UTF_8)));
ch.writeAndFlush(Unpooled.wrappedBuffer("bar".getBytes(CharsetUtil.UTF_8))).await();
assertNotNull(attr.get());
final Channel clientChannel = ch;
ch.eventLoop().submit(new Runnable() {
@Override
public void run() {
clientChannel.pipeline().remove("traffic-shaping");
}
}).await();
//the attribute--reopen task must be released.
assertNull(attr.get());
} finally {
if (ch != null) {
ch.close().sync();
}
if (svrChannel != null) {
svrChannel.close().sync();
}
Source
Frequently Asked Questions
What is the TrafficShapingHandlerTest class?
TrafficShapingHandlerTest is a class in the netty codebase, defined in handler/src/test/java/io/netty/handler/traffic/TrafficShapingHandlerTest.java.
Where is TrafficShapingHandlerTest defined?
TrafficShapingHandlerTest is defined in handler/src/test/java/io/netty/handler/traffic/TrafficShapingHandlerTest.java at line 43.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free