public void CanSyncSubA_ModifyTest()
        {
            this.Execute("/sub/a", async() =>
            {
                var driveItem = Utils.DriveItemPool["/sub/a1"].MemberwiseClone();

                using (var stream = new MemoryStream(Encoding.UTF8.GetBytes("New content.")))
                {
                    driveItem.Content = stream;
                    driveItem.FileSystemInfo.LastModifiedDateTime = DateTime.UtcNow;

                    /* modify file */
                    _logger.LogInformation("TEST: Modify file.");
                    await _driveHive.LocalDrive.CreateOrUpdateAsync(driveItem);
                }
            },
                         () =>
            {
                var hashAlgorithm = new QuickXorHash();

                Assert.True(File.Exists("/sub/a".ToAbsolutePath(_driveHive.LocalDrivePath)), "File does not exist.");
                Assert.True(File.Exists("/sub/a".ToAbsolutePath(_driveHive.RemoteDrivePath)), "File does not exist.");

                using (var stream = File.OpenRead("/sub/a".ToAbsolutePath(_driveHive.RemoteDrivePath)))
                {
                    var actual   = Convert.ToBase64String(hashAlgorithm.ComputeHash(stream));
                    var expected = Convert.ToBase64String(hashAlgorithm.ComputeHash(Encoding.UTF8.GetBytes("New content.")));

                    Assert.True(actual == expected, "The hashes are not equal.");
                }
            }, syncId: 2);
        }
Пример #2
0
        private static DriveItem CreateDriveItem(string itemPath, int version)
        {
            var name       = Path.GetFileName(itemPath);
            var folderPath = $"{Path.GetDirectoryName(itemPath)}".NormalizeSlashes();

            var hashAlgorithm = new QuickXorHash();
            var lastModified  = new DateTime(2019, 01, 01, version, 00, 00, DateTimeKind.Utc);
            var content       = $"{itemPath} v{version}".ToMemorySteam();
            var hash          = Convert.ToBase64String(hashAlgorithm.ComputeHash(content));

            return(new DriveItem
            {
                File = new Microsoft.Graph.File()
                {
                    Hashes = new Hashes()
                    {
                        QuickXorHash = hash
                    }
                },
                Name = name,
                Content = content,
                FileSystemInfo = new Microsoft.Graph.FileSystemInfo {
                    LastModifiedDateTime = lastModified
                },
                ParentReference = new ItemReference()
                {
                    Path = $"{CryptoDriveConstants.PathPrefix}{folderPath}"
                }
            });
        }
Пример #3
0
        public static void CompareFiles(string fileName, string versionName, string basePath)
        {
            var hashAlgorithm = new QuickXorHash();

            using (var stream = File.OpenRead(fileName.ToAbsolutePath(basePath)))
            {
                var actual   = Convert.ToBase64String(hashAlgorithm.ComputeHash(stream));
                var expected = Utils.DriveItemPool[versionName].QuickXorHash();

                Assert.True(actual == expected, "The hashes are not equal.");
            }
        }
Пример #4
0
        public void CanSyncDTest()
        {
            this.Execute("/d", () =>
            {
                var hashAlgorithm = new QuickXorHash();

                Assert.True(File.Exists("/d".ToAbsolutePath(_driveHive.LocalDrivePath)), "File does not exist.");
                Assert.True(File.Exists("/d".ToAbsolutePath(_driveHive.RemoteDrivePath)), "File does not exist.");

                using (var stream = File.OpenRead("/d".ToAbsolutePath(_driveHive.LocalDrivePath)))
                {
                    Assert.True(Convert.ToBase64String(hashAlgorithm.ComputeHash(stream)) == Utils.DriveItemPool["/d1"].QuickXorHash());
                }
            });
        }
        public bool Equals(DriveFile other)
        {
            if (other == null)
            {
                return(false);
            }

            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            return(Id.Equals(other.Id, StringComparison.InvariantCultureIgnoreCase) &&
                   Name.Equals(other.Name, StringComparison.InvariantCultureIgnoreCase) &&
                   FullName.Equals(other.FullName, StringComparison.InvariantCultureIgnoreCase) &&
                   QuickXorHash.Equals(other.QuickXorHash, StringComparison.InvariantCultureIgnoreCase) &&
                   SizeInBytes == other.SizeInBytes);
        }
        public async Task ExecuteAsync(DriveFile driveFile)
        {
            string   localFullName = Path.Combine(_configuration["LocalRoot"], driveFile.FullName);
            FileInfo file          = new FileInfo(localFullName);

            if (file.Exists && file.Length == driveFile.SizeInBytes)
            {
                byte[] quickXorHashBytes;
                await using (FileStream inputStream = new FileStream(file.FullName, FileMode.Open))
                {
                    using HashAlgorithm algorithm = new QuickXorHash();
                    quickXorHashBytes             = CalculateHash(inputStream, algorithm);
                }

                string quickXorHash = Convert.ToBase64String(quickXorHashBytes);
                if (quickXorHash.Equals(driveFile.QuickXorHash, StringComparison.InvariantCultureIgnoreCase))
                {
                    file.Delete();
                }
            }
        }