Esempio n. 1
0
        private static string ExtensionFromAlgo(CompressionAlgo algo, bool crypted)
        {
            switch (algo)
            {
            case CompressionAlgo.Lz4 when crypted:
                return(".tarlz4aes");

            case CompressionAlgo.Lz4:
                return(".tarlz4");

            case CompressionAlgo.Brotli when crypted:
                return(".tarbraes");

            case CompressionAlgo.Brotli:
                return(".tarbr");

            case CompressionAlgo.Zstd when crypted:
                return(".tarzstdaes");

            case CompressionAlgo.Zstd:
                return(".tarzstd");

            default:
                throw new ArgumentOutOfRangeException(nameof(algo), algo, null);
            }
        }
Esempio n. 2
0
        public CompressOption GetTccCompressOption(string targetFolder, CompressionAlgo algo)
        {
            string src;

            if (Files != null)
            {
                src = String.Join(" ", Files.Select(i => i.FullName));
            }
            else if (Directories != null)
            {
                src = String.Join(" ", Directories.Select(i => i.FullName));
            }
            else
            {
                throw new MissingMemberException();
            }
            Target = targetFolder;

            var compressOption = new CompressOption
            {
                Algo            = algo,
                BlockMode       = BlockMode.Individual,
                SourceDirOrFile = src,
                DestinationDir  = Target,
                Threads         = Environment.ProcessorCount
            };

            return(compressOption);
        }
Esempio n. 3
0
        public static void UpdateTarget(
            string what,
            string newWhere,
            bool newCompressed,
            CompressionAlgo newAlgo,
            CompressionLevel newLevel,
            DateTime newStart,
            TimeSpan newInterval)
        {
            BackupTarget target;
            if ((target = GetTarget(what)) == null)
                throw new ArgumentException(nameof(what));

            // make sure there aren't any minutes or seconds
            newInterval = new TimeSpan(newInterval.Days, newInterval.Hours, 0, 0);

            target.Where = newWhere;
            target.Compressed = newCompressed;
            target.Algo = newAlgo;
            target.Level = newLevel;
            target.Interval = newInterval;
            target.Start = newStart;

            target.CalculateNextBackup(true);

            var index = targets.IndexOf(target);
            targets.RemoveAt(index);
            targets.Insert(index, target);
            SaveTargets();
        }
 private static IEnumerable <int> UserDefinedRatios(string ratios, CompressionAlgo algo)
 {
     foreach (var r in ratios.Split(','))
     {
         if (int.TryParse(r, out int ratio) && ratio > 0 && ratio <= MaxRatio(algo))
         {
             yield return(ratio);
         }
     }
 }
Esempio n. 5
0
        public void AlgoCommands(string command, CompressionAlgo algo)
        {
            var commandBlocks = command.Split(" ", StringSplitOptions.RemoveEmptyEntries);
            var parsed        = commandBlocks.ParseCommandLine();

            Assert.Equal(0, parsed.ReturnCode);
            Assert.IsType <CompressOption>(parsed.Option);
            Assert.Equal(algo, ((CompressOption)parsed.Option).Algo);
            Assert.Equal(3, ((CompressOption)parsed.Option).CompressionRatio);
        }
Esempio n. 6
0
        private async Task <OperationSummary> Compress(PasswordMode passwordMode, CompressionAlgo algo,
                                                       string compressedFolder, string keysFolder, TestData data)
        {
            CompressOption compressOption = data.GetTccCompressOption(compressedFolder, algo);

            compressOption.PasswordOption = await _benchmarkOptionHelper.GenerateCompressPasswordOption(passwordMode, keysFolder);

            var resultCompress = await _tarCompressCrypt.Compress(compressOption);

            return(resultCompress);
        }
        private static int MaxRatio(CompressionAlgo algo)
        {
            switch (algo)
            {
            case CompressionAlgo.Lz4:
                return(9);

            case CompressionAlgo.Brotli:
                return(9);

            case CompressionAlgo.Zstd:
                return(19);

            default:
                throw new ArgumentOutOfRangeException(nameof(algo));
            }
        }
        private static bool ShouldTestAlgo(BenchmarkOption benchmarkOption, CompressionAlgo algo)
        {
            switch (algo)
            {
            case CompressionAlgo.Lz4:
                return((benchmarkOption.Algorithm & BenchmarkCompressionAlgo.Lz4) == BenchmarkCompressionAlgo.Lz4);

            case CompressionAlgo.Brotli:
                return((benchmarkOption.Algorithm & BenchmarkCompressionAlgo.Brotli) == BenchmarkCompressionAlgo.Brotli);

            case CompressionAlgo.Zstd:
                return((benchmarkOption.Algorithm & BenchmarkCompressionAlgo.Zstd) == BenchmarkCompressionAlgo.Zstd);

            default:
                throw new ArgumentOutOfRangeException(nameof(algo), algo, "Unknown algo");
            }
        }
Esempio n. 9
0
        public BackupTarget(
            string what,
            string where,
            bool compressed,
            CompressionAlgo algo,
            CompressionLevel level,
            TimeSpan interval,
            DateTime start)
        {
            What = what;
            Where = where;
            Compressed = compressed;
            Algo = algo;
            Level = level;
            Interval = interval;
            Start = start;

            NextBackup = start;
            CalculateNextBackup();
        }
Esempio n. 10
0
        public async Task CompressDecompress(PasswordMode mode, CompressionAlgo algo)
        {
            await _externalDependencies.EnsureAllDependenciesPresent();

            string toCompressFolder   = TestFileHelper.NewFolder();
            string compressedFolder   = TestFileHelper.NewFolder();
            string decompressedFolder = TestFileHelper.NewFolder();
            string keysFolder         = TestFileHelper.NewFolder();

            var data = await TestData.CreateFiles(1, 1024, toCompressFolder);

            OperationSummary resultCompress = await Compress(mode, algo, compressedFolder, keysFolder, data);

            resultCompress.ThrowOnError();

            Assert.True(resultCompress.IsSuccess);
            Assert.NotEmpty(resultCompress.OperationBlocks.Select(i => i.Block));
            Assert.NotEmpty(resultCompress.OperationBlocks.Select(i => i.CommandResult));

            var decomp = new TestData {
                Directories = new List <DirectoryInfo> {
                    new DirectoryInfo(compressedFolder)
                }
            };

            OperationSummary resultDecompress = await Decompress(mode, decompressedFolder, keysFolder, decomp);

            resultDecompress.ThrowOnError();

            Assert.True(resultDecompress.IsSuccess);
            Assert.NotEmpty(resultDecompress.OperationBlocks.Select(i => i.Block));
            Assert.NotEmpty(resultDecompress.OperationBlocks.Select(i => i.CommandResult));

            FileInfo src = new DirectoryInfo(toCompressFolder).EnumerateFiles().FirstOrDefault();
            FileInfo dst = new DirectoryInfo(decompressedFolder).EnumerateFiles().FirstOrDefault();

            Assert.True(TestFileHelper.FilesAreEqual(src, dst));
        }
Esempio n. 11
0
        public static void AddTarget(
            string what,
            string where,
            bool compressed,
            CompressionAlgo algo,
            CompressionLevel level,
            DateTime start,
            TimeSpan interval)
        {
            if (HasTarget(what))
                throw new ArgumentException(nameof(what));

            // make sure there aren't any minutes or seconds
            interval = new TimeSpan(interval.Days, interval.Hours, 0, 0);

            var nextBackup = start;
            var now = DateTime.Now;
            while (nextBackup < now)
                nextBackup = nextBackup.Add(interval);

            targets.Add(new BackupTarget(what, where, compressed, algo, level, interval, start));
            SaveTargets();
        }
        private static IEnumerable <int> GetBenchmarkRatios(BenchmarkOption benchmarkOption, CompressionAlgo algo)
        {
            if (String.IsNullOrEmpty(benchmarkOption.Ratios))
            {
                return(Enumerable.Range(1, MaxRatio(algo)));
            }

            var ratios = UserDefinedRatios(benchmarkOption.Ratios, algo).ToList();

            return(Enumerable.Range(ratios.Min(), ratios.Max() - ratios.Min() + 1));
        }
Esempio n. 13
0
 private static Block GenerateDecompressBlock(FileInfo sourceFile, DirectoryInfo targetDirectory, CompressionAlgo algo)
 {
     return(new Block
     {
         OperationFolder = targetDirectory.FullName,
         Source = sourceFile.FullName,
         DestinationFolder = targetDirectory.FullName,
         ArchiveName = sourceFile.FullName,
         Algo = algo
     });
 }
 public static long Decompress(Stream from, Stream to,
     CompressionAlgo algo, Action<int, object> reportProgress) => decompressors[algo](from, to, reportProgress);
 public static long Compress(Stream from, Stream to, CompressionAlgo algo,
     CompressionLevel level, Action<int, object> reportProgress) => compressors[algo](from, to, level, reportProgress);
 public static bool TestCompression(Stream stream, CompressionAlgo algo,
     CompressionLevel level, Action<int, object> reportProgess, out long resultLength)
 {
     using (var temp = GetTempFileStream())
         return stream.Length > (resultLength = Compress(stream, temp, algo, level, reportProgess));
 }