public void MainTest()
        {
            AsyncPump.Run(
                async() =>
            {
                var writtenBytes = new byte[this.Random.Next(3072, 10241)];
                this.Random.NextBytes(writtenBytes);

                using (var output = new MemoryStream())
                {
                    using (var framer = new GlowOutput(1024, 0, (s, e) => output.Write(e.FramedPackage, 0, e.FramedPackageLength)))
                    {
                        framer.WriteBytes(writtenBytes);
                        framer.Finish();
                    }

                    output.Position = 0;
                    var reader      = new S101Reader(output.ReadAsync, 1024);
                    Assert.IsTrue(await reader.ReadAsync(CancellationToken.None));
                    Assert.IsInstanceOfType(reader.Message.Command, typeof(EmberData));

                    using (var input = new MemoryStream())
                    {
                        await reader.Payload.CopyToAsync(input);
                        CollectionAssert.AreEqual(writtenBytes, input.ToArray());
                    }

                    await reader.DisposeAsync(CancellationToken.None);
                }
            });
        }
        private static Task TestGlowOutput(byte[] block, int blockCount)
        {
            using (var output = new GlowOutput(1024, 0, (s, e) => { }))
            {
                for (int index = 0; index < blockCount; ++index)
                {
                    output.WriteBytes(block);
                }

                output.Finish();
            }

            return(Task.FromResult(false));
        }