diff options
author | Dean Ferreyra <dean@octw.com> | 2020-09-07 00:55:39 +0300 |
---|---|---|
committer | Dean Ferreyra <dean@octw.com> | 2020-09-07 01:00:48 +0300 |
commit | 27da5a4dc7f4b02aef68ad26cdbc187b4fc1dc65 (patch) | |
tree | 89399cf2887b1a749709c91285a96be9fb7827a3 /Duplicati | |
parent | 7d13d9ed81d3d6bb375ba2d08a2d5690b175e83d (diff) |
Include Windows in tests for directory names with wildcards
Diffstat (limited to 'Duplicati')
-rw-r--r-- | Duplicati/UnitTest/ProblematicPathTests.cs | 56 |
1 files changed, 40 insertions, 16 deletions
diff --git a/Duplicati/UnitTest/ProblematicPathTests.cs b/Duplicati/UnitTest/ProblematicPathTests.cs index 4009748f4..56cc8b954 100644 --- a/Duplicati/UnitTest/ProblematicPathTests.cs +++ b/Duplicati/UnitTest/ProblematicPathTests.cs @@ -26,25 +26,45 @@ namespace Duplicati.UnitTest [Category("ProblematicPath")] public void DirectoriesWithWildcards() { - if (Platform.IsClientWindows) - { - return; - } - const string file = "file"; List<string> directories = new List<string>(); + // Keep expected match counts since they'll differ between + // Linux and Windows. + var questionMarkWildcardShouldMatchCount = 0; + var verbatimAsteriskShouldMatchCount = 0; + const string asterisk = "*"; string dirWithAsterisk = Path.Combine(this.DATAFOLDER, asterisk); - SystemIO.IO_OS.DirectoryCreate(dirWithAsterisk); - WriteFile(SystemIO.IO_OS.PathCombine(dirWithAsterisk, file), new byte[] {0}); - directories.Add(dirWithAsterisk); + // Windows does not support literal asterisks in paths. + if (!Platform.IsClientWindows)
+ {
+ SystemIO.IO_OS.DirectoryCreate(dirWithAsterisk);
+ WriteFile(SystemIO.IO_OS.PathCombine(dirWithAsterisk, file), new byte[] {0});
+ directories.Add(dirWithAsterisk); + questionMarkWildcardShouldMatchCount++; + verbatimAsteriskShouldMatchCount++; + } const string questionMark = "?"; string dirWithQuestionMark = Path.Combine(this.DATAFOLDER, questionMark); - SystemIO.IO_OS.DirectoryCreate(dirWithQuestionMark); - WriteFile(SystemIO.IO_OS.PathCombine(dirWithQuestionMark, file), new byte[] {1}); - directories.Add(dirWithQuestionMark); + // Windows does not support literal question marks in paths. + if (!Platform.IsClientWindows)
+ {
+ SystemIO.IO_OS.DirectoryCreate(dirWithQuestionMark);
+ WriteFile(SystemIO.IO_OS.PathCombine(dirWithQuestionMark, file), new byte[] { 1 });
+ directories.Add(dirWithQuestionMark);
+ questionMarkWildcardShouldMatchCount++; + } + + // Include at least one single character directory in Windows + // for a '?' wildcard can match on + const string singleCharacterDir = "X"; + string dirWithSingleCharacter = Path.Combine(this.DATAFOLDER, singleCharacterDir); + SystemIO.IO_OS.DirectoryCreate(dirWithSingleCharacter);
+ WriteFile(SystemIO.IO_OS.PathCombine(dirWithSingleCharacter, file), new byte[] { 1 });
+ directories.Add(dirWithSingleCharacter);
+ questionMarkWildcardShouldMatchCount++; const string dir = "dir"; string normalDir = Path.Combine(this.DATAFOLDER, dir); @@ -86,11 +106,14 @@ namespace Duplicati.UnitTest Assert.AreEqual(0, listResults.Warnings.Count()); Assert.AreEqual(directories.Count, listResults.Files.Count()); - // List results using ? should return 2 matches, one for the directory with '*' and one for the directory with '?'. listResults = c.List(SystemIO.IO_OS.PathCombine(dirWithQuestionMark, file)); Assert.AreEqual(0, listResults.Errors.Count()); Assert.AreEqual(0, listResults.Warnings.Count()); - Assert.AreEqual(2, listResults.Files.Count()); + // List results using ? should return 3 matches in Linux,
+ // one for the directory with '*' and one for the directory
+ // with '?', plus one for directory 'X'; but should return
+ // 1 matches in Windows just for directory 'X'.
+ Assert.AreEqual(questionMarkWildcardShouldMatchCount, listResults.Files.Count());
} SystemIO.IO_OS.DirectoryDelete(this.RESTOREFOLDER, true); @@ -134,16 +157,17 @@ namespace Duplicati.UnitTest Assert.AreEqual(directories.Count, backupResults.ExaminedFiles); } - // Backup with verbatim asterisk in include filter should include one directory. + // Backup with verbatim asterisk in include filter should include + // one directory in Linux and zero directories in Windows. filter = new FilterExpression("@" + SystemIO.IO_OS.PathCombine(dirWithAsterisk, file)); using (Controller c = new Controller("file://" + this.TARGETFOLDER, options, null)) { IBackupResults backupResults = c.Backup(new[] {this.DATAFOLDER}, filter); Assert.AreEqual(0, backupResults.Errors.Count()); Assert.AreEqual(0, backupResults.Warnings.Count()); - Assert.AreEqual(1, backupResults.ExaminedFiles); + Assert.AreEqual(verbatimAsteriskShouldMatchCount, backupResults.ExaminedFiles);
} - } + }
[Test] [Category("ProblematicPath")] |