예제 #1
0
        public void DirectoryFileGuidPersist_Test()
        {
            var fs   = new PhysicalFileSystem();
            var temp = Path.GetTempPath();
            var pfs  = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));

            using var dir = new FS.Directory(Path.GetRandomFileName(), pfs, pfs.GetDirectoryEntry("/")).AsDisposable();
            var file = dir.OpenFile("test.txt");
            var guid = file.FileGuid;

            Assert.NotEqual(Guid.Empty, guid);
            file.OpenStream().Close();
            Assert.Equal(dir.OpenFile("test.txt").FileGuid, guid);
        }
예제 #2
0
        public void DirectoryManifestRemove_Test()
        {
            var fs   = new PhysicalFileSystem();
            var temp = Path.GetTempPath();
            var pfs  = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));

            using var dir = new FS.Directory(Path.GetRandomFileName(), pfs, pfs.GetDirectoryEntry("/")).AsDisposable();
            var file = dir.OpenFile("test.txt");

            file.Delete();
            var newFile = dir.OpenFile("test.txt");

            Assert.NotEqual(newFile.FileGuid, file.FileGuid);
            //  Assert.True(dir.Manifest.ContainsKey("test.txt"));
        }
예제 #3
0
        public void DirectoryMoveFromManagedAndRename_Test()
        {
            var fs  = new PhysicalFileSystem();
            var fs2 = new PhysicalFileSystem();

            var temp = Path.GetTempPath();
            var pfs  = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));
            var dir  = new FS.Directory(Path.GetRandomFileName(), pfs, pfs.GetDirectoryEntry("/"));

            var dir2 = new FS.Directory(Path.GetRandomFileName(), pfs, pfs.GetDirectoryEntry("/"));

            var  tempFile = Path.GetTempFileName();
            var  file     = dir.OpenFile(tempFile);
            Guid oldGuid  = file.FileGuid;

            using (var str = file.OpenStream())
            {
                str.WriteByte(255);
            }// safe the file

            var newFile = dir2.MoveFrom(file, "newNonConflictingName", false);

            Assert.Throws <FileNotFoundException>(() => dir2.MoveFrom(file));
            Assert.Equal(1, newFile.Length);

            Assert.False(file.Created);
            Assert.False(dir.ContainsFile(file.Name));

            Assert.True(newFile.Created);
            Assert.Equal(newFile.FileGuid, file.FileGuid);
            Assert.Equal(newFile.FileGuid, dir2.OpenFile("newNonConflictingName").FileGuid);
        }
예제 #4
0
        public async Task DirectoryCopyFromAsyncManaged_Test()
        {
            var fs  = new PhysicalFileSystem();
            var fs2 = new PhysicalFileSystem();

            var temp = Path.GetTempPath();
            var pfs  = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));
            var dir  = new FS.Directory(Path.GetRandomFileName(), pfs, pfs.GetDirectoryEntry("/"));

            var dir2 = new FS.Directory(Path.GetRandomFileName(), pfs, pfs.GetDirectoryEntry("/"));

            var tempFile = Path.GetTempFileName();
            var file     = dir.OpenFile(tempFile);

            Assert.NotEqual(Guid.Empty, file.FileGuid);
            using (var str = file.OpenStream())
            {
                str.WriteByte(255);
            }// safe the file

            var file2 = await dir2.CopyFromAsync(file);

            Assert.Equal(file.FileGuid, file2.FileGuid);
            Assert.True(file.Created);
            Assert.Equal(1, file2.Length);

            await Assert.ThrowsAsync <IOException>(async() => await dir2.CopyFromAsync(file));

            Assert.Equal(1, (await dir2.CopyFromAsync(file, true)).Length);
        }
예제 #5
0
        public void DirectoryCopyFromManaged_Test()
        {
            var fs  = new PhysicalFileSystem();
            var fs2 = new PhysicalFileSystem();

            var temp = Path.GetTempPath();
            var pfs  = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));
            var dir  = new FS.Directory(Path.GetRandomFileName(), pfs, pfs.GetDirectoryEntry("/"));

            var dir2 = new FS.Directory(Path.GetRandomFileName(), pfs, pfs.GetDirectoryEntry("/"));

            var tempFile = Path.GetTempFileName();
            var file     = dir.OpenFile(tempFile);

            using (var str = file.OpenStream())
            {
                str.WriteByte(255);
            }// safe the file

            var file2 = dir2.CopyFrom(file);

            Assert.Equal(file.FileGuid, file2.FileGuid);
            Assert.Equal(1, file2.Length);

            Assert.Throws <IOException>(() => dir2.CopyFrom(file));
            Assert.Equal(1, dir2.CopyFrom(file, true).Length);
        }
예제 #6
0
        public void DirectoryMoveFromManaged_Test()
        {
            var fs  = new PhysicalFileSystem();
            var fs2 = new PhysicalFileSystem();

            var temp = Path.GetTempPath();
            var pfs  = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));
            var dir  = new FS.Directory("test", pfs, pfs.GetDirectoryEntry("/"));

            var dir2 = new FS.Directory("test2", pfs, pfs.GetDirectoryEntry("/"));

            var  tempFile = Path.GetTempFileName();
            var  file     = dir.OpenFile(tempFile);
            Guid oldGuid  = file.FileGuid;

            Assert.True(dir.ContainsFile(".manifest"));
            using (var str = file.OpenStream())
            {
                str.WriteByte(255);
            }// safe the file

            var file2 = dir2.CopyFrom(file);

            Assert.Throws <IOException>(() => dir2.MoveFrom(file));
            Assert.Equal(1, dir2.MoveFrom(file, true).Length);

            Assert.Equal(oldGuid, file2.FileGuid);
            Assert.Equal(1, file2.Length);

            Assert.False(file.Created);
            Assert.False(dir.ContainsFile(file.Name));
        }
예제 #7
0
        public void DirectoryManifestRemove_Test()
        {
            var fs   = new PhysicalFileSystem();
            var temp = Path.GetTempPath();
            var pfs  = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));
            var dir  = new FS.Directory("test", pfs, pfs.GetDirectoryEntry("/"));
            var file = dir.OpenFile("test.txt");

            Assert.True(dir.ContainsFile(".manifest"));
            Assert.Equal(file.FileGuid, dir.RetrieveManifestRecord(dir.ThisDirectory.Path / Path.GetFileName("test.txt"), false).guid);
            file.Delete();
            var newFile = dir.OpenFile("test.txt");

            Assert.NotEqual(newFile.FileGuid, file.FileGuid);
            //  Assert.True(dir.Manifest.ContainsKey("test.txt"));
        }
예제 #8
0
        public void LinkRename_Test()
        {
            var fs = new PhysicalFileSystem();

            var temp = Path.GetTempPath();
            var pfs  = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));
            var dir  = new FS.Directory("test", pfs, pfs.GetDirectoryEntry("/"));

            var tempFile  = Path.GetTempFileName();
            var tempFile2 = Path.GetTempFileName();

            using (var str = new FileInfo(tempFile).OpenWrite())
            {
                str.WriteByte(255);
            }

            var link = dir.LinkFrom(new FileInfo(tempFile));

            Guid oldGuid = link.FileGuid;

            Assert.True(dir.ContainsFile(".manifest"));


            link.Rename(tempFile2);
            Assert.Equal(Path.GetFileName(tempFile2), link.Name);
            Assert.Equal(link.FileGuid, dir.OpenFile(tempFile2).FileGuid);
            Assert.True(new FileInfo(tempFile).Exists);
        }
예제 #9
0
        public void LinkOverwritesCreatedFile_Test()
        {
            var fs   = new PhysicalFileSystem();
            var temp = Path.GetTempPath();
            var pfs  = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));
            var dir  = new FS.Directory("test", pfs, pfs.GetDirectoryEntry("/"));

            var tempFile = Path.GetTempFileName();

            using (var str = new FileInfo(tempFile).OpenWrite())
            {
                str.WriteByte(255);
            }

            var file = dir.OpenFile(tempFile);

            using (var f = file.OpenStream())
            {
                f.WriteByte(254);
            }

            Assert.Throws <IOException>(() => dir.LinkFrom(new FileInfo(tempFile)));
            var link = dir.LinkFrom(new FileInfo(tempFile), true);

            Assert.IsAssignableFrom <Link>(link);
            using (var str = link.OpenReadStream())
            {
                Assert.Equal(255, str.ReadByte());
            }
            Assert.Equal(file.FileGuid, link.FileGuid);
        }
예제 #10
0
        public void DirectoryManifestCreated_Test()
        {
            var fs   = new PhysicalFileSystem();
            var temp = Path.GetTempPath();
            var pfs  = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));
            var dir  = new FS.Directory("test", pfs, pfs.GetDirectoryEntry("/"));

            dir.OpenFile("test.txt");
            Assert.True(dir.ContainsFile(".manifest"));
        }
예제 #11
0
        public void FileRename_Test()
        {
            var fs = new PhysicalFileSystem();

            var temp = Path.GetTempPath();
            var pfs  = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));
            var dir  = new FS.Directory(Path.GetRandomFileName(), pfs, pfs.GetDirectoryEntry("/"));

            var tempFile  = Path.GetTempFileName();
            var tempFile2 = Path.GetTempFileName();

            var  file    = dir.OpenFile(tempFile);
            Guid oldGuid = file.FileGuid;

            using (var str = file.OpenStream())
            {
                str.WriteByte(255);
            }// safe the file

            file.Rename(tempFile2);
            Assert.Equal(Path.GetFileName(tempFile2), file.Name);
            Assert.Equal(file.FileGuid, dir.OpenFile(tempFile2).FileGuid);
        }
예제 #12
0
        public void DirectoryRecursiveFileOpen_Test()
        {
            var fs   = new PhysicalFileSystem();
            var temp = Path.GetTempPath();
            var pfs  = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));
            var dir  = new FS.Directory(Path.GetRandomFileName(), pfs, pfs.GetDirectoryEntry("/"));
            var file = dir.OpenFile("test.txt");

            file.OpenStream().Close();
            dir.OpenDirectory(Path.GetRandomFileName()).OpenFile("test2.txt").OpenStream().Close();
            var iter = dir.EnumerateFilesRecursive();

            Assert.True(iter.Count() >= 2);
        }
예제 #13
0
        public void LinkFromFile_Test()
        {
            var fs            = new PhysicalFileSystem();
            var temp          = Path.GetTempPath();
            var unmanagedFile = Path.GetTempFileName();
            var pfs           = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));

            using var dir = new FS.Directory(Path.GetRandomFileName(), pfs, pfs.GetDirectoryEntry("/")).AsDisposable();

            System.IO.File.WriteAllText(unmanagedFile, "Hello World!");
            var linkedFile = dir.LinkFrom(new FileInfo(unmanagedFile));

            Assert.Equal("Hello World!", linkedFile.ReadAllText());
            Assert.Equal(linkedFile.FileGuid, dir.OpenFile(Path.GetFileName(unmanagedFile)).FileGuid);
        }
예제 #14
0
        public void DirectoryRecursiveFileOpen_Test()
        {
            var fs   = new PhysicalFileSystem();
            var temp = Path.GetTempPath();
            var pfs  = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));
            var dir  = new FS.Directory("test", pfs, pfs.GetDirectoryEntry("/"));
            var file = dir.OpenFile("test.txt");

            Assert.True(dir.ContainsFile(".manifest"));
            Assert.Equal(file.FileGuid, dir.GetGuid("test.txt"));
            file.OpenStream().Close();
            dir.OpenDirectory("next_test").OpenFile("test2.txt").OpenStream().Close();
            var iter = dir.EnumerateFilesRecursive();

            Assert.True(iter.Count() >= 2);
        }
예제 #15
0
        public void DirectoryCopyFromFileInfo_Test()
        {
            var fs   = new PhysicalFileSystem();
            var temp = Path.GetTempPath();
            var pfs  = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(temp));
            var dir  = new FS.Directory("test", pfs, pfs.GetDirectoryEntry("/"));

            var tempFile = Path.GetTempFileName();
            var file     = dir.OpenFile(tempFile);

            Assert.True(dir.ContainsFile(".manifest"));
            using (var str = file.OpenStream()) {
                str.WriteByte(255);
            }// safe the file

            Assert.Throws <IOException>(() => dir.CopyFrom(new FileInfo(tempFile)));
            Assert.Equal(0, dir.CopyFrom(new FileInfo(tempFile), true).Length);
        }