/// <summary> /// ファイル情報とファイルを削除する /// </summary> /// <param name="file">削除ファイル</param> /// <returns>true: 成功、false:失敗</returns> private bool DeleteFile(DtDeviceFile file) { DeleteFileStatus status = DeleteFileStatus.DeleteDtDeviceFile; try { // Sq1.2: 一定期間より古いファイル情報を削除する if (_dtDeviceFileRepository.DeleteDtDeviceFile(file.Sid) == null) { // 削除対象を取得してから、削除するまでの間に、別口で削除された場合ここにくる。 // レアケースのため意図しないサーバーエラーとする。ただし何があったかは分かるように例外を入れておく。 _logger.Error(new RmsException(string.Format("削除対象のファイル情報が存在しません。(SID = {0})", file.Sid)), nameof(Resources.CO_BLC_BLC_001)); return(false); } status = DeleteFileStatus.Delete; var archiveFile = ArchiveFile.From(file); // Sq1.3: 一定期間より古いファイルを削除する _primaryBlobRepository.Delete(archiveFile); _logger.Info(nameof(Resources.CO_BLC_BLC_007), new object[] { file.Container, file.FilePath, file.UpdateDatetime }); return(true); } catch (Exception e) { switch (status) { case DeleteFileStatus.DeleteDtDeviceFile: // ログ出力して次ファイルを処理 _logger.Warn(e, nameof(Resources.CO_BLC_BLC_005), new object[] { file.Container, file.FilePath, file.UpdateDatetime }); return(false); case DeleteFileStatus.Delete: default: // ログ出力して次ファイルを処理 // 削除に失敗した場合は、監視運用で処理する _logger.Warn(e, nameof(Resources.CO_BLC_BLC_006), new object[] { file.Container, file.FilePath, file.UpdateDatetime }); return(false); } } }
public void DeleteTest(string no, string in_InitialBlobFileSet, string in_TargetBlobs, string expected_BlobFileSet, string expected_ExceptionType, string expected_ExceptionMessage, string remarks) { // DI DependencyInjection(); // テストデータ準備 { FileInfo[] initial_files = new DirectoryInfo(in_InitialBlobFileSet).GetFiles("*", SearchOption.AllDirectories); foreach (FileInfo file in initial_files) { primaryBlob.Client.Upload(TargetContainerName1, new DirectoryInfo(in_InitialBlobFileSet), file); } } // 期待値 DirectoryInfo expectedDir = new DirectoryInfo(expected_BlobFileSet); string[] expectedFiles = expectedDir.Exists ? expectedDir.GetFiles("*", SearchOption.AllDirectories).Select(x => x.FullName).OrderBy(x => x).ToArray() : new string[] { }; string[] expected_filenames = expectedFiles.Select(x => x.Replace(expectedDir.FullName, string.Empty)).ToArray(); string[] expected_filecontents = expectedFiles.Select(x => File.ReadAllText(x)).ToArray(); string expected_exceptiontype = string.IsNullOrEmpty(expected_ExceptionType) ? null : expected_ExceptionType; string expected_exceptionmessage = string.IsNullOrEmpty(expected_ExceptionMessage) ? null : expected_ExceptionMessage; // 結果格納先 Exception actualException = null; string actualBlobFileSet = Path.Combine(TestResultRootDir, string.Format("{0}", no), "Delete"); // テスト実行 try { foreach (string targetBlob in in_TargetBlobs.Split(",")) { target.Delete(new ArchiveFile() { ContainerName = TargetContainerName1, FilePath = targetBlob }); } } catch (AggregateException ex) { actualException = ex.InnerException; } catch (Exception ex) { actualException = ex; } // テスト結果 DirectoryInfo actualDir = new DirectoryInfo(actualBlobFileSet); string[] actualFiles = primaryBlob.Client.GetFiles(TargetContainerName1, actualDir).OrderBy(x => x).ToArray(); string[] actual_filenames = actualFiles.Select(x => x.Replace(actualDir.FullName, string.Empty)).ToArray(); string[] actual_filecontents = actualFiles.Select(x => File.ReadAllText(x)).ToArray(); string actual_exceptiontype = actualException?.GetType()?.FullName; string actual_exceptionmessage = actualException?.Message; // 確認 CollectionAssert.AreEqual(expected_filenames, actual_filenames); CollectionAssert.AreEqual(expected_filecontents, actual_filecontents); Assert.AreEqual(expected_exceptiontype, actual_exceptiontype); Assert.AreEqual(expected_exceptionmessage, actual_exceptionmessage); }