public void L29_Service_Backup_Cancellation() { SearchService.InitializeForTest(new BackupManager_for_CancellationTest()); var service = new SearchService(); BackupResponse response; var responses = new List <BackupResponse>(); responses.Add(response = service.Backup(null, null)); var backupInfo = response.Current; Assert.IsNotNull(backupInfo); Assert.AreEqual(BackupState.Started, response.State); var timeout = TimeSpan.FromSeconds(5.0d); var timer = Stopwatch.StartNew(); while (timer.Elapsed < timeout) { Thread.Sleep(400); responses.Add(response = service.QueryBackup()); if (response.State != BackupState.Executing) { break; } } Thread.Sleep(400); responses.Add(service.CancelBackup()); Thread.Sleep(400); responses.Add(service.QueryBackup()); var states = responses.Select(r => r.State).Distinct().ToArray(); var bytes = responses.Select(r => (r.Current ?? r.History[0]).CopiedBytes).Distinct().ToArray(); var files = responses.Select(r => (r.Current ?? r.History[0]).CopiedFiles).Distinct().ToArray(); var names = responses.Select(r => (r.Current ?? r.History[0]).CurrentlyCopiedFile ?? "").Distinct().ToArray(); var messages = responses.Select(r => (r.Current ?? r.History[0]).Message ?? "").Distinct().ToArray(); var count = files.Length; var expectedStates = new[] { BackupState.Started, BackupState.Executing, BackupState.CancelRequested, BackupState.Canceled }; var expectedFiles = Enumerable.Range(0, count).ToArray(); var expectedBytes = expectedFiles.Select(x => x * 42L).ToArray(); var expectedNames = (new[] { "" }).Union(expectedFiles.Select(x => $"File{x + 1}")).ToArray(); AssertSequenceEqual(expectedStates, states); AssertSequenceEqual(expectedBytes, bytes); AssertSequenceEqual(expectedFiles, files); AssertSequenceEqual(expectedNames, names); }
public void L29_Service_Backup_Progress() { SearchService.InitializeForTest(new BackupManager_for_ProgressTest()); var service = new SearchService(); BackupResponse response; var responses = new List <BackupResponse>(); responses.Add(response = service.Backup(null, null)); var backupInfo = response.Current; Assert.IsNotNull(backupInfo); Assert.AreEqual(BackupState.Started, response.State); var timeout = TimeSpan.FromSeconds(5.0d); var timer = Stopwatch.StartNew(); while (timer.Elapsed < timeout) { Thread.Sleep(400); responses.Add(response = service.QueryBackup()); if (response.State != BackupState.Executing) { break; } } var states = responses.Select(r => r.State).Distinct().ToArray(); var bytes = responses.Select(r => (r.Current ?? r.History[0]).CopiedBytes).Distinct().ToArray(); var files = responses.Select(r => (r.Current ?? r.History[0]).CopiedFiles).Distinct().ToArray(); var names = responses.Select(r => (r.Current ?? r.History[0]).CurrentlyCopiedFile ?? "").Distinct().ToArray(); AssertSequenceEqual(new[] { BackupState.Started, BackupState.Executing, BackupState.Finished }, states); AssertSequenceEqual(new long[] { 0, 42, 2 * 42, 3 * 42 }, bytes); AssertSequenceEqual(new [] { 0, 1, 2, 3 }, files); AssertSequenceEqual(new [] { "", "File1", "File2", "File3" }, names); }
public void L29_Service_Backup_OnlyOne() { SearchService.InitializeForTest(new BackupManager_for_OnlyOneTest()); var service = new SearchService(); var tasks = Enumerable.Range(0, 5) .Select(x => Task.Run(() => service.Backup(null, null))) .ToArray(); // ReSharper disable once CoVariantArrayConversion Task.WaitAll(tasks); var completed = new string(tasks .Select(t => (char)((int)'0' + (int)t.Result.State)) .OrderBy(x => x) .ToArray()); var faulted = new string(tasks .Select(t => t.IsFaulted ? 'Y' : 'n') .ToArray()); // 1 = Started, 2 = AlreadyStarted, Assert.AreEqual("12222", completed); Assert.AreEqual("nnnnn", faulted); }