public void GetChunk_should_return_expected_result_when_initialUnpooledChunkSize_is_not_zero(int numberOfCalls, int[] expectedRequestSizes) { var baseSource = Substitute.For <IBsonChunkSource>(); baseSource.GetChunk(Arg.Any <int>()).Returns(x => { var requestedSize = (int)x[0]; return(new ByteArrayChunk(requestedSize)); }); var subject = new OutputBufferChunkSource(baseSource, initialUnpooledChunkSize: 2, minChunkSize: 4, maxChunkSize: 32); var result = subject.GetChunk(1); result.Bytes.Count.Should().Be(2); for (var n = 0; n < numberOfCalls - 1; n++) { result = subject.GetChunk(1); result.Bytes.Count.Should().Be(expectedRequestSizes[n]); } baseSource.Received(numberOfCalls - 1).GetChunk(Arg.Any <int>()); foreach (var expectedRequestSize in expectedRequestSizes) { var requiredNumberOfCalls = expectedRequestSizes.Count(s => s == expectedRequestSize); baseSource.Received(requiredNumberOfCalls).GetChunk(expectedRequestSize); } }
public void GetChunk_should_throw_when_subject_is_disposed() { var baseSource = Substitute.For <IBsonChunkSource>(); var subject = new OutputBufferChunkSource(baseSource); subject.Dispose(); Action action = () => subject.GetChunk(1); action.ShouldThrow <ObjectDisposedException>().And.ObjectName.Should().Be("OutputBufferChunkSource"); }
public void GetChunk_should_throw_when_requestedSize_is_less_than_or_equal_to_zero( [Values(-1, 0)] int requestedSize) { var baseSource = Substitute.For <IBsonChunkSource>(); var subject = new OutputBufferChunkSource(baseSource); Action action = () => subject.GetChunk(requestedSize); action.ShouldThrow <ArgumentOutOfRangeException>().And.ParamName.Should().Be("requestedSize"); }
public void GetChunk_should_return_expected_result_when_initialUnpooledChunkSize_is_not_zero(int numberOfCalls, int[] expectedRequestSizes) { var mockBaseSource = new Mock <IBsonChunkSource>(); mockBaseSource.Setup(s => s.GetChunk(It.IsAny <int>())).Returns((int requestedSize) => new ByteArrayChunk(requestedSize)); var subject = new OutputBufferChunkSource(mockBaseSource.Object, initialUnpooledChunkSize: 2, minChunkSize: 4, maxChunkSize: 32); var result = subject.GetChunk(1); result.Bytes.Count.Should().Be(2); for (var n = 0; n < numberOfCalls - 1; n++) { result = subject.GetChunk(1); result.Bytes.Count.Should().Be(expectedRequestSizes[n]); } mockBaseSource.Verify(s => s.GetChunk(It.IsAny <int>()), Times.Exactly(numberOfCalls - 1)); foreach (var expectedRequestSize in expectedRequestSizes) { var requiredNumberOfCalls = expectedRequestSizes.Count(s => s == expectedRequestSize); mockBaseSource.Verify(s => s.GetChunk(expectedRequestSize), Times.Exactly(requiredNumberOfCalls)); } }