Skip to content

Instantly share code, notes, and snippets.

@danbev
Last active December 19, 2015 09:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danbev/5932671 to your computer and use it in GitHub Desktop.
Save danbev/5932671 to your computer and use it in GitHub Desktop.
Netty testing scheduled jobs

Testing Netty handlers that start scheduled jobs.

I'm trying to write a test for a channel handler that starts a scheduled job. When invoking such a code path the follwing exception is thrown:

[main] INFO org.jboss.aerogear.simplepush.server.netty.ReaperHandler - Creating UserAgentReaper job : 2000
[main] ERROR io.netty.handler.codec.sockjs.transports.WebSocketSendHandler - Caught : 
java.lang.UnsupportedOperationException
  at io.netty.util.concurrent.AbstractEventExecutor.scheduleAtFixedRate(AbstractEventExecutor.java:127)
	at org.jboss.aerogear.simplepush.server.netty.ReaperHandler.userEventTriggered(ReaperHandler.java:51)
	at io.netty.channel.DefaultChannelHandlerContext.invokeUserEventTriggered(DefaultChannelHandlerContext.java:336)
	at io.netty.channel.DefaultChannelHandlerContext.fireUserEventTriggered(DefaultChannelHandlerContext.java:321)
	at io.netty.channel.ChannelInboundHandlerAdapter.userEventTriggered(ChannelInboundHandlerAdapter.java:109)
	at io.netty.channel.DefaultChannelHandlerContext.invokeUserEventTriggered(DefaultChannelHandlerContext.java:336)
	at io.netty.channel.DefaultChannelHandlerContext.fireUserEventTriggered(DefaultChannelHandlerContext.java:321)
	at io.netty.channel.DefaultChannelPipeline.fireUserEventTriggered(DefaultChannelPipeline.java:774)
	at org.jboss.aerogear.simplepush.server.netty.SimplePushSockJSService.onOpen(SimplePushSockJSService.java:63)

The test is using an EmbeddedChannel which has a EmbeddedEventLoop which extends AbstractEventExecutor. EmbeddedEventLoop does not override the scheduleAtFixedRate and the the scheduleAtFixedRate method in AbstractEventExcecutor simple throws java.lang.UnsupportedOperationException.

So how can I enable a job to be executed?
For testing it would be fine if it only executed once, at least for my current use case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment