|
|
|
@ -105,10 +105,52 @@ namespace Grpc.Core.Internal.Tests |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Advance() - multiple chunks... |
|
|
|
|
[TestCase(0)] |
|
|
|
|
[TestCase(1000)] |
|
|
|
|
public void SliceBuffer_BigPayload(int sizeHint) |
|
|
|
|
{ |
|
|
|
|
using (var sliceBuffer = SliceBufferSafeHandle.Create()) |
|
|
|
|
{ |
|
|
|
|
var bigPayload = GetTestBuffer(4 * 1024 * 1024); |
|
|
|
|
|
|
|
|
|
int offset = 0; |
|
|
|
|
while (offset < bigPayload.Length) |
|
|
|
|
{ |
|
|
|
|
var destSpan = sliceBuffer.GetSpan(sizeHint); |
|
|
|
|
int copySize = Math.Min(destSpan.Length, bigPayload.Length - offset); |
|
|
|
|
bigPayload.AsSpan(offset, copySize).CopyTo(destSpan); |
|
|
|
|
sliceBuffer.Advance(copySize); |
|
|
|
|
offset += copySize; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sliceBuffer.Complete(); |
|
|
|
|
CollectionAssert.AreEqual(bigPayload, sliceBuffer.ToByteArray()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// other TODOS: |
|
|
|
|
[TestCase] |
|
|
|
|
public void SliceBuffer_NegativeSizeHint() |
|
|
|
|
{ |
|
|
|
|
using (var sliceBuffer = SliceBufferSafeHandle.Create()) |
|
|
|
|
{ |
|
|
|
|
Assert.Throws(typeof(ArgumentException), () => sliceBuffer.GetSpan(-1)); |
|
|
|
|
Assert.Throws(typeof(ArgumentException), () => sliceBuffer.GetMemory(-1)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[TestCase] |
|
|
|
|
public void SliceBuffer_AdvanceBadArg() |
|
|
|
|
{ |
|
|
|
|
using (var sliceBuffer = SliceBufferSafeHandle.Create()) |
|
|
|
|
{ |
|
|
|
|
int size = 10; |
|
|
|
|
var destSpan = sliceBuffer.GetSpan(size); |
|
|
|
|
Assert.Throws(typeof(ArgumentException), () => sliceBuffer.Advance(size + 1)); |
|
|
|
|
Assert.Throws(typeof(ArgumentException), () => sliceBuffer.Advance(-1)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// TODO: other TODOs |
|
|
|
|
// -- provide a null instance of SliceBufferSafeHandle |
|
|
|
|
//-- order of UnsafeSerialize in AsyncCall methods... |
|
|
|
|
|
|
|
|
|