コード例 #1
0
        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);
        }