Esempio n. 1
0
        /// <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);
                }
            }
        }
Esempio n. 2
0
        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);
        }