public void FinishBackup_WhenDbContainsPartialHashes() { // Pst File is registered in Db but the hash table does not contains all hashes for the backup file // Arrange DeleteDb(); CopyPartialFile(); SUT _backupEngine = new SUT(_appSettings, _dbFilename); ClientDb _clientDb = new ClientDb(_dbFilename); _clientDb.RegisterNewPstFile(1, _pstFileToSave.SourcePath, Path.Combine(_destinationPath, _partialFilename)); Assert.IsTrue(_clientDb.IsPstFileRegistered(_pstFileToSave.SourcePath)); Assert.AreEqual(_clientDb.GetBackupFilePath(_pstFileToSave.SourcePath), Path.Combine(_destinationPath, _partialFilename), true); // Act _backupEngine.Backup((object)_pstFileToSave); DeleteFile(Path.Combine(_destinationPath, _pstFilename)); CopyInterruptedFile(); _clientDb.RenameBackupFile(_pstFileToSave.SourcePath, Path.Combine(_destinationPath, _partialFilename)); int remainsHashes = (int)(_clientDb.GetHashes(1).Count * 75 / 100); _clientDb.DeleteHashes(1, remainsHashes); _backupEngine.Backup((object)_pstFileToSave); // Assert Assert.IsTrue(_clientDb.IsPstFileRegistered(_pstFileToSave.SourcePath)); Assert.IsTrue(AreFilesEquals(_pstFileToSave.SourcePath, Path.Combine(_destinationPath, _pstFilename))); Assert.AreEqual(Path.Combine(_destinationPath, _pstFilename), _clientDb.GetBackupFilePath(_pstFileToSave.SourcePath), true); DeleteFile(Path.Combine(_destinationPath, _pstFilename)); }
public override void Backup(object objPstFileToSave) { try { PSTRegistryEntry pstFileToSave = (PSTRegistryEntry)objPstFileToSave; BackupResultInfo backupResult = new BackupResultInfo(pstFileToSave); backupResult.IsCompressed = false; Logger.Write(30011, "Starting to backup " + pstFileToSave.SourcePath + " to file system with differential method", Logger.MessageSeverity.Debug); int fileId = CheckPrerequisitesForSmbBackup(pstFileToSave.SourcePath); string backupFile = _clientDb.GetBackupFilePath(pstFileToSave.SourcePath); List <string> remoteChunks = _clientDb.GetHashes(fileId); backupResult.ChunkCount = SynchonizeLocalAndRemoteFile(fileId, pstFileToSave.SourcePath, backupFile, remoteChunks); string backupFileNewName = FileSystem.GetNewName(backupFile); FileSystem.RenameFile(backupFile, backupFileNewName); _clientDb.RenameBackupFile(pstFileToSave.SourcePath, backupFileNewName); pstFileToSave.LastSuccessfulBackup = DateTime.Now; pstFileToSave.Save(); backupResult.RemotePath = backupFileNewName; backupResult.CompressedSize = 0; backupResult.ErrorCode = BackupResultInfo.BackupResult.Success; backupResult.ErrorMessage = String.Empty; backupResult.EndTime = DateTime.UtcNow; Logger.Write(30012, pstFileToSave + " have been successfuly saved", Logger.MessageSeverity.Debug); if (!base.IsCancelRequired) { BackupFinished(new BackupFinishedEventArgs(pstFileToSave, backupResult)); } } catch (Exception ex) { Logger.Write(20024, "An error occurs while backuping a PST file with differential method\r\n" + ex.Message, Logger.MessageSeverity.Error, System.Diagnostics.EventLogEntryType.Error); } }