Adding test of windows generator with masking
This commit is contained in:
parent
58e181f463
commit
0060a32bc5
|
@ -5,6 +5,8 @@ import static org.hamcrest.Matchers.*;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.util.BufferUtil;
|
||||||
|
import org.eclipse.jetty.websocket.api.WebSocketPolicy;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
@ -43,4 +45,71 @@ public class GeneratorTest
|
||||||
Assert.assertThat("Created Parts",totalParts,is(expectedParts));
|
Assert.assertThat("Created Parts",totalParts,is(expectedParts));
|
||||||
Assert.assertThat("Created Bytes",totalBytes,is(payload.length + expectedHeaderSize));
|
Assert.assertThat("Created Bytes",totalBytes,is(payload.length + expectedHeaderSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testWindowedGenerateWithMasking()
|
||||||
|
{
|
||||||
|
byte payload[] = new byte[10240];
|
||||||
|
Arrays.fill(payload,(byte)0x55);
|
||||||
|
|
||||||
|
byte mask[] = new byte[]
|
||||||
|
{ 0x2A, (byte)0xF0, 0x0F, 0x00 };
|
||||||
|
|
||||||
|
WebSocketFrame frame = WebSocketFrame.binary(payload);
|
||||||
|
frame.setMask(mask);
|
||||||
|
|
||||||
|
int totalParts = 0;
|
||||||
|
int totalBytes = 0;
|
||||||
|
int windowSize = 2929; // important, use an odd # window size to test masking across window barriers
|
||||||
|
int expectedHeaderSize = 8;
|
||||||
|
int expectedParts = (int)Math.ceil((double)(payload.length + expectedHeaderSize) / windowSize);
|
||||||
|
|
||||||
|
// Buffer to capture generated bytes
|
||||||
|
ByteBuffer completeBuf = ByteBuffer.allocate(payload.length + expectedHeaderSize);
|
||||||
|
BufferUtil.clearToFill(completeBuf);
|
||||||
|
|
||||||
|
// Generate and capture generator output
|
||||||
|
Generator generator = new UnitGenerator();
|
||||||
|
|
||||||
|
boolean done = false;
|
||||||
|
while (!done)
|
||||||
|
{
|
||||||
|
Assert.assertThat("Too many parts",totalParts,lessThan(20));
|
||||||
|
|
||||||
|
ByteBuffer buf = generator.generate(windowSize,frame);
|
||||||
|
// System.out.printf("Generated buf.limit() = %,d%n",buf.limit());
|
||||||
|
|
||||||
|
totalBytes += buf.remaining();
|
||||||
|
totalParts++;
|
||||||
|
|
||||||
|
BufferUtil.put(buf,completeBuf);
|
||||||
|
|
||||||
|
done = (frame.remaining() <= 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.assertThat("Created Parts",totalParts,is(expectedParts));
|
||||||
|
Assert.assertThat("Created Bytes",totalBytes,is(payload.length + expectedHeaderSize));
|
||||||
|
|
||||||
|
// Parse complete buffer.
|
||||||
|
WebSocketPolicy policy = WebSocketPolicy.newServerPolicy();
|
||||||
|
Parser parser = new Parser(policy);
|
||||||
|
FrameParseCapture capture = new FrameParseCapture();
|
||||||
|
parser.setIncomingFramesHandler(capture);
|
||||||
|
|
||||||
|
BufferUtil.flipToFlush(completeBuf,0);
|
||||||
|
parser.parse(completeBuf);
|
||||||
|
|
||||||
|
// Assert validity of frame
|
||||||
|
WebSocketFrame actual = capture.getFrames().get(0);
|
||||||
|
Assert.assertThat("Frame.opcode",actual.getOpCode(),is(OpCode.BINARY));
|
||||||
|
Assert.assertThat("Frame.payloadLength",actual.getPayloadLength(),is(payload.length));
|
||||||
|
|
||||||
|
// Validate payload content for proper masking
|
||||||
|
ByteBuffer actualData = actual.getPayload().slice();
|
||||||
|
Assert.assertThat("Frame.payload.remaining",actualData.remaining(),is(payload.length));
|
||||||
|
while (actualData.remaining() > 0)
|
||||||
|
{
|
||||||
|
Assert.assertThat("Actual.payload[" + actualData.position() + "]",actualData.get(),is((byte)0x55));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue