Esempio n. 1
0
        private async Task ZipAllFilesToStream(
            Release release,
            Stream outputStream,
            CancellationToken?cancellationToken = null)
        {
            var releaseFiles = (await QueryReleaseFiles(release.Id).ToListAsync())
                               .OrderBy(rf => rf.File.ZipFileEntryName())
                               .ToList();

            var path       = Path.GetTempPath() + release.AllFilesZipFileName();
            var fileStream = File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite);

            await using var multiWriteStream = new MultiWriteStream(outputStream, fileStream);

            await DoZipFilesToStream(releaseFiles, release, multiWriteStream, cancellationToken);

            await multiWriteStream.FlushAsync();

            // Now cache the All files zip into blob storage
            // so that we can quickly fetch it again.
            fileStream.Position = 0;

            await _blobStorageService.UploadStream(
                containerName : PublicReleaseFiles,
                path : release.AllFilesZipPath(),
                stream : fileStream,
                contentType : MediaTypeNames.Application.Zip
                );

            await fileStream.DisposeAsync();

            File.Delete(path);
        }
        public async Task Position_Throws()
        {
            await using var stream1 = new MemoryStream();
            await using var stream2 = new MemoryStream();

            var multiWriteStream = new MultiWriteStream(stream1, stream2);

            Assert.Throws <NotSupportedException>(() => { multiWriteStream.Position = 0; });
        }
        public async Task Seek_Throws()
        {
            await using var stream1 = new MemoryStream();
            await using var stream2 = new MemoryStream();

            var multiWriteStream = new MultiWriteStream(stream1, stream2);

            Assert.Throws <NotSupportedException>(() => multiWriteStream.Seek(0, SeekOrigin.Begin));
        }
        public async Task Read_Throws()
        {
            await using var stream1 = new MemoryStream();
            await using var stream2 = new MemoryStream();

            var multiWriteStream = new MultiWriteStream(stream1, stream2);

            var buffer = new byte[] {};

            Assert.Throws <NotSupportedException>(() => multiWriteStream.Read(buffer, 0, 0));
        }
        public async Task Write()
        {
            await using var stream1 = new MemoryStream();
            await using var stream2 = new MemoryStream();

            var multiWriteStream = new MultiWriteStream(stream1, stream2);

            multiWriteStream.WriteText("Test text");

            stream1.Position = 0;
            stream2.Position = 0;

            Assert.Equal("Test text", stream1.ReadToEnd());
            Assert.Equal("Test text", stream2.ReadToEnd());
        }