public void Large_Write_Writes_Correct_Size() { //Arrange var functions = new Mock <Functions>(); var writeCalls = new List <(IntPtr bPointer, ulong offset, uint length)>(); var namespaceVirt = (IntPtr)7; var dataStreamId = Guid.NewGuid(); var allocSize = (2 << 12); IntPtr buffer = Marshal.AllocHGlobal(allocSize); var aligned = AlignedBufferHandle.FromIntPtr(functions.Object, buffer); IntPtr bufferEnd = buffer + allocSize - 1; functions.Setup(f => f.PrjAllocateAlignedBuffer(namespaceVirt, (UIntPtr)allocSize)).Returns(aligned); functions.Setup(f => f.PrjFreeAlignedBuffer(buffer)); functions.Setup(f => f.PrjWriteFileData(namespaceVirt, dataStreamId, It.IsAny <IntPtr>(), It.IsAny <ulong>(), It.IsAny <uint>())) .Returns(HRESULT.S_OK) .Callback((IntPtr ctx, Guid stream, IntPtr newBuffer, ulong offset, uint length) => writeCalls.Add((newBuffer, offset, length))); int totalWriteSize = 16000; //Act var stream = new FileWriteStream(0, allocSize, namespaceVirt, dataStreamId, functions.Object); stream.Write(Enumerable.Repeat <byte>(5, totalWriteSize).ToArray()); stream.Dispose(); //Assert AssertWriteSizes(writeCalls, buffer, bufferEnd, totalWriteSize); }
public void Unused_Stream_Writes_No_Data() { //Arrange var functions = new Mock <Functions>(); var writeCalls = new List <(long, int)>(); var namespaceVirt = (IntPtr)7; var dataStreamId = Guid.NewGuid(); var allocSize = (2 << 12); IntPtr buffer = Marshal.AllocHGlobal(allocSize); var aligned = AlignedBufferHandle.FromIntPtr(functions.Object, buffer); functions.Setup(f => f.PrjAllocateAlignedBuffer(namespaceVirt, (UIntPtr)allocSize)).Returns(aligned); functions.Setup(f => f.PrjFreeAlignedBuffer(buffer)); //Act var stream = new FileWriteStream(0, allocSize, namespaceVirt, dataStreamId, functions.Object); stream.Dispose(); //Assert functions.VerifyAll(); functions.VerifyNoOtherCalls(); }