From 227a61653d3c5ad2d20975bd2225b35dce7fda55 Mon Sep 17 00:00:00 2001 From: Haesu Gwon Date: Wed, 10 Apr 2019 17:36:19 +0900 Subject: [PATCH] [MediaContent][TCSACR-239] Change Delete() method behavior to remove the risk of DB inconsistency Change-Id: If04a68e5eca8dc8db47fc6c2d8cdd3a8d2419511 --- .../testcase/TSCountArguments.cs | 4 + .../testcase/TSMediaDatabase.cs | 3 +- .../testcase/TSMediaInfoCommand.cs | 29 +++++- .../testcase/TSMediaInfoCommand_DetectFace.cs | 28 +++++- .../testcase/TSSelectArguments.cs | 3 + .../testcase/support/BookmarkTestBase.cs | 6 +- .../support/MediaInfoCommandTestBase.cs | 2 + .../testcase/support/TestBase.cs | 95 +++++++++++++++---- .../testcase/support/TestConstants.cs | 22 ++--- .../testcase/support/TestSupport.cs | 71 ++++++++++++++ 10 files changed, 220 insertions(+), 43 deletions(-) mode change 100755 => 100644 tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSCountArguments.cs mode change 100755 => 100644 tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSMediaDatabase.cs mode change 100755 => 100644 tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSMediaInfoCommand.cs mode change 100755 => 100644 tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSSelectArguments.cs mode change 100755 => 100644 tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/BookmarkTestBase.cs mode change 100755 => 100644 tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/MediaInfoCommandTestBase.cs mode change 100755 => 100644 tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/TestBase.cs mode change 100755 => 100644 tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/TestSupport.cs diff --git a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSCountArguments.cs b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSCountArguments.cs old mode 100755 new mode 100644 index 00347d41b..4c9798f42 --- a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSCountArguments.cs +++ b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSCountArguments.cs @@ -1,4 +1,5 @@ using NUnit.Framework; +using System.IO; namespace Tizen.Content.MediaContent.Tests { @@ -13,6 +14,9 @@ namespace Tizen.Content.MediaContent.Tests public void SetUp() { _mediaInfoCmd = new MediaInfoCommand(_database); + + TestSupport.ClearDatabase(_database, TestConstants.AudioFile, true); + _mediaInfo = _mediaInfoCmd.Add(TestConstants.AudioFile); var bookmarkCmd = new BookmarkCommand(_database); diff --git a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSMediaDatabase.cs b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSMediaDatabase.cs old mode 100755 new mode 100644 index ade8eef1e..8bb6e0ac9 --- a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSMediaDatabase.cs +++ b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSMediaDatabase.cs @@ -118,8 +118,9 @@ namespace Tizen.Content.MediaContent.Tests [Property("AUTHOR", "JungHo Kim, jhyo.kim@samsung.com")] public async Task MediaInfoUpdated_INSERT_CHECK() { + TestSupport.ClearDatabase(_database, TestConstants.ImageFile, true); + var cmd = new MediaInfoCommand(_database); - cmd.Delete(cmd.Add(TestConstants.ImageFile).Id); TaskCompletionSource tcs = new TaskCompletionSource(); diff --git a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSMediaInfoCommand.cs b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSMediaInfoCommand.cs old mode 100755 new mode 100644 index 64762e137..e3ddc550c --- a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSMediaInfoCommand.cs +++ b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSMediaInfoCommand.cs @@ -562,7 +562,16 @@ namespace Tizen.Content.MediaContent.Tests [Property("AUTHOR", "JungHo Kim, jhyo.kim@samsung.com")] public void Delete_RETURN() { - Assert.That(() => _cmd.Delete(_mediaInfo.Id), Is.True); + var path = TestSupport.BackupFileWithMediaId(_database, _mediaInfo.Id); + + try + { + Assert.That(() => _cmd.Delete(_mediaInfo.Id), Is.True); + } + finally + { + TestSupport.RestoreFile(path); + } } [Test] @@ -1090,7 +1099,11 @@ namespace Tizen.Content.MediaContent.Tests { var dest = TestConstants.RootPath + "/temp.jpg"; File.Copy(TestConstants.ImageFile, dest, true); - _cmd.Delete(_cmd.Add(dest).Id); + + var mediaId = _cmd.Add(dest).Id; + var path = TestSupport.ClearDatabaseWithMediaId(_database, mediaId); + _cmd.Delete(mediaId); + TestSupport.RestoreFile(path); Assert.That(_cmd.Move(_mediaInfo.Id, dest), Is.True); } @@ -1253,8 +1266,17 @@ namespace Tizen.Content.MediaContent.Tests [Property("AUTHOR", "JungHo Kim, jhyo.kim@samsung.com")] public void CreateThumbnailAsync_THROWS_IF_MEDIA_DELETED() { + var path = TestSupport.ClearDatabaseWithMediaId(_database, _mediaInfo.Id); _cmd.Delete(_mediaInfo.Id); - Assert.That(() => _cmd.CreateThumbnailAsync(_mediaInfo.Id), Throws.ArgumentException); + + try + { + Assert.That(() => _cmd.CreateThumbnailAsync(_mediaInfo.Id), Throws.ArgumentException); + } + finally + { + TestSupport.RestoreFile(path); + } } [Test] @@ -1377,6 +1399,7 @@ namespace Tizen.Content.MediaContent.Tests [Property("AUTHOR", "JungHo Kim, jhyo.kim@samsung.com")] public void CreateThumbnailAsync_WITH_CANCELLATION_THROWS_IF_MEDIA_NOT_EXIST() { + TestSupport.ClearDatabaseWithMediaId(_database, _mediaInfo.Id, true); _cmd.Delete(_mediaInfo.Id); Assert.That(() => _cmd.CreateThumbnailAsync(_mediaInfo.Id, CancellationToken.None), Throws.ArgumentException); diff --git a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSMediaInfoCommand_DetectFace.cs b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSMediaInfoCommand_DetectFace.cs index 9bf6f3f63..2de039508 100644 --- a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSMediaInfoCommand_DetectFace.cs +++ b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSMediaInfoCommand_DetectFace.cs @@ -130,8 +130,17 @@ namespace Tizen.Content.MediaContent.Tests [Property("AUTHOR", "JungHo Kim, jhyo.kim@samsung.com")] public void DetectFaceAsync_THROWS_IF_MEDIA_DELETED() { - _cmd.Delete(_mediaInfo.Id); - Assert.That(() => _cmd.DetectFaceAsync(_mediaInfo.Id), Throws.ArgumentException); + var path = TestSupport.ClearDatabaseWithMediaId(_database, _mediaInfo.Id); + + try + { + _cmd.Delete(_mediaInfo.Id); + Assert.That(() => _cmd.DetectFaceAsync(_mediaInfo.Id), Throws.ArgumentException); + } + finally + { + TestSupport.RestoreFile(path); + } } [Test] @@ -256,9 +265,18 @@ namespace Tizen.Content.MediaContent.Tests [Property("AUTHOR", "JungHo Kim, jhyo.kim@samsung.com")] public void DetectFaceAsync_WITH_CANCELLATION_THROWS_IF_MEDIA_NOT_EXIST() { - _cmd.Delete(_mediaInfo.Id); - Assert.That(() => _cmd.DetectFaceAsync(_mediaInfo.Id, CancellationToken.None), - Throws.ArgumentException); + var path = TestSupport.ClearDatabaseWithMediaId(_database, _mediaInfo.Id); + + try + { + _cmd.Delete(_mediaInfo.Id); + Assert.That(() => _cmd.DetectFaceAsync(_mediaInfo.Id, CancellationToken.None), + Throws.ArgumentException); + } + finally + { + TestSupport.RestoreFile(path); + } } [Test] diff --git a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSSelectArguments.cs b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSSelectArguments.cs old mode 100755 new mode 100644 index c07a83364..d8169813b --- a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSSelectArguments.cs +++ b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/TSSelectArguments.cs @@ -14,6 +14,9 @@ namespace Tizen.Content.MediaContent.Tests public void SetUp() { _mediaInfoCmd = new MediaInfoCommand(_database); + + TestSupport.ClearDatabase(_database, TestConstants.AudioFile, true); + _mediaInfo = _mediaInfoCmd.Add(TestConstants.AudioFile); var bookmarkCmd = new BookmarkCommand(_database); diff --git a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/BookmarkTestBase.cs b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/BookmarkTestBase.cs old mode 100755 new mode 100644 index fbad93955..78d304a6e --- a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/BookmarkTestBase.cs +++ b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/BookmarkTestBase.cs @@ -14,7 +14,11 @@ namespace Tizen.Content.MediaContent.Tests [SetUp] public new void SetUpBase() { - _mediaInfo = new MediaInfoCommand(_database).Add(TestConstants.AudioFile); + var mediaCmd = new MediaInfoCommand(_database); + + TestSupport.ClearDatabase(_database, TestConstants.AudioFile, true); + + _mediaInfo = mediaCmd.Add(TestConstants.AudioFile); _bookmark = new BookmarkCommand(_database). Insert(_mediaInfo.Id, Offset, BookmarkName, ThumbnailPath); diff --git a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/MediaInfoCommandTestBase.cs b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/MediaInfoCommandTestBase.cs old mode 100755 new mode 100644 index efcf212cb..0d652e747 --- a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/MediaInfoCommandTestBase.cs +++ b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/MediaInfoCommandTestBase.cs @@ -13,6 +13,8 @@ namespace Tizen.Content.MediaContent.Tests { _cmd = new MediaInfoCommand(_database); + TestSupport.ClearDatabase(_database, TestConstants.FaceImageFile, true); + _mediaInfo = _cmd.Add(TestConstants.FaceImageFile); } } diff --git a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/TestBase.cs b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/TestBase.cs old mode 100755 new mode 100644 index 63dcfdba4..14e99fcdd --- a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/TestBase.cs +++ b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/TestBase.cs @@ -1,3 +1,5 @@ +using System.IO; +using System.Collections.Generic; using NUnit.Framework; namespace Tizen.Content.MediaContent.Tests @@ -6,26 +8,6 @@ namespace Tizen.Content.MediaContent.Tests { protected MediaDatabase _database; - private void ClearDatabase() - { - var mediaInfoCmd = new MediaInfoCommand(_database); - var reader = mediaInfoCmd.SelectMedia(); - - while (reader.Read()) - { - mediaInfoCmd.Delete(reader.Current.Id); - } - - var tagCmd = new TagCommand(_database); - - var tagReader = tagCmd.Select(); - - while (tagReader.Read()) - { - tagCmd.Delete(tagReader.Current.Id); - } - } - [SetUp] public void SetUpBase() { @@ -45,5 +27,78 @@ namespace Tizen.Content.MediaContent.Tests { _database.Dispose(); } + + private void ClearDatabase() + { + var mediaInfoCmd = new MediaInfoCommand(_database); + + var filter = new SelectArguments + { + FilterExpression = $"{MediaInfoColumns.Path}='{TestConstants.RootPath}'" + }; + + var reader = mediaInfoCmd.SelectMedia(filter); + + BackupTestFiles(); + + try + { + while (reader.Read()) + { + mediaInfoCmd.Delete(reader.Current.Id); + } + + var tagCmd = new TagCommand(_database); + + var tagReader = tagCmd.Select(); + + while (tagReader.Read()) + { + tagCmd.Delete(tagReader.Current.Id); + } + } + finally + { + RestoreTestFiles(); + } + } + + private void BackupTestFiles() + { + var _testFiles = new Dictionary + { + { TestConstants.AudioFile, TestConstants.AudioFileBackup}, + { TestConstants.VideoFile, TestConstants.VideoFileBackup }, + { TestConstants.ImageFile, TestConstants.ImageFileBackup }, + { TestConstants.ImageFileForFolder, TestConstants.ImageFileForFolderBackup } + }; + + foreach (var file in _testFiles) + { + if (File.Exists(file.Key)) + { + File.Move(file.Key, file.Value); + } + } + } + + private void RestoreTestFiles() + { + var _testFilesBackup = new Dictionary + { + { TestConstants.AudioFileBackup, TestConstants.AudioFile}, + { TestConstants.VideoFileBackup, TestConstants.VideoFile }, + { TestConstants.ImageFileBackup, TestConstants.ImageFile }, + { TestConstants.ImageFileForFolderBackup, TestConstants.ImageFileForFolder } + }; + + foreach (var file in _testFilesBackup) + { + if (File.Exists(file.Key)) + { + File.Move(file.Key, file.Value); + } + } + } } } diff --git a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/TestConstants.cs b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/TestConstants.cs index 9b104ad9b..49b8296d9 100644 --- a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/TestConstants.cs +++ b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/TestConstants.cs @@ -13,33 +13,29 @@ namespace Tizen.Content.MediaContent.Tests StorageManager.Storages.Where(s => s.StorageType == StorageArea.External).FirstOrDefault(); internal static readonly string ImageFileName = "image.jpg"; - internal static readonly string WavFile = RootPath + "/test.wav"; - internal static readonly string ImageFile = RootPath + "/image.jpg"; - internal static readonly string FaceImageFile = RootPath + "/face_image.jpg"; - internal static readonly string FaceImageFileUnSupported = RootPath + "/face_image_unsupported.gif"; - internal static readonly string AudioFile = RootPath + "/sound.mp3"; - internal static readonly string VideoFile = RootPath + "/movie.mp4"; - internal static readonly string PlaylistFile = RootPath + "/tmp.m3u"; - internal static readonly string FolderPath = RootPath + "/test"; - internal static readonly string ImageFileForFolder = FolderPath + "/test.jpg"; - internal static readonly string IgnorePath = RootPath + "/ignore"; - internal static readonly string HiddenPath = RootPath + "/.hidden"; - internal static readonly string OtherPath = RootPath + "/other"; - internal static readonly string OtherFile = OtherPath + "/other.txt"; + internal static readonly string WavFileBackup = RootPath + "/test.bak"; + internal static readonly string ImageFileBackup = RootPath + "/image.bak"; + internal static readonly string FaceImageFileBackup = RootPath + "/face_image.bak"; + internal static readonly string AudioFileBackup = RootPath + "/sound.bak"; + internal static readonly string VideoFileBackup = RootPath + "/movie.bak"; + internal static readonly string PlaylistFileBackup = RootPath + "/tmp.bak"; + internal static readonly string ImageFileForFolderBackup = FolderPath + "/test.bak"; + internal static readonly string OtherFileBackup = OtherPath + "/other.bak"; + internal const string OthersFeature = "http://tizen.org/feature/content.scanning.others"; } } diff --git a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/TestSupport.cs b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/TestSupport.cs old mode 100755 new mode 100644 index d4610eeef..4b62f98c6 --- a/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/TestSupport.cs +++ b/tct-suite-vs/Tizen.Mediacontent.Tests/testcase/support/TestSupport.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.IO; using System.Threading.Tasks; using Tizen.System; @@ -40,5 +41,75 @@ namespace Tizen.Content.MediaContent.Tests { return Information.TryGetValue(Feature, out bool isSupported) ? isSupported : false; } + + public static void ClearDatabase(MediaDatabase database, string path, bool needRestore = false) + { + var mediaInfoCmd = new MediaInfoCommand(database); + + var filter = new SelectArguments + { + FilterExpression = $"{MediaInfoColumns.Path}='{path}'" + }; + + var reader = mediaInfoCmd.SelectMedia(filter); + + if (File.Exists(path)) + { + File.Move(path, path + ".bak"); + } + + while (reader.Read()) + { + mediaInfoCmd.Delete(reader.Current.Id); + } + + if (needRestore) + { + RestoreFile(path); + } + } + + public static string ClearDatabaseWithMediaId(MediaDatabase database, string mediaId, bool needRestore = false) + { + var mediaInfoCmd = new MediaInfoCommand(database); + + var reader = mediaInfoCmd.SelectMedia(mediaId); + string path = reader.Path; + + if (File.Exists(path)) + { + File.Move(path, path + ".bak"); + } + + mediaInfoCmd.Delete(reader.Id); + + if (needRestore) + { + RestoreFile(path); + } + + return path; + } + + public static string BackupFileWithMediaId(MediaDatabase database, string mediaId) + { + var mediaInfoCmd = new MediaInfoCommand(database); + + var reader = mediaInfoCmd.SelectMedia(mediaId); + string path = reader.Path; + + if (File.Exists(path)) + { + File.Move(path, path + ".bak"); + } + + return path; + } + + public static void RestoreFile(string path) + { + Log.Info("Tizen.Mediacontent.Tests", path + ".bak"); + File.Move(path + ".bak", path); + } } } -- 2.34.1