private IEnumerable <ReadWithDelimiterTestCase> CreateEmptyBufferTestCases() { List <ReadWithDelimiterTestCase> testCases = new List <ReadWithDelimiterTestCase>(); this.CombinatorialEngineProvider.RunCombinations( LineFeeds, new int[] { 0, 100 }, (lineFeed, bytesToRead) => { ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed) { DebugDescription = "Read " + bytesToRead + " bytes from empty buffer.", PayloadFunc = builder => builder.ResetMemoryStream(), ReadDescriptors = new BatchReaderStreamReadDescriptor[] { new BatchReaderStreamReadDescriptor { BufferSize = 100, BufferOffset = 0, NumberOfBytesToRead = bytesToRead, ExpectedNumberOfBytesRead = 0 } }, ExpectedBufferState = new BatchReaderStreamBufferState { ReadPositionInBuffer = 0, NumberOfBytesInBuffer = 0, } }; testCases.Add(testCase); }); return(testCases); }
private IEnumerable <ReadWithDelimiterTestCase> CreateNoDelimiterTestCases() { List <ReadWithDelimiterTestCase> testCases = new List <ReadWithDelimiterTestCase>(); this.CombinatorialEngineProvider.RunCombinations( LineFeeds, new int[] { 0, 100, 200, 300 }, (lineFeed, bytesToRead) => { ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed) { DebugDescription = "Read " + bytesToRead + " bytes from non-empty buffer without delimiter.", PayloadFunc = builder => builder.FillBytes(200, 'a').ResetMemoryStream(), ReadDescriptors = new BatchReaderStreamReadDescriptor[] { new BatchReaderStreamReadDescriptor { BufferSize = 500, BufferOffset = 0, NumberOfBytesToRead = bytesToRead, ExpectedNumberOfBytesRead = Math.Min(bytesToRead, 200) } }, ExpectedBufferState = new BatchReaderStreamBufferState { ReadPositionInBuffer = bytesToRead == 300 ? 0 : Math.Min(bytesToRead, 200), NumberOfBytesInBuffer = bytesToRead == 0 ? 0 : Math.Max(0, 200 - bytesToRead), } }; testCases.Add(testCase); }); return(testCases); }
private IEnumerable <ReadWithDelimiterTestCase> CreateBoundaryAtTheEndTestCases() { List <ReadWithDelimiterTestCase> testCases = new List <ReadWithDelimiterTestCase>(); this.CombinatorialEngineProvider.RunCombinations( BoundaryStrings, LeadingLineFeedForBoundary, LineFeeds, new bool[] { true, false }, new int[] { 0, 100, 200, 300 }, (boundary, leadingBoundaryLineFeed, lineFeed, isEndBoundary, bytesToRead) => { int leadingLineFeedLength = leadingBoundaryLineFeed ? lineFeed.Length : 0; int startBoundaryLength = leadingLineFeedLength + BatchReaderStreamTestUtils.TwoDashesLength + boundary.Length + lineFeed.Length; int endBoundaryLength = startBoundaryLength + BatchReaderStreamTestUtils.TwoDashesLength; int dataBytesInStartBoundaryBuffer = BatchReaderStreamBufferWrapper.BufferLength - 1 - startBoundaryLength; int dataBytesInEndBoundaryBuffer = dataBytesInStartBoundaryBuffer - BatchReaderStreamTestUtils.TwoDashesLength; Func <bool, int> dataBytesInBuffer = isEnd => isEnd ? dataBytesInEndBoundaryBuffer : dataBytesInStartBoundaryBuffer; ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed) { DebugDescription = "Read " + bytesToRead + " bytes from non-empty buffer with delimiter '" + boundary + "' at the end.\r\n" + "[isEnd = " + isEndBoundary + ", leadingLineFeed = " + leadingBoundaryLineFeed + ", lineFeed = " + StringUtils.LineFeedString(lineFeed) + ", bytesToRead = " + bytesToRead + "]", BatchBoundary = boundary, PayloadFunc = builder => isEndBoundary ? builder .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 1 - endBoundaryLength, 'a') .EndBoundary(boundary, leadingBoundaryLineFeed) .FillBytes(1, 'b') .ResetMemoryStream() : builder .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 1 - startBoundaryLength, 'a') .StartBoundary(boundary, leadingBoundaryLineFeed) .FillBytes(1, 'b') .ResetMemoryStream(), ReadDescriptors = new BatchReaderStreamReadDescriptor[] { new BatchReaderStreamReadDescriptor { BufferSize = BatchReaderStreamBufferWrapper.BufferLength, BufferOffset = 0, NumberOfBytesToRead = bytesToRead, ExpectedNumberOfBytesRead = Math.Min(bytesToRead, dataBytesInBuffer(isEndBoundary)) } }, ExpectedBufferState = new BatchReaderStreamBufferState { ReadPositionInBuffer = Math.Min(bytesToRead, dataBytesInBuffer(isEndBoundary)), NumberOfBytesInBuffer = bytesToRead == 0 ? 0 : BatchReaderStreamBufferWrapper.BufferLength - Math.Min(bytesToRead, dataBytesInBuffer(isEndBoundary)), } }; testCases.Add(testCase); }); return(testCases); }
/// <summary> /// Copy constructor. /// </summary> /// <param name="other">The test case instance to copy.</param> public ReadWithDelimiterTestCase(ReadWithDelimiterTestCase other) : base(other) { }
private IEnumerable <ReadWithDelimiterTestCase> CreatePartialBoundaryAtStreamEndTestCases() { List <ReadWithDelimiterTestCase> testCases = new List <ReadWithDelimiterTestCase>(); this.CombinatorialEngineProvider.RunCombinations( BoundaryStrings, LeadingLineFeedForBoundary, LineFeeds, (boundary, leadingBoundaryLineFeed, lineFeed) => { // Fill the buffer with 'a' bytes and leave some room for the line feed, // the two dashes and the first byte of the boundary int leadingLineFeedLength = leadingBoundaryLineFeed ? lineFeed.Length : 0; int partialBoundaryLength = leadingLineFeedLength + BatchReaderStreamTestUtils.TwoDashesLength + 1; int bytesBeforePartialBoundary = BatchReaderStreamBufferWrapper.BufferLength - partialBoundaryLength; this.CombinatorialEngineProvider.RunCombinations( new int[] { 0, 100, bytesBeforePartialBoundary, BatchReaderStreamBufferWrapper.BufferLength, BatchReaderStreamBufferWrapper.BufferLength + 100 }, (bytesToRead) => { ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed) { DebugDescription = "Read " + bytesToRead + " bytes from last buffer of stream with partial delimiter at the end.\r\n" + "[leadingLineFeed = " + leadingBoundaryLineFeed + ", lineFeed = " + StringUtils.LineFeedString(lineFeed) + ", bytesToRead = " + bytesToRead + "]", BatchBoundary = boundary, PayloadFunc = builder => leadingBoundaryLineFeed ? builder .FillBytes(bytesBeforePartialBoundary, 'a') .LineFeed() .Chars(MemoryStreamBatchPayloadBuilder.BoundaryDelimiter) .Chars(boundary[0]) .ResetMemoryStream() : builder .FillBytes(bytesBeforePartialBoundary, 'a') .Chars(MemoryStreamBatchPayloadBuilder.BoundaryDelimiter) .Chars(boundary[0]) .ResetMemoryStream(), ReadDescriptors = new BatchReaderStreamReadDescriptor[] { new BatchReaderStreamReadDescriptor { BufferSize = BatchReaderStreamBufferWrapper.BufferLength, BufferOffset = 0, NumberOfBytesToRead = bytesToRead, ExpectedNumberOfBytesRead = Math.Min(bytesToRead, BatchReaderStreamBufferWrapper.BufferLength) } }, ExpectedBufferState = new BatchReaderStreamBufferState { ReadPositionInBuffer = bytesToRead < BatchReaderStreamBufferWrapper.BufferLength // We did not reload the buffer ? bytesToRead // We reloaded the buffer and read the remaining partial boundary : partialBoundaryLength, NumberOfBytesInBuffer = bytesToRead == 0 // nothing was loaded into the buffer ? 0 : bytesToRead < BatchReaderStreamBufferWrapper.BufferLength // We did not reload the buffer ? BatchReaderStreamBufferWrapper.BufferLength - bytesToRead // We reloaded the buffer and read all of it : 0 } }; testCases.Add(testCase); }); }); return(testCases); }
private IEnumerable <ReadWithDelimiterTestCase> CreateBoundaryAcrossBuffersTestCases() { List <ReadWithDelimiterTestCase> testCases = new List <ReadWithDelimiterTestCase>(); this.CombinatorialEngineProvider.RunCombinations( BoundaryStrings, LeadingLineFeedForBoundary, LineFeeds, new bool[] { true, false }, new int[] { 0, 100, BatchReaderStreamBufferWrapper.BufferLength - 2, BatchReaderStreamBufferWrapper.BufferLength }, (boundary, leadingBoundaryLineFeed, lineFeed, isEndBoundary, bytesToRead) => { int leadingLineFeedLength = leadingBoundaryLineFeed ? lineFeed.Length : 0; int startBoundaryLength = leadingLineFeedLength + BatchReaderStreamTestUtils.TwoDashesLength + boundary.Length + lineFeed.Length; int endBoundaryLength = startBoundaryLength + BatchReaderStreamTestUtils.TwoDashesLength; Func <bool, int> boundaryLength = isEnd => isEnd ? endBoundaryLength : startBoundaryLength; ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed) { DebugDescription = "Read " + bytesToRead + " bytes from buffer with partial delimiter at the end.\r\n" + "[isEnd = " + isEndBoundary + ", leadingLineFeed = " + leadingBoundaryLineFeed + ", lineFeed = " + StringUtils.LineFeedString(lineFeed) + ", bytesToRead = " + bytesToRead + "]", BatchBoundary = boundary, PayloadFunc = builder => isEndBoundary ? builder .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 2, 'a') .EndBoundary(boundary, leadingBoundaryLineFeed) .FillBytes(100, 'b') .ResetMemoryStream() : builder .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 2, 'a') .StartBoundary(boundary, leadingBoundaryLineFeed) .FillBytes(100, 'b') .ResetMemoryStream(), ReadDescriptors = new BatchReaderStreamReadDescriptor[] { new BatchReaderStreamReadDescriptor { BufferSize = BatchReaderStreamBufferWrapper.BufferLength, BufferOffset = 0, NumberOfBytesToRead = bytesToRead, ExpectedNumberOfBytesRead = Math.Min(bytesToRead, BatchReaderStreamBufferWrapper.BufferLength - 2) } }, ExpectedBufferState = new BatchReaderStreamBufferState { ReadPositionInBuffer = bytesToRead == BatchReaderStreamBufferWrapper.BufferLength // we refilled the buffer only to find the boundary ? 0 // we did not refill the buffer : bytesToRead, NumberOfBytesInBuffer = bytesToRead == 0 // nothing was loaded into the buffer ? 0 : bytesToRead == BatchReaderStreamBufferWrapper.BufferLength // we refilled the buffer, read all the 'a' bytes; the boundary and 100 'b' bytes left ? boundaryLength(isEndBoundary) + 100 // we did not refill the buffer : BatchReaderStreamBufferWrapper.BufferLength - bytesToRead, } }; testCases.Add(testCase); }); return(testCases); }
private IEnumerable<ReadWithDelimiterTestCase> CreateEmptyBufferTestCases() { List<ReadWithDelimiterTestCase> testCases = new List<ReadWithDelimiterTestCase>(); this.CombinatorialEngineProvider.RunCombinations( LineFeeds, new int[] { 0, 100 }, (lineFeed, bytesToRead) => { ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed) { DebugDescription = "Read " + bytesToRead + " bytes from empty buffer.", PayloadFunc = builder => builder.ResetMemoryStream(), ReadDescriptors = new BatchReaderStreamReadDescriptor[] { new BatchReaderStreamReadDescriptor { BufferSize = 100, BufferOffset = 0, NumberOfBytesToRead = bytesToRead, ExpectedNumberOfBytesRead = 0 } }, ExpectedBufferState = new BatchReaderStreamBufferState { ReadPositionInBuffer = 0, NumberOfBytesInBuffer = 0, } }; testCases.Add(testCase); }); return testCases; }
private IEnumerable<ReadWithDelimiterTestCase> CreatePartialBoundaryAtStreamEndTestCases() { List<ReadWithDelimiterTestCase> testCases = new List<ReadWithDelimiterTestCase>(); this.CombinatorialEngineProvider.RunCombinations( BoundaryStrings, LeadingLineFeedForBoundary, LineFeeds, (boundary, leadingBoundaryLineFeed, lineFeed) => { // Fill the buffer with 'a' bytes and leave some room for the line feed, // the two dashes and the first byte of the boundary int leadingLineFeedLength = leadingBoundaryLineFeed ? lineFeed.Length : 0; int partialBoundaryLength = leadingLineFeedLength + BatchReaderStreamTestUtils.TwoDashesLength + 1; int bytesBeforePartialBoundary = BatchReaderStreamBufferWrapper.BufferLength - partialBoundaryLength; this.CombinatorialEngineProvider.RunCombinations( new int[] { 0, 100, bytesBeforePartialBoundary, BatchReaderStreamBufferWrapper.BufferLength, BatchReaderStreamBufferWrapper.BufferLength + 100 }, (bytesToRead) => { ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed) { DebugDescription = "Read " + bytesToRead + " bytes from last buffer of stream with partial delimiter at the end.\r\n" + "[leadingLineFeed = " + leadingBoundaryLineFeed + ", lineFeed = " + StringUtils.LineFeedString(lineFeed) + ", bytesToRead = " + bytesToRead + "]", BatchBoundary = boundary, PayloadFunc = builder => leadingBoundaryLineFeed ? builder .FillBytes(bytesBeforePartialBoundary, 'a') .LineFeed() .Chars(MemoryStreamBatchPayloadBuilder.BoundaryDelimiter) .Chars(boundary[0]) .ResetMemoryStream() : builder .FillBytes(bytesBeforePartialBoundary, 'a') .Chars(MemoryStreamBatchPayloadBuilder.BoundaryDelimiter) .Chars(boundary[0]) .ResetMemoryStream(), ReadDescriptors = new BatchReaderStreamReadDescriptor[] { new BatchReaderStreamReadDescriptor { BufferSize = BatchReaderStreamBufferWrapper.BufferLength, BufferOffset = 0, NumberOfBytesToRead = bytesToRead, ExpectedNumberOfBytesRead = Math.Min(bytesToRead, BatchReaderStreamBufferWrapper.BufferLength) } }, ExpectedBufferState = new BatchReaderStreamBufferState { ReadPositionInBuffer = bytesToRead < BatchReaderStreamBufferWrapper.BufferLength // We did not reload the buffer ? bytesToRead // We reloaded the buffer and read the remaining partial boundary : partialBoundaryLength, NumberOfBytesInBuffer = bytesToRead == 0 // nothing was loaded into the buffer ? 0 : bytesToRead < BatchReaderStreamBufferWrapper.BufferLength // We did not reload the buffer ? BatchReaderStreamBufferWrapper.BufferLength - bytesToRead // We reloaded the buffer and read all of it : 0 } }; testCases.Add(testCase); }); }); return testCases; }
private IEnumerable<ReadWithDelimiterTestCase> CreateBoundaryAcrossBuffersTestCases() { List<ReadWithDelimiterTestCase> testCases = new List<ReadWithDelimiterTestCase>(); this.CombinatorialEngineProvider.RunCombinations( BoundaryStrings, LeadingLineFeedForBoundary, LineFeeds, new bool[] { true, false }, new int[] { 0, 100, BatchReaderStreamBufferWrapper.BufferLength - 2, BatchReaderStreamBufferWrapper.BufferLength }, (boundary, leadingBoundaryLineFeed, lineFeed, isEndBoundary, bytesToRead) => { int leadingLineFeedLength = leadingBoundaryLineFeed ? lineFeed.Length : 0; int startBoundaryLength = leadingLineFeedLength + BatchReaderStreamTestUtils.TwoDashesLength + boundary.Length + lineFeed.Length; int endBoundaryLength = startBoundaryLength + BatchReaderStreamTestUtils.TwoDashesLength; Func<bool, int> boundaryLength = isEnd => isEnd ? endBoundaryLength : startBoundaryLength; ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed) { DebugDescription = "Read " + bytesToRead + " bytes from buffer with partial delimiter at the end.\r\n" + "[isEnd = " + isEndBoundary + ", leadingLineFeed = " + leadingBoundaryLineFeed + ", lineFeed = " + StringUtils.LineFeedString(lineFeed) + ", bytesToRead = " + bytesToRead + "]", BatchBoundary = boundary, PayloadFunc = builder => isEndBoundary ? builder .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 2, 'a') .EndBoundary(boundary, leadingBoundaryLineFeed) .FillBytes(100, 'b') .ResetMemoryStream() : builder .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 2, 'a') .StartBoundary(boundary, leadingBoundaryLineFeed) .FillBytes(100, 'b') .ResetMemoryStream(), ReadDescriptors = new BatchReaderStreamReadDescriptor[] { new BatchReaderStreamReadDescriptor { BufferSize = BatchReaderStreamBufferWrapper.BufferLength, BufferOffset = 0, NumberOfBytesToRead = bytesToRead, ExpectedNumberOfBytesRead = Math.Min(bytesToRead, BatchReaderStreamBufferWrapper.BufferLength - 2) } }, ExpectedBufferState = new BatchReaderStreamBufferState { ReadPositionInBuffer = bytesToRead == BatchReaderStreamBufferWrapper.BufferLength // we refilled the buffer only to find the boundary ? 0 // we did not refill the buffer : bytesToRead, NumberOfBytesInBuffer = bytesToRead == 0 // nothing was loaded into the buffer ? 0 : bytesToRead == BatchReaderStreamBufferWrapper.BufferLength // we refilled the buffer, read all the 'a' bytes; the boundary and 100 'b' bytes left ? boundaryLength(isEndBoundary) + 100 // we did not refill the buffer : BatchReaderStreamBufferWrapper.BufferLength - bytesToRead, } }; testCases.Add(testCase); }); return testCases; }
private IEnumerable<ReadWithDelimiterTestCase> CreateBoundaryAtTheEndTestCases() { List<ReadWithDelimiterTestCase> testCases = new List<ReadWithDelimiterTestCase>(); this.CombinatorialEngineProvider.RunCombinations( BoundaryStrings, LeadingLineFeedForBoundary, LineFeeds, new bool[] { true, false }, new int[] { 0, 100, 200, 300 }, (boundary, leadingBoundaryLineFeed, lineFeed, isEndBoundary, bytesToRead) => { int leadingLineFeedLength = leadingBoundaryLineFeed ? lineFeed.Length : 0; int startBoundaryLength = leadingLineFeedLength + BatchReaderStreamTestUtils.TwoDashesLength + boundary.Length + lineFeed.Length; int endBoundaryLength = startBoundaryLength + BatchReaderStreamTestUtils.TwoDashesLength; int dataBytesInStartBoundaryBuffer = BatchReaderStreamBufferWrapper.BufferLength - 1 - startBoundaryLength; int dataBytesInEndBoundaryBuffer = dataBytesInStartBoundaryBuffer - BatchReaderStreamTestUtils.TwoDashesLength; Func<bool, int> dataBytesInBuffer = isEnd => isEnd ? dataBytesInEndBoundaryBuffer : dataBytesInStartBoundaryBuffer; ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed) { DebugDescription = "Read " + bytesToRead + " bytes from non-empty buffer with delimiter '" + boundary + "' at the end.\r\n" + "[isEnd = " + isEndBoundary + ", leadingLineFeed = " + leadingBoundaryLineFeed + ", lineFeed = " + StringUtils.LineFeedString(lineFeed) + ", bytesToRead = " + bytesToRead + "]", BatchBoundary = boundary, PayloadFunc = builder => isEndBoundary ? builder .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 1 - endBoundaryLength, 'a') .EndBoundary(boundary, leadingBoundaryLineFeed) .FillBytes(1, 'b') .ResetMemoryStream() : builder .FillBytes(BatchReaderStreamBufferWrapper.BufferLength - 1 - startBoundaryLength, 'a') .StartBoundary(boundary, leadingBoundaryLineFeed) .FillBytes(1, 'b') .ResetMemoryStream(), ReadDescriptors = new BatchReaderStreamReadDescriptor[] { new BatchReaderStreamReadDescriptor { BufferSize = BatchReaderStreamBufferWrapper.BufferLength, BufferOffset = 0, NumberOfBytesToRead = bytesToRead, ExpectedNumberOfBytesRead = Math.Min(bytesToRead, dataBytesInBuffer(isEndBoundary)) } }, ExpectedBufferState = new BatchReaderStreamBufferState { ReadPositionInBuffer = Math.Min(bytesToRead, dataBytesInBuffer(isEndBoundary)), NumberOfBytesInBuffer = bytesToRead == 0 ? 0 : BatchReaderStreamBufferWrapper.BufferLength - Math.Min(bytesToRead, dataBytesInBuffer(isEndBoundary)), } }; testCases.Add(testCase); }); return testCases; }
private IEnumerable<ReadWithDelimiterTestCase> CreateNoDelimiterTestCases() { List<ReadWithDelimiterTestCase> testCases = new List<ReadWithDelimiterTestCase>(); this.CombinatorialEngineProvider.RunCombinations( LineFeeds, new int[] { 0, 100, 200, 300 }, (lineFeed, bytesToRead) => { ReadWithDelimiterTestCase testCase = new ReadWithDelimiterTestCase(lineFeed) { DebugDescription = "Read " + bytesToRead + " bytes from non-empty buffer without delimiter.", PayloadFunc = builder => builder.FillBytes(200, 'a').ResetMemoryStream(), ReadDescriptors = new BatchReaderStreamReadDescriptor[] { new BatchReaderStreamReadDescriptor { BufferSize = 500, BufferOffset = 0, NumberOfBytesToRead = bytesToRead, ExpectedNumberOfBytesRead = Math.Min(bytesToRead, 200) } }, ExpectedBufferState = new BatchReaderStreamBufferState { ReadPositionInBuffer = bytesToRead == 300 ? 0 : Math.Min(bytesToRead, 200), NumberOfBytesInBuffer = bytesToRead == 0 ? 0 : Math.Max(0, 200 - bytesToRead), } }; testCases.Add(testCase); }); return testCases; }