public async Task SignatureBuilderAsyncXXHash_BuildsSignature()
        {
            // Arrange
            const int dataLength = 1037;
            var       data       = new byte[dataLength];

            new Random(RandomSeed).NextBytes(data);
            var dataStream      = new MemoryStream(data);
            var signatureStream = new MemoryStream();

            var progressReporter = Substitute.For <IProgress <ProgressReport> >();

            // Act
            var target = new SignatureBuilder
            {
                ProgressReport = progressReporter
            };
            await target.BuildAsync(dataStream, new SignatureWriter(signatureStream)).ConfigureAwait(false);

            // Assert
            CollectionAssert.AreEqual(xxhash1037TestSignature, signatureStream.ToArray());

            CommonAsserts.ValidateSignature(signatureStream, new XxHashAlgorithm(), Utils.GetMd5(data), new Adler32RollingChecksum());

            progressReporter.Received().Report(Arg.Any <ProgressReport>());
        }
Beispiel #2
0
        public int Execute(string[] commandLineArguments)
        {
            options.Parse(commandLineArguments);

            if (string.IsNullOrWhiteSpace(basisFilePath))
            {
                throw new OptionException("No basis file was specified", "basis-file");
            }

            basisFilePath = Path.GetFullPath(basisFilePath);

            var signatureBuilder = new SignatureBuilder();

            foreach (var config in configuration)
            {
                config(signatureBuilder);
            }

            if (!File.Exists(basisFilePath))
            {
                throw new FileNotFoundException("File not found: " + basisFilePath, basisFilePath);
            }

            if (string.IsNullOrWhiteSpace(signatureFilePath))
            {
                signatureFilePath = basisFilePath + ".octosig";
            }
            else
            {
                signatureFilePath = Path.GetFullPath(signatureFilePath);
                var sigDirectory = Path.GetDirectoryName(signatureFilePath);
                if (sigDirectory != null && !Directory.Exists(sigDirectory))
                {
                    Directory.CreateDirectory(sigDirectory);
                }
            }

            using (var basisStream = new FileStream(basisFilePath, FileMode.Open, FileAccess.Read, FileShare.Read))
                using (var signatureStream = new FileStream(signatureFilePath, FileMode.Create, FileAccess.Write, FileShare.Read))
                {
                    signatureBuilder.BuildAsync(basisStream, new SignatureWriter(signatureStream)).GetAwaiter().GetResult();
                }

            return(0);
        }
        public async Task SignatureBuilderAsyncXXHash_ForEmptyStream_BuildsSignature()
        {
            // Arrange
            var dataStream      = new MemoryStream();
            var signatureStream = new MemoryStream();

            var progressReporter = Substitute.For <IProgress <ProgressReport> >();

            // Act
            var target = new SignatureBuilder
            {
                ProgressReport = progressReporter
            };
            await target.BuildAsync(dataStream, new SignatureWriter(signatureStream)).ConfigureAwait(false);

            // Assert
            CommonAsserts.ValidateSignature(signatureStream, new XxHashAlgorithm(), Utils.GetMd5(dataStream.ToArray()), new Adler32RollingChecksum());

            progressReporter.Received().Report(Arg.Any <ProgressReport>());
        }
Beispiel #4
0
        public async Task SignatureBuilderAsyncSha1_ForRandomData_BuildsSignature(int numberOfBytes, short chunkSize)
        {
            // Arrange
            var data = new byte[numberOfBytes];

            new Random().NextBytes(data);
            var dataStream      = new MemoryStream(data);
            var signatureStream = new MemoryStream();

            var progressReporter = Substitute.For <IProgress <ProgressReport> >();

            // Act
            var target = new SignatureBuilder(SupportedAlgorithms.Hashing.Sha1(), SupportedAlgorithms.Checksum.Adler32Rolling())
            {
                ChunkSize      = chunkSize,
                ProgressReport = progressReporter
            };
            await target.BuildAsync(dataStream, new SignatureWriter(signatureStream)).ConfigureAwait(false);

            // Assert
            CommonAsserts.ValidateSignature(signatureStream, new HashAlgorithmWrapper("SHA1", SHA1.Create()), Utils.GetMd5(data), new Adler32RollingChecksum());

            progressReporter.Received().Report(Arg.Any <ProgressReport>());
        }
Beispiel #5
0
        private static async Task <(MemoryStream baseDataStream, MemoryStream baseSignatureStream, byte[] newData, MemoryStream newDataStream)> PrepareTestDataAsync(int baseNumberOfBytes, int newDataNumberOfBytes,
                                                                                                                                                                     short chunkSize, Hash.IRollingChecksum rollingChecksumAlg)
        {
            var baseData = new byte[baseNumberOfBytes];

            new Random().NextBytes(baseData);
            var baseDataStream      = new MemoryStream(baseData);
            var baseSignatureStream = new MemoryStream();

            var signatureBuilder = new SignatureBuilder(SupportedAlgorithms.Hashing.XxHash(), rollingChecksumAlg)
            {
                ChunkSize = chunkSize
            };
            await signatureBuilder.BuildAsync(baseDataStream, new SignatureWriter(baseSignatureStream)).ConfigureAwait(false);

            baseSignatureStream.Seek(0, SeekOrigin.Begin);

            var newData = new byte[newDataNumberOfBytes];

            new Random().NextBytes(newData);
            var newDataStream = new MemoryStream(newData);

            return(baseDataStream, baseSignatureStream, newData, newDataStream);
        }