public async Task DeleteBeforeHashing() { using var tmpDir = TempDir.Create(); using var engine = new ClientEngine(new EngineSettingsBuilder(EngineSettingsBuilder.CreateForTests()) { AutoSaveLoadFastResume = true, CacheDirectory = tmpDir.Path, }.ToSettings()); var first = new TaskCompletionSource <object> (); var second = new TaskCompletionSource <object> (); var torrent = TestRig.CreatePrivate(); var path = engine.Settings.GetFastResumePath(torrent.InfoHash); Directory.CreateDirectory(Path.GetDirectoryName(path)); File.WriteAllBytes(path, new FastResume(torrent.InfoHash, new MutableBitField(torrent.Pieces.Count).SetAll(true), new MutableBitField(torrent.Pieces.Count)).Encode()); var manager = await engine.AddAsync(torrent, "savedir"); await engine.ChangePieceWriterAsync(new TestWriter { FilesThatExist = new System.Collections.Generic.List <ITorrentFileInfo> (manager.Files) }); Assert.IsTrue(manager.HashChecked); manager.Engine.DiskManager.GetHashAsyncOverride = (torrent, pieceIndex, dest) => { first.SetResult(null); second.Task.Wait(); new byte[20].CopyTo(dest); return(Task.FromResult(true)); }; var hashCheckTask = manager.HashCheckAsync(false); await first.Task.WithTimeout(); Assert.IsFalse(File.Exists(path)); second.SetResult(null); await hashCheckTask.WithTimeout(); Assert.IsTrue(File.Exists(path)); }