Exemplo n.º 1
0
        public void GetFileTest()
        {
            // arrange
            int size = 1024;

            byte[] bytes     = new byte[size];
            string url       = DummyFileHelper.GetFileUrl(size);
            var    dummyData = DummyData.GenerateOrderedBytes(size);

            // act
            var headers = ReadAndGetHeaders(url, bytes);

            // assert
            Assert.IsTrue(dummyData.SequenceEqual(bytes));
            Assert.AreEqual(size.ToString(), headers["Content-Length"]);
            Assert.AreEqual(contentType, headers["Content-Type"]);
        }
Exemplo n.º 2
0
        private void TestStreamIntegrity(int streamSize, long maximumBytesPerSecond)
        {
            // arrange
            byte[] data       = DummyData.GenerateOrderedBytes(streamSize);
            byte[] copiedData = new byte[streamSize];
            using Stream stream = new ThrottledStream(new MemoryStream(), maximumBytesPerSecond);

            // act
            stream.Write(data, 0, data.Length);
            stream.Seek(0, SeekOrigin.Begin);
            stream.Read(copiedData, 0, copiedData.Length);

            // assert
            Assert.AreEqual(streamSize, data.Length);
            Assert.AreEqual(streamSize, copiedData.Length);
            Assert.IsTrue(data.SequenceEqual(copiedData));
        }
Exemplo n.º 3
0
        public virtual void Initial()
        {
            var testData = DummyData.GenerateOrderedBytes(DummyFileHelper.FileSize16Kb);

            _package = new DownloadPackage()
            {
                FileName      = DummyFileHelper.SampleFile16KbName,
                Address       = DummyFileHelper.GetFileWithNameUrl(DummyFileHelper.SampleFile16KbName, DummyFileHelper.FileSize16Kb),
                Chunks        = new ChunkHub(Configuration).ChunkFile(DummyFileHelper.FileSize16Kb, 8),
                TotalFileSize = DummyFileHelper.FileSize16Kb
            };

            foreach (var chunk in _package.Chunks)
            {
                chunk.Storage.WriteAsync(testData, (int)chunk.Start, (int)chunk.Length);
            }
        }
Exemplo n.º 4
0
        public void TestSetValidPositionWhenStorageChanged()
        {
            // arrange
            var nextPosition = 512;
            var chunk        = new Chunk(0, 1024)
            {
                Position = 1,
                Storage  = Storage
            };

            // act
            Storage.WriteAsync(DummyData.GenerateRandomBytes(nextPosition), 0, nextPosition);
            chunk.SetValidPosition();

            // assert
            Assert.AreEqual(nextPosition, chunk.Position);
        }
Exemplo n.º 5
0
        public void TestStreamWrite()
        {
            var size           = 1024;
            var bytesPerSecond = 256; // 32 B/s
            var randomBytes    = DummyData.GenerateRandomBytes(size);

            using Stream tar = new ThrottledStream(new MemoryStream(), bytesPerSecond);
            tar.Seek(0, SeekOrigin.Begin);
            var start = Environment.TickCount64;

            tar.Write(randomBytes, 0, randomBytes.Length);

            var elapsed      = Environment.TickCount64 - start;
            var expectedTime = (size / bytesPerSecond) * 1000;

            Assert.IsTrue(elapsed >= expectedTime);
        }
Exemplo n.º 6
0
        public void IsDownloadCompletedWhenMemoryStorageDataIsExistTest()
        {
            // arrange
            var size  = 1024;
            var chunk = new Chunk(0, size - 1)
            {
                Storage  = new MemoryStorage(size),
                Position = size - 1
            };

            chunk.Storage.WriteAsync(DummyData.GenerateRandomBytes(size), 0, size).Wait();

            // act
            bool isDownloadCompleted = chunk.IsDownloadCompleted();

            // assert
            Assert.IsTrue(isDownloadCompleted);
        }
Exemplo n.º 7
0
        public virtual void Initial()
        {
            var testData = DummyData.GenerateOrderedBytes(DownloadTestHelper.FileSize16Kb);

            Package = new DownloadPackage()
            {
                FileName      = DownloadTestHelper.File16KbName,
                Address       = DownloadTestHelper.File16KbUrl,
                Chunks        = new ChunkHub(Configuration).ChunkFile(DownloadTestHelper.FileSize16Kb, 8),
                TotalFileSize = DownloadTestHelper.FileSize16Kb
            };

            foreach (var chunk in Package.Chunks)
            {
                chunk.Storage.WriteAsync(testData, (int)chunk.Start, (int)chunk.Length);
                Package.AddReceivedBytes(chunk.Length);
            }
        }
Exemplo n.º 8
0
        public void ReadStreamTimeoutExceptionTest()
        {
            // arrange
            var streamSize    = 20480;
            var randomlyBytes = DummyData.GenerateRandomBytes(streamSize);
            var chunk         = new Chunk(0, streamSize - 1)
            {
                Timeout = 100
            };
            var chunkDownloader = new ChunkDownloader(chunk, _configuration);

            using var memoryStream = new MemoryStream(randomlyBytes);
            var canceledToken = new CancellationToken(true);

            // act
            async Task CallReadStream() => await chunkDownloader.ReadStream(new MemoryStream(), canceledToken).ConfigureAwait(false);

            // assert
            Assert.ThrowsExceptionAsync <OperationCanceledException>(CallReadStream);
        }
Exemplo n.º 9
0
        private void TestStreamWriteSpeed(ThrottledStreamWrite writeMethod)
        {
            // arrange
            var size           = 1024;
            var bytesPerSecond = 256;                            // 256 B/s
            var tolerance      = 50;                             // 50 ms
            var expectedTime   = (size / bytesPerSecond) * 1000; // 4000 Milliseconds
            var randomBytes    = DummyData.GenerateRandomBytes(size);

            using Stream stream = new ThrottledStream(new MemoryStream(), bytesPerSecond);
            var stopWatcher = Stopwatch.StartNew();

            // act
            writeMethod(stream, randomBytes, 0, randomBytes.Length);
            stopWatcher.Stop();

            // assert
            Assert.IsTrue(stopWatcher.ElapsedMilliseconds + tolerance >= expectedTime,
                          $"actual duration is: {stopWatcher.ElapsedMilliseconds}ms");
        }
Exemplo n.º 10
0
        public void TestPackageSituationAfterDispose()
        {
            // arrange
            var sampleDataLength = 1024;

            Package.TotalFileSize     = sampleDataLength * 64;
            Package.Chunks            = new[] { new Chunk(0, Package.TotalFileSize) };
            Package.Chunks[0].Storage = new MemoryStorage();
            Package.Chunks[0].Storage.WriteAsync(DummyData.GenerateRandomBytes(sampleDataLength), 0, sampleDataLength);
            Package.Chunks[0].SetValidPosition();

            // act
            Dispose();

            // assert
            Assert.IsNotNull(Package.Chunks);
            Assert.AreEqual(sampleDataLength, Package.ReceivedBytesSize);
            Assert.AreEqual(sampleDataLength * 64, Package.TotalFileSize);

            Package.Clear();
        }
Exemplo n.º 11
0
        public void TestStreamRead()
        {
            var size           = 1024;
            var bytesPerSecond = 256; // 256 B/s
            var randomBytes    = DummyData.GenerateRandomBytes(size);

            using Stream src = new ThrottledStream(new MemoryStream(randomBytes), bytesPerSecond);
            src.Seek(0, SeekOrigin.Begin);
            byte[] buf   = new byte[bytesPerSecond];
            int    read  = 1;
            long   start = Environment.TickCount64;

            while (read > 0)
            {
                read = src.Read(buf, 0, buf.Length);
            }

            long elapsed      = Environment.TickCount64 - start;
            var  expectedTime = (size / bytesPerSecond) * 1000;

            Assert.IsTrue(elapsed >= expectedTime);
        }
Exemplo n.º 12
0
        public void TestPackageChunksDataAfterDispose()
        {
            // arrange
            var dummyData = DummyData.GenerateOrderedBytes(1024);

            Package.Chunks = new ChunkHub(Options).ChunkFile(1024 * 64, 64);
            foreach (var chunk in Package.Chunks)
            {
                chunk.Storage.WriteAsync(dummyData, 0, 1024).Wait();
            }

            // act
            Dispose();

            // assert
            Assert.IsNotNull(Package.Chunks);
            foreach (var chunk in Package.Chunks)
            {
                Assert.IsTrue(DummyFileHelper.AreEqual(dummyData, chunk.Storage.OpenRead()));
            }

            Package.Clear();
        }
Exemplo n.º 13
0
        private void MergeChunksTest(bool onTheFly)
        {
            // arrange
            var fileSize   = 10240;
            var chunkCount = 8;
            var counter    = 0;

            _configuration.OnTheFlyDownload = onTheFly;
            var chunkHub       = new ChunkHub(_configuration);
            var mergedFilename = FileHelper.GetTempFile("");

            Chunk[]       chunks     = chunkHub.ChunkFile(fileSize, chunkCount);
            List <byte[]> chunksData = new List <byte[]>();

            foreach (Chunk chunk in chunks)
            {
                var dummyBytes = DummyData.GenerateRandomBytes((int)chunk.Length);
                chunksData.Add(dummyBytes);
                chunk.Storage.WriteAsync(dummyBytes, 0, dummyBytes.Length).Wait();
            }

            // act
            chunkHub.MergeChunks(chunks, mergedFilename).Wait();

            // assert
            Assert.IsTrue(File.Exists(mergedFilename));
            var mergedData = File.ReadAllBytes(mergedFilename);

            foreach (byte[] chunkData in chunksData)
            {
                foreach (var byteOfChunkData in chunkData)
                {
                    Assert.AreEqual(byteOfChunkData, mergedData[counter++]);
                }
            }
        }