package org.jooby.internal.netty;
import static org.easymock.EasyMock.expect;
import org.jooby.test.MockUnit;
import org.jooby.test.MockUnit.Block;
import org.junit.Test;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http.HttpRequest;
import io.netty.util.Attribute;
public class NettyRequestTest {
private Block channel = unit -> {
Channel channel = unit.mock(Channel.class);
unit.registerMock(Channel.class, channel);
ChannelHandlerContext ctx = unit.get(ChannelHandlerContext.class);
expect(ctx.channel()).andReturn(channel);
};
@SuppressWarnings("unchecked")
private Block newObject = unit -> {
Attribute<Boolean> attr = unit.mock(Attribute.class);
attr.set(false);
Channel channel = unit.get(Channel.class);
unit.get(ChannelHandlerContext.class);
expect(channel.attr(NettyRequest.ASYNC)).andReturn(attr);
HttpRequest req = unit.get(HttpRequest.class);
expect(req.uri()).andReturn("/");
};
@Test
public void newObject() throws Exception {
new MockUnit(ChannelHandlerContext.class, HttpRequest.class)
.expect(channel)
.expect(newObject)
.run(unit -> {
new NettyRequest(unit.get(ChannelHandlerContext.class), unit.get(HttpRequest.class),
"target", 60);
});
}
@Test(expected = UnsupportedOperationException.class)
public void unknownUpgrade() throws Exception {
new MockUnit(ChannelHandlerContext.class, HttpRequest.class)
.expect(channel)
.expect(newObject)
.run(unit -> {
new NettyRequest(unit.get(ChannelHandlerContext.class), unit.get(HttpRequest.class),
"target", 60)
.upgrade(Object.class);
});
}
}