Пример #1
0
        /// <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());
        }
Пример #2
0
        /// <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);
            }
        }