Beispiel #1
0
        public async Task WhenDirectoryIsCopied_ThenAllFilesContentsExistInNewTarget()
        {
            // Arrange
            var baseDirectory   = @"C:\base";
            var targetDirectory = @"C:\target";
            var files           = new Dictionary <string, MockFileData>
            {
                { Path.Combine(baseDirectory, "myfile.txt"), new MockFileData("Testing is meh.") },
                { Path.Combine(baseDirectory, @"subDir\myfile.txt"), new MockFileData("Testing is GREAT.") },
                { Path.Combine(baseDirectory, @"subDir\doubleSub\two.txt"), new MockFileData("Testing is MEH!!!!.") },
                { Path.Combine(baseDirectory, @"subDir\doubleSub\deep\two.txt"), new MockFileData("Testing is MEH!!!!.") },
                { Path.Combine(baseDirectory, @"subDir\otherSub\four.txt"), new MockFileData("Testing is potato.") },
                { Path.Combine(baseDirectory, @"subDir\otherSub\deeper\five.txt"), new MockFileData("Testing is nested potatoes.") },
                { Path.Combine(baseDirectory, "jQuery.js"), new MockFileData("some js") },
                { Path.Combine(baseDirectory, "image.gif"), new MockFileData(new byte[] { 0x12, 0x34, 0x56, 0xd2 }) }
            };
            var fileSystem = new MockFileSystem(files);
            var copier     = new DirectoryCopier(fileSystem);

            //Act
            await copier.CopyDirectory(baseDirectory, targetDirectory);

            //Assert
            foreach (var file in files)
            {
                var separator      = fileSystem.Path.DirectorySeparatorChar;
                var pathComponents = file.Key.Split(separator);
                pathComponents[0] = targetDirectory;
                var expectedDirectory = String.Join(separator.ToString(), pathComponents);
                var copied            = fileSystem.GetFile(expectedDirectory);

                copied.Contents.Should().BeEquivalentTo(file.Value.Contents);
            }
        }
Beispiel #2
0
        public void DoesSourceDirectoryExist_SourceDirectoryDoesNotExist_ReturnsFalse()
        {
            DirectoryCopier copier = new DirectoryCopier();
            var             result = copier.DoesSourceDirectoryExist("C:\\a\\b\\c\\d\\Idonotexist");

            Assert.IsFalse(result);
        }
        public async Task FiresEventCorrectlyWithOverwrite()
        {
            var fs = new MockFileSystem();
            var directoryCopier = new DirectoryCopier(fs, "C:\\fakeDir", "C:\\SFM", true);

            var d1 = Encoding.UTF8.GetBytes("Hello");
            var d2 = Encoding.UTF8.GetBytes("Konnichiwa");

            fs.CreateFile("C:\\fakeDir\\file1.txt", d1);
            fs.CreateFile("C:\\SFM\\file1.txt", d2);

            DirectoryCopierFileExistsEventArgs eventArgs = null;

            directoryCopier.OnFileExists += delegate(object sender, DirectoryCopierFileExistsEventArgs e)
            {
                eventArgs      = e;
                e.FileCopyMode = DirectoryCopierFileCopyMode.Copy;
            };

            await directoryCopier.Execute();

            Assert.AreNotEqual(null, eventArgs);

            Assert.AreEqual(eventArgs.File1, "C:\\fakeDir\\file1.txt");
            Assert.AreEqual(fs.ReadFile("C:\\fakeDir\\file1.txt"), d1);

            Assert.AreEqual(eventArgs.File2, "C:\\SFM\\file1.txt");
            Assert.AreEqual(fs.ReadFile("C:\\SFM\\file1.txt"), d1);
        }
Beispiel #4
0
        public void IsTargetDirectoryPathEmpty_TargetDirectoryHasOnlyBlanks_ReturnsTrue()
        {
            DirectoryCopier copier = new DirectoryCopier();
            var             result = copier.IsTargetDirectoryPathEmpty("     ");

            Assert.IsTrue(result);
        }
Beispiel #5
0
        static void Main(string[] args)
        {
            // Directory copying.
            Console.Write("Enter source directory: ");
            var srcDir = Console.ReadLine();

            if (!Directory.Exists(srcDir))
            {
                Console.WriteLine("Directory does not exist");
                return;
            }

            Console.Write("Enter destination directory: ");
            var destDir = Console.ReadLine();

            if (!Directory.Exists(destDir))
            {
                Console.WriteLine("Directory does not exist");
                return;
            }

            DirectoryCopier.ParallelQueueDirCopy(srcDir, destDir);
            Console.WriteLine($"Copied files: {DirectoryCopier.CopiedFiles}");
            Console.WriteLine("Processing complete. Press any key to exit.");
            Console.ReadKey();
        }
        public async Task CopyAllShouldSkipEvents()
        {
            var fs = new MockFileSystem();
            var directoryCopier = new DirectoryCopier(fs, "C:\\fakeDir", "C:\\SFM", true);

            var d1 = Encoding.UTF8.GetBytes("Hello");
            var d2 = Encoding.UTF8.GetBytes("Konnichiwa");

            fs.CreateFile("C:\\fakeDir\\file1.txt", d1);
            fs.CreateFile("C:\\fakeDir\\file2.txt", d2);

            fs.CreateFile("C:\\SFM\\file1.txt");
            fs.CreateFile("C:\\SFM\\file2.txt");

            var timesEventCalled = 0;

            directoryCopier.OnFileExists += delegate(object sender, DirectoryCopierFileExistsEventArgs e)
            {
                e.FileCopyMode = DirectoryCopierFileCopyMode.CopyAll;
                timesEventCalled++;
            };

            await directoryCopier.Execute();

            /* Setting FileCopyMode to CopyAll should disable the event */
            Assert.AreEqual(1, timesEventCalled);

            Assert.AreEqual(fs.ReadFile("C:\\SFM\\file1.txt"), d1);
            Assert.AreEqual(fs.ReadFile("C:\\SFM\\file2.txt"), d2);
        }
        public async Task CopiesDirectoryCorrectlyOnlyFiles()
        {
            var fs = new MockFileSystem();
            var directoryCopier = new DirectoryCopier(fs, "C:\\fakeDir", "C:\\SFM", false);

            fs.CreateDirectory("C:\\fakeDir");
            fs.CreateFile("C:\\fakeDir\\file1.txt");
            fs.CreateFile("C:\\fakeDir\\file2.txt");

            await directoryCopier.Execute();

            Assert.IsTrue(fs.FileExists("C:\\SFM\\file1.txt"));
            Assert.IsTrue(fs.FileExists("C:\\SFM\\file2.txt"));
        }
Beispiel #8
0
        public bool StartCopy(string fromDirectory, string toDirectory, IProgress progress)
        {
            IDirectoryCopy directorCopier = new DirectoryCopier(progress);

            try
            {
                directorCopier.CopyFromDirectory(fromDirectory, toDirectory);
                return(true);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Beispiel #9
0
        public async Task DownloadRevisionZip(int id, string filepath, IProgress <int> progress)
        {
            var rev = _fakeRevisions.Find(r => r.Item2.ID == id);

            if (rev == null)
            {
                throw new ArgumentException();
            }

            /* In this case, we just copy the revision to filepath as a folder */
            var dirCopier = new DirectoryCopier(_fs, rev.Item1, filepath, true);

            dirCopier.OnProgress += delegate(object sender, DirectoryProgressEventArgs e)
            {
                progress?.Report(e.Progress);
            };

            await dirCopier.Execute();
        }
        public async Task FiresEventCorrectly()
        {
            var fs = new MockFileSystem();
            var directoryCopier = new DirectoryCopier(fs, "C:\\fakeDir", "C:\\SFM", true);
            var copiedFiles     = new List <Tuple <string, string> >();
            var progressHistory = new List <int>();

            fs.CreateFile("C:\\fakeDir\\file1.txt");
            fs.CreateFile("C:\\SFM\\file1.txt");

            DirectoryCopierFileExistsEventArgs eventArgs = null;

            directoryCopier.OnFileExists += delegate(object sender, DirectoryCopierFileExistsEventArgs e)
            {
                eventArgs = e;
            };

            directoryCopier.OnFileCopy += delegate(object sender, DirectoryCopierCopyEventArgs e)
            {
                copiedFiles.Add(new Tuple <string, string>(e.File1, e.File2));
            };

            directoryCopier.OnProgress += delegate(object sender, DirectoryProgressEventArgs e)
            {
                progressHistory.Add(e.Progress);
            };

            await directoryCopier.Execute();

            Assert.AreNotEqual(null, eventArgs);
            Assert.AreEqual(eventArgs.File1, "C:\\fakeDir\\file1.txt");
            Assert.AreEqual(eventArgs.File2, "C:\\SFM\\file1.txt");

            Assert.IsTrue(copiedFiles.Contains(new Tuple <string, string>("C:\\fakeDir\\file1.txt", "C:\\SFM\\file1.txt")));

            Assert.IsTrue(progressHistory.Contains(100));
        }
Beispiel #11
0
        static void Main(string[] args)
        {
            if (args.Length != ARG_COUNT)
            {
                Console.WriteLine("Error: invalid input.");
                Console.WriteLine("Usage: TaskQueue.exe 'source_path' 'target_path'");
                return;
            }

            string sourcePath = args[0];
            string targetPath = args[1];

            var directoryCopier = new DirectoryCopier(5);

            try
            {
                uint copiedFiles = directoryCopier.Copy(sourcePath, targetPath);
                Console.WriteLine($"{copiedFiles} files were copied successfully.");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.Message);
            }
        }
        public async Task CopiesDirectoryCorrectlyWithSubDirs()
        {
            var fs = new MockFileSystem();
            var directoryCopier = new DirectoryCopier(fs, "C:\\fakeDir", "C:\\SFM", true);

            fs.CreateDirectory("C:\\fakeDir");
            fs.CreateFile("C:\\fakeDir\\file1.txt");
            fs.CreateFile("C:\\fakeDir\\file2.txt");

            fs.CreateDirectory("C:\\fakeDir\\folder");
            fs.CreateFile("C:\\fakeDir\\folder\\file3.txt");

            fs.CreateDirectory("C:\\fakeDir\\folder\\folder2");
            fs.CreateFile("C:\\fakeDir\\folder\\folder2\\file4.txt");

            await directoryCopier.Execute();

            Assert.IsTrue(fs.FileExists("C:\\SFM\\file1.txt"));
            Assert.IsTrue(fs.FileExists("C:\\SFM\\file2.txt"));
            Assert.IsTrue(fs.DirectoryExists("C:\\SFM\\folder"));
            Assert.IsTrue(fs.FileExists("C:\\SFM\\folder\\file3.txt"));
            Assert.IsTrue(fs.DirectoryExists("C:\\SFM\\folder\\folder2"));
            Assert.IsTrue(fs.FileExists("C:\\SFM\\folder\\folder2\\file4.txt"));
        }
Beispiel #13
0
        public void CheckDirectoriesAvailability_SourceDirectoryDoesNotExist_ThrowsException()
        {
            DirectoryCopier copier = new DirectoryCopier();

            Assert.ThrowsException <Exception>(() => copier.CheckDirectoriesAvailability("C:\\a\\b\\c\\d\\Idonotexist", ""));
        }
 public DirectoryMirrorer()
 {
     _copier  = new DirectoryCopier(this);
     _deleter = new DirectoryDeleter(this);
 }
Beispiel #15
0
 /* In MockZIPFile the archive itself is not a file but just the folder with the zip contents.
  * This simplifies the process. */
 public async Task Extract(string dir, IProgress <int> progress)
 {
     var dirCopier = new DirectoryCopier(_fs, _path, dir, true);
     await dirCopier.Execute();
 }
Beispiel #16
0
 /// <summary>
 /// Copies directory, by default includes all subdirectories recursively. 
 /// Can optionally use a whitelist or blacklist (full dir paths).
 /// Throws exceptions on any copy errors. NOT transactional!
 /// White and blacklists ignore case, this may not be suitable for Linux!
 /// </summary>
 /// <remarks>
 /// Blacklisting works as expected, if any subdir matches full path of any blacklisted entry,
 /// that subdir and any lower-level subdirs are ignored.
 /// Whitelisting also works as expected, meaning it will copy any whitelisted subdirectory,
 /// regardless how deep it is nested. It will also avoid creating empty directory chains,
 /// if given tree branch has no whitelisted subdirs.
 /// Algorithm is unable to blacklist or whitelist individual files.
 /// Top-level directory files are always copied, regardless of above lists.
 /// </remarks>
 /// <param name="sourceDirName">source full path</param>
 /// <param name="destDirName">destination full path</param>
 /// <param name="copySubDirs">true to copy all subdirs, false to copy only top dir</param>
 /// <param name="whitelist">list of full subdir paths to copy recursively, all other are ignored</param>
 /// <param name="blacklist">list of full subdir paths to not copy recursively, all other are copied</param>
 /// <exception cref="InvalidOperationException">whitelist and blacklist can't be used simultaneously</exception>
 public static void AdvDirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs = true, string[] whitelist = null, string[] blacklist = null)
 {
     DirectoryCopier copier = new DirectoryCopier();
     copier.DirectoryCopy(sourceDirName, destDirName, copySubDirs, whitelist, blacklist);
 }
Beispiel #17
0
        public DirCopyTestPak(string sourceDirFullPath)
        {
            var dirInfo = new DirectoryInfo(sourceDirFullPath);

            DirectoryCopier copier = new DirectoryCopier();
            copier.DirectoryCopy(dirInfo.FullName, DirectoryFullPath);
        }