package com.webpieces.http2parser; import java.util.List; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.webpieces.data.api.BufferCreationPool; import org.webpieces.data.api.DataWrapper; import com.webpieces.http2parser.api.Http2Memento; import com.webpieces.http2parser.api.Http2Parser; import com.webpieces.http2parser.api.Http2ParserFactory; import com.webpieces.http2parser.api.dto.PriorityFrame; import com.webpieces.http2parser.api.dto.lib.Http2Frame; import com.webpieces.http2parser.api.dto.lib.PriorityDetails; public class TestHttp2Priority { private static Http2Parser parser = Http2ParserFactory.createParser(new BufferCreationPool()); static private String priorityFrame() { String priorityFrame = "00 00 05" + //length "02" + //type "00" + //flags "00 00 00 01" + // R + streamid "80 00 00 04" + // stream dependency "05"; // weight return priorityFrame.replaceAll("\\s+",""); } static private String priorityFrameMSB() { String priorityMSB = "00 00 05" + //length "02" + //type "00" + //flags "00 00 00 01" + // R + streamid "80 00 00 04" + // stream dependency "FF"; // weight return priorityMSB.replaceAll("\\s+",""); } private Http2Memento memento; @Before public void setUp() { memento = parser.prepareToParse(Long.MAX_VALUE); } @Test public void testParsePriorityFrame() { DataWrapper data = Util.hexToBytes(priorityFrame()); parser.parse(memento, data); PriorityFrame frame = (PriorityFrame) assertGood(); Assert.assertEquals(1, frame.getStreamId()); PriorityDetails details = frame.getPriorityDetails(); Assert.assertTrue(details.isStreamDependencyIsExclusive()); Assert.assertEquals(5, details.getWeight()); Assert.assertEquals(4, details.getStreamDependency()); } @Test public void testParsePriorityFrameMSB() { DataWrapper data = Util.hexToBytes(priorityFrameMSB()); parser.parse(memento, data); PriorityFrame frame = (PriorityFrame) assertGood(); Assert.assertEquals(1, frame.getStreamId()); PriorityDetails details = frame.getPriorityDetails(); Assert.assertTrue(details.isStreamDependencyIsExclusive()); Assert.assertEquals(255, details.getWeight()); Assert.assertEquals(4, details.getStreamDependency()); } private Http2Frame assertGood() { Assert.assertEquals(0, memento.getLeftOverData().getReadableSize()); List<Http2Frame> frames = memento.getParsedFrames(); Assert.assertEquals(1, frames.size()); return frames.get(0); } @Test public void testMarshalPriorityFrame() { PriorityFrame frame = new PriorityFrame(); frame.setStreamId(1); PriorityDetails details = frame.getPriorityDetails(); details.setStreamDependency(4); details.setStreamDependencyIsExclusive(true); details.setWeight((short) 0x5); byte[] data = parser.marshal(frame).createByteArray(); String hexFrame = Util.toHexString(data); Assert.assertEquals(priorityFrame(), hexFrame); } @Test public void testMarshalPriorityFrameMSB() { PriorityFrame frame = new PriorityFrame(); frame.setStreamId(1); PriorityDetails details = frame.getPriorityDetails(); details.setStreamDependency(4); details.setStreamDependencyIsExclusive(true); details.setWeight((short) 0xFF); Assert.assertEquals(details.getWeight(), 255); byte[] data = parser.marshal(frame).createByteArray(); String hexFrame = Util.toHexString(data); Assert.assertEquals(priorityFrameMSB(), hexFrame); } }