/// <summary> /// Receive set of chunks. /// </summary> /// <param name="chunks">Received chunks.</param> /// <param name="receiver">UdpChunkReceiver instance.</param> /// <returns>Flag indicating whether last chunk signaled completion.</returns> private static bool ReceiveChunks(IEnumerable <byte[]> chunks, DataUnchunker receiver) { var completions = chunks.Select(c => receiver.Receive(c)).ToList(); Assert.IsTrue(completions.Count(_ => _) <= 1, "Multiple completions."); return(completions.Last()); }
/// <summary> /// Run through a scenario and validate results. /// </summary> /// <param name="rawData">Raw data for this scenario.</param> /// <param name="chunks">Chunks for this scenario.</param> /// <param name="numChunks">Number of expected chunks.</param> /// <param name="complete">Whether to expect completion.</param> /// <param name="numChunkSets">Number of expected sets of chunks.</param> /// <param name="numAbandoned">Number of expected abandoned datagrams.</param> private static void VerifyReceive(byte[] rawData, IEnumerable <byte[]> chunks, int numChunks, bool complete, int numChunkSets, int numAbandoned) { int chunksets = 0; int abandoned = 0; var receiver = new DataUnchunker(MaxDatagramSize, id => { chunksets++; }, id => { abandoned++; }); Assert.AreEqual <int>(numChunks, chunks.Count()); Assert.AreEqual <bool>(complete, ReceiveChunks(chunks, receiver)); Assert.AreEqual <int>(numChunkSets, chunksets); Assert.AreEqual <int>(numAbandoned, abandoned); if (rawData != null) { VerifyData(rawData, receiver.Payload, receiver.Length); } }