public async Task WhenReadingStreamWithCompressedFramesAndPingsThenReadsAllData() { var data1 = new MemoryStream(Enumerable.Repeat((byte)1, 1000000).ToArray()); var frame1Compressed = await(await data1.Compress().ConfigureAwait(false)).ToByteArray().ConfigureAwait(false); var frame1 = new WebSocketFrame(Fin.More, Opcode.Binary, frame1Compressed, false, true); var data2 = new MemoryStream(Enumerable.Repeat((byte)2, 1000000).ToArray()); var frame2Compressed = await(await data2.Compress().ConfigureAwait(false)).ToByteArray().ConfigureAwait(false); var frame2 = new WebSocketFrame(Fin.Final, Opcode.Cont, frame2Compressed, false, true); var frame3 = new WebSocketFrame(Fin.Final, Opcode.Ping, new byte[0], false, true); var frame4 = new WebSocketFrame(Fin.Final, Opcode.Binary, frame1Compressed, false, true); var frame5 = new WebSocketFrame(Fin.Final, Opcode.Ping, new byte[0], false, true); var stream = new MemoryStream( (await frame1.ToByteArray().ConfigureAwait(false)) .Concat(await frame2.ToByteArray().ConfigureAwait(false)) .Concat(await frame3.ToByteArray().ConfigureAwait(false)) .Concat(await frame4.ToByteArray().ConfigureAwait(false)) .Concat(await frame5.ToByteArray().ConfigureAwait(false)) .ToArray()); _sut = new WebSocketStreamReader(stream, 100000); int messages = 0; WebSocketMessage message; while ((message = await _sut.Read(CancellationToken.None).ConfigureAwait(false)) != null) { await message.Consume().ConfigureAwait(false); messages += 1; } Assert.AreEqual(4, messages); }
public async Task WhenReadingMessageThenGetsAllFrames() { var msg = await _sut.Read(CancellationToken.None).ConfigureAwait(false); var buffer = new byte[2000]; var bytesRead = msg.RawData.Read(buffer, 0, 2000); var expected = Enumerable.Repeat((byte)1, 1000).Concat(Enumerable.Repeat((byte)2, 1000)).ToArray(); CollectionAssert.AreEqual(expected, buffer); }