public async Task CachesPartialMatch() { const string body = "the message\nfoo\r\n"; var realStream = new MemoryStream(Encoding.UTF8.GetBytes(body)); var stream = new MalformedMultipartFixingStream(realStream, "foo"); var buffer = new byte[realStream.Length + 1]; var bytesRead = await stream.ReadAsync(buffer, 0, "the message\nf".Length); bytesRead += await stream.ReadAsync(buffer, bytesRead, buffer.Length - bytesRead); Assert.That(Encoding.UTF8.GetString(buffer, 0, bytesRead) + (await ReadToEndAsync(stream)), Is.EqualTo("the message\r\nfoo\r\n")); }
public async Task CachesPreviousCharOnPartialMatchBufferOffsetMultiRead() { const string body = "the message\nfoo\r\n"; var realStream = new MemoryStream(Encoding.UTF8.GetBytes(body)); var stream = new MalformedMultipartFixingStream(realStream, "foo"); var buffer = new byte[2048]; var bytesRead = await stream.ReadAsync(buffer, 1024, "the message\nf".Length); bytesRead += await stream.ReadAsync(buffer, 1024 + bytesRead, 1024 - bytesRead); Assert.That(Encoding.UTF8.GetString(buffer, 1024, bytesRead), Is.EqualTo("the message\r\nfoo\r\n")); }
public async Task PreserveCharInBoundRead() { const string body = "the message\nfoo\r\n"; var realStream = new MemoryStream(Encoding.UTF8.GetBytes(body)); var stream = new MalformedMultipartFixingStream(realStream, "foo"); var buffer = new byte[realStream.Length + 1]; var bytesRead = await stream.ReadAsync(buffer, 0, body.Length); Assert.That(Encoding.UTF8.GetString(buffer, 0, bytesRead) + (await ReadToEndAsync(stream)), Is.EqualTo("the message\r\nfoo\r\n")); }
public async Task FixNewlineAtStartShortRead() { const string body = "\nfoo\r\nthe message\r\n"; var realStream = new MemoryStream(Encoding.UTF8.GetBytes(body)); var stream = new MalformedMultipartFixingStream(realStream, "foo"); var buffer = new byte[2]; var bytesRead = await stream.ReadAsync(buffer, 0, 2); Assert.That(bytesRead, Is.EqualTo(2)); Assert.That(Encoding.UTF8.GetString(buffer, 0, bytesRead) + (await ReadToEndAsync(stream)), Is.EqualTo("\r\nfoo\r\nthe message\r\n")); }