コード例 #1
0
ファイル: DirectoryTests.cs プロジェクト: Krashner/snowflake
        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));
        }
コード例 #2
0
        public async Task CopyFileJobQueue_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 temp2 = Path.GetTempFileName();
            await System.IO.File.WriteAllBytesAsync(temp2, Data);

            // Execute the results.
            var tq    = new AsyncJobQueue <TaskResult <IFile> >();
            var token = await tq.QueueJob(EmitCopyResult(temp2, dir));

            for ((TaskResult <IFile> val, bool next) = await tq.GetNext(token); next; (val, next) = await tq.GetNext(token))
            {
            }

            Assert.True(dir.ContainsFile(Path.GetFileName(temp2)));

            using (var stream = dir.OpenFile(Path.GetFileName(temp2)).OpenStream())
            {
                Assert.Equal(Data.Length, stream.Length);
            }

            dir.OpenFile(Path.GetFileName(temp2)).Delete();
            Assert.False(dir.ContainsFile(Path.GetFileName(temp2)));
        }
コード例 #3
0
        public async Task CopyFile_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 temp2 = Path.GetTempFileName();
            await System.IO.File.WriteAllBytesAsync(temp2, Data);
            // Execute the results.
            await foreach (var res in EmitCopyResult(temp2, dir))
            {
                Assert.Equal(await res.Description, $"Copied {new FileInfo(temp2).FullName} to directory {dir.Name}");
                Assert.Equal(await res.Description, $"Copied {new FileInfo(temp2).FullName} to directory {dir.Name}");
            }

            Assert.True(dir.ContainsFile(Path.GetFileName(temp2)));

            using (var stream = dir.OpenFile(Path.GetFileName(temp2)).OpenStream())
            {
                Assert.Equal(Data.Length, stream.Length);
            }

            dir.OpenFile(Path.GetFileName(temp2)).Delete();
            Assert.False(dir.ContainsFile(Path.GetFileName(temp2)));
        }
コード例 #4
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);
        }
コード例 #5
0
ファイル: DirectoryTests.cs プロジェクト: Krashner/snowflake
        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("test", pfs, pfs.GetDirectoryEntry("/"));

            var dir2 = new FS.Directory("test2", 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

            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);
        }
コード例 #6
0
ファイル: LinkTests.cs プロジェクト: Krashner/snowflake
        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);
        }
コード例 #7
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"));
        }
コード例 #8
0
ファイル: DirectoryTests.cs プロジェクト: Krashner/snowflake
        public void DirectoryManifestPersist_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);
        }
コード例 #9
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.GetGuid("test.txt"));
            file.Delete();
            var newFile = dir.OpenFile("test.txt");

            Assert.NotEqual(newFile.FileGuid, file.FileGuid);
            //  Assert.True(dir.Manifest.ContainsKey("test.txt"));
        }
コード例 #10
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);
        }
コード例 #11
0
ファイル: DirectoryTests.cs プロジェクト: Krashner/snowflake
        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);
        }
コード例 #12
0
ファイル: DirectoryTests.cs プロジェクト: Krashner/snowflake
        public void FileRename_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();

            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

            file.Rename(tempFile2);
            Assert.Equal(Path.GetFileName(tempFile2), file.Name);
            Assert.Equal(file.FileGuid, dir.OpenFile(tempFile2).FileGuid);
        }
コード例 #13
0
ファイル: LinkTests.cs プロジェクト: Krashner/snowflake
        public void DirectoryLinkFromFileInfo_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 link = dir.LinkFrom(new FileInfo(tempFile));

            using (var str = link.OpenReadStream())
            {
                Assert.Equal(255, str.ReadByte());
            }

            Assert.Throws <IOException>(() => dir.CopyFrom(new FileInfo(tempFile)));
            Assert.True(dir.ContainsFile(Path.GetFileName(tempFile)));
        }