diff --git a/src/BackupChain.cs b/src/BackupChain.cs index 4d85f29..778f297 100755 --- a/src/BackupChain.cs +++ b/src/BackupChain.cs @@ -98,22 +98,8 @@ private static IEnumerable NextLogBackup(IEnumerable backupOrder, string databaseName var restore = new Restore { Database = databaseName, NoRecovery = true }; foreach(var backup in backupOrder) { - var device = BackupFileTools.IsUrl(backup.PhysicalDeviceName) ? DeviceType.Url : DeviceType.File; + var device = BackupFileTools.IsValidFileUrl(backup.PhysicalDeviceName) ? DeviceType.Url : DeviceType.File; var backupDeviceItem = new BackupDeviceItem(backup.PhysicalDeviceName, device); if(_credentialName != null && device == DeviceType.Url) backupDeviceItem.CredentialName = _credentialName; @@ -207,7 +207,7 @@ private void Backup(Backup backup, string backupDirectoryPathQuery, string datab var backupDirectory = BackupDirectoryOrDefault(backupDirectoryPathQuery); var filePath = $"{backupDirectory}/{databaseName}_backup_{DateTime.Now.ToString("yyyy_MM_dd_hhmmss_fff")}.{BackupFileTools.BackupTypeToExtension(type)}"; - var deviceType = BackupFileTools.IsUrl(filePath) ? DeviceType.Url : DeviceType.File; + var deviceType = BackupFileTools.IsValidFileUrl(filePath) ? DeviceType.Url : DeviceType.File; var bdi = new BackupDeviceItem(filePath, deviceType); if(_credentialName != null && deviceType == DeviceType.Url) diff --git a/tests/AgDatabaseMove.Unit/FileToolsTest.cs b/tests/AgDatabaseMove.Unit/FileToolsTest.cs index 97453ce..20d7a52 100755 --- a/tests/AgDatabaseMove.Unit/FileToolsTest.cs +++ b/tests/AgDatabaseMove.Unit/FileToolsTest.cs @@ -7,38 +7,39 @@ namespace AgDatabaseMove.Unit public class BackupFileToolsTest { - public static IEnumerable UrlFileExamples => new List { - new object[] { "https://hello/a.bak" }, - new object[] { "https://hello/a.full" }, - new object[] { "https://storage-account.blob.core.windows.net/container/file.trn" }, - new object[] { "https://hello/a.diff" }, - new object[] { "https://a.diff" }, - new object[] { "https://1/2/3/4/5/a.diff" }, - new object[] { "https://storage-account.blob.core.windows.net/container/file.bad" }, - new object[] - { "https://storage-account.blob.core.windows.net/container/sql/db_name/backup_2020_09_02_170003_697.trn" }, - new object[] { "http://hello/a.bak" } - }; - - public static IEnumerable NonUrlFileExamples => new List { - new object[] { @"c:\hello\a.bak" }, - new object[] { @"\\abc\hello/a.bak" }, - new object[] { "https://storage-account.blob.core.windows.net/container" }, - new object[] { "http://storage-account.blob.core.windows.net/container" } - }; [Theory] - [MemberData(nameof(UrlFileExamples))] - public void UrlFilesAreUrl(string file) + [InlineData(@"https://hello/a.bak")] + [InlineData(@"https://hello/a.full")] + [InlineData(@"https://storage-account.blob.core.windows.net/container/file.trn")] + [InlineData(@"https://hello/a.diff")] + [InlineData(@"https://1/2/3/4/5/a.diff")] + [InlineData(@"https://storage-account.blob.core.windows.net/container/file.bad")] + [InlineData(@"https://storage-account.blob.core.windows.net/container/sql/db_name/backup_2020_09_02_170003_697.trn")] + [InlineData(@"http://a.bak")] + [InlineData(@"\\UNC\syntax\path\file.ext")] + [InlineData(@"\\server\file.ext")] + [InlineData(@"//Unix/syntax/file.ext")] + public void ValidUrlTests(string url) { - Assert.True(BackupFileTools.IsUrl(file)); + Assert.True(BackupFileTools.IsValidFileUrl(url)); } [Theory] - [MemberData(nameof(NonUrlFileExamples))] - public void NonUrlFilesAreNotUrl(string file) + [InlineData(@"")] + [InlineData(@" ")] + [InlineData(@"c:\hello\a.bak")] + [InlineData(@"\\C:/")] + [InlineData(@"\wrongUNC\file.txt")] + [InlineData(@"/wrongUNC/file.txt")] + [InlineData(@"\\server\dir")] + [InlineData(@"\\server\dir\")] + [InlineData(@"https://storage-account.blob.core.windows.net/dir")] + [InlineData(@"http://storage-account.blob.core.windows.net/dir")] + [InlineData(@"http://storage-account.blob.core.windows.net/dir/")] + public void InvalidUrlTests(string url) { - Assert.False(BackupFileTools.IsUrl(file)); + Assert.False(BackupFileTools.IsValidFileUrl(url)); } [Theory] @@ -58,5 +59,32 @@ public void BackupTypeAbbrevToType(string abbrev, BackupFileTools.BackupType typ { Assert.Equal(type, BackupFileTools.BackupTypeAbbrevToType(abbrev)); } + + [Theory] + [InlineData(@"C:\dir\file.ext")] + [InlineData(@"/some/file.ext")] + + public void ValidPathTests(string path) + { + Assert.True(BackupFileTools.IsValidFilePath(path)); + } + + [Theory] + [InlineData(@"")] + [InlineData(@" ")] + [InlineData(@"/dir")] + [InlineData(@"/")] + [InlineData(@"file.ext")] + [InlineData(@"dir\file.ext")] + [InlineData(@"C dir\file.ext")] + [InlineData(@"dir")] + [InlineData(@"C:\dir\")] + [InlineData(@"C:\dir")] + [InlineData(@"C:\")] + [InlineData(@"C:\inval|d")] + public void InValidPathTests(string path) + { + Assert.False(BackupFileTools.IsValidFilePath(path)); + } } } \ No newline at end of file