public void Can_get_and_set_directory_times(ShareType shareType)
        {
            var fs = new SmbFileSystem();

            CreateTestFolder(shareType);
            var dirname = TestHelpers.ShareUri($"{TestFolder}/testattributes", shareType);

            fs.Directory.CreateDirectory(dirname);



            fs.Directory.SetCreationTime(dirname, new DateTime(1980, 2, 20, 1, 0, 0));
            fs.Directory.GetCreationTime(dirname).Should().Be(new DateTime(1980, 2, 20, 1, 0, 0));

            fs.Directory.SetCreationTimeUtc(dirname, new DateTime(1980, 2, 20, 12, 0, 0));
            fs.Directory.GetCreationTimeUtc(dirname).Should().Be(new DateTime(1980, 2, 20, 12, 0, 0));

            fs.Directory.SetLastAccessTime(dirname, new DateTime(1980, 2, 20, 3, 0, 0));
            fs.Directory.GetLastAccessTime(dirname).Should().Be(new DateTime(1980, 2, 20, 3, 0, 0));

            fs.Directory.SetLastAccessTimeUtc(dirname, new DateTime(1980, 2, 20, 14, 0, 0));
            fs.Directory.GetLastAccessTimeUtc(dirname).Should().Be(new DateTime(1980, 2, 20, 14, 0, 0));

            fs.Directory.SetLastWriteTime(dirname, new DateTime(1980, 2, 20, 5, 0, 0));
            fs.Directory.GetLastWriteTime(dirname).Should().Be(new DateTime(1980, 2, 20, 5, 0, 0));

            fs.Directory.SetLastWriteTimeUtc(dirname, new DateTime(1980, 2, 20, 16, 0, 0));
            fs.Directory.GetLastWriteTimeUtc(dirname).Should().Be(new DateTime(1980, 2, 20, 16, 0, 0));
        }
        public async Task Can_resolve_smb_hosts_as_observable()
        {
            var testHostIps = Dns.GetHostEntry(TestHelpers.TestHost).AddressList;
            var hostUrls    = new SmbFileSystemDiscovery().DiscoverSmbHostsContinuous(TimeSpan.FromMilliseconds(2000));

            bool found        = false;
            var  subscription = hostUrls.Subscribe(host =>
            {
                var uri = new Uri(host.SmbUrl);

                if (testHostIps.Any(ip => ip.ToString() == uri.Host) ||
                    TestHelpers.TestHost.Equals(uri.Host, StringComparison.OrdinalIgnoreCase))
                {
                    var drives = new SmbFileSystem().Directory.GetLogicalDrives(host.SmbUrl);

                    found |= drives.Any(d => d == TestHelpers.AnonymousShare);
                }
            });

            await Task.Delay(2000);

            subscription.Dispose();

            found.Should().BeTrue("test host should be discoverable by mDNS");
        }
        public void Can_enumerate_files_in_smb_directory_with_pattern_and_deep(ShareType shareType)
        {
            var dirList = new List <string>
            {
                $"{TestFolder}/Cifs.Fs",
                $"{TestFolder}/Cifs.Fs.2",
                $"{TestFolder}/Cifs.Fs.2/test.2"
            };

            var fileList = new List <string>
            {
                $"{TestFolder}/blubb.txt",
                $"{TestFolder}/Cifs.Fs/test.jpg",
                $"{TestFolder}/Cifs.Fs.2/test.2/done.txt"
            };

            var fs = new SmbFileSystem();

            foreach (var dir in dirList)
            {
                fs.Directory.CreateDirectory(TestHelpers.ShareUri(dir, shareType));
            }
            foreach (var file in fileList)
            {
                fs.File.Create(TestHelpers.ShareUri(file, shareType)).Close();
            }

            var found = fs.Directory.EnumerateFiles(TestHelpers.ShareUri(TestFolder, shareType), "*.txt", SearchOption.AllDirectories).ToArray();

            found.Should().HaveCount(2);
            found.Should().Contain(TestHelpers.SmbPath(fileList[0], shareType));
            found.Should().Contain(TestHelpers.SmbPath(fileList[2], shareType));
        }
Пример #4
0
        public void Can_get_and_set_file_times(ShareType shareType)
        {
            var fs = new SmbFileSystem();

            CreateTestFolder(shareType);
            var filename = TestHelpers.ShareUri($"{TestFolder}/testattributes.txt", shareType);

            fs.File.Create(filename).Close();

            fs.File.SetAttributes(filename, FileAttributes.System);

            fs.File.SetCreationTime(filename, new DateTime(1980, 2, 20, 1, 0, 0));
            fs.File.GetCreationTime(filename).Should().Be(new DateTime(1980, 2, 20, 1, 0, 0));

            fs.File.SetCreationTimeUtc(filename, new DateTime(1980, 2, 20, 12, 0, 0));
            fs.File.GetCreationTimeUtc(filename).Should().Be(new DateTime(1980, 2, 20, 12, 0, 0));

            fs.File.SetLastAccessTime(filename, new DateTime(1980, 2, 20, 3, 0, 0));
            fs.File.GetLastAccessTime(filename).Should().Be(new DateTime(1980, 2, 20, 3, 0, 0));

            fs.File.SetLastAccessTimeUtc(filename, new DateTime(1980, 2, 20, 14, 0, 0));
            fs.File.GetLastAccessTimeUtc(filename).Should().Be(new DateTime(1980, 2, 20, 14, 0, 0));

            fs.File.SetLastWriteTime(filename, new DateTime(1980, 2, 20, 5, 0, 0));
            fs.File.GetLastWriteTime(filename).Should().Be(new DateTime(1980, 2, 20, 5, 0, 0));

            fs.File.SetLastWriteTimeUtc(filename, new DateTime(1980, 2, 20, 16, 0, 0));
            fs.File.GetLastWriteTimeUtc(filename).Should().Be(new DateTime(1980, 2, 20, 16, 0, 0));

            fs.File.GetAttributes(filename).Should().HaveFlag(FileAttributes.System);
        }
        public void Can_get_available_shares()
        {
            var shares = new SmbFileSystem().Directory.GetLogicalDrives($"smb://{TestHelpers.TestHost}");

            shares.Should().Contain(TestHelpers.AnonymousShare);
            shares.Should().Contain(TestHelpers.AuthenticatedShare);
        }
Пример #6
0
        public void Can_write_to_and_read_from_file(ShareType shareType)
        {
            var fs = new SmbFileSystem();

            CreateTestFolder(shareType);

            var data = new byte[1024 * 1024 * 4];
            var rand = new Random(23238);

            for (int i = 0; i < data.Length; i++)
            {
                data[i] = (byte)(i % 255);                                  //(byte)rand.Next(256);
            }
            using (var file = fs.File.Create(TestHelpers.ShareUri($"{TestFolder}/data.bin", shareType)))
            {
                file.Write(data, 0, data.Length);
            }

            using (var file = fs.File.OpenRead(TestHelpers.ShareUri($"{TestFolder}/data.bin", shareType)))
            {
                var readBuffer = new byte[data.Length];
                file.Length.Should().Be(data.Length);
                file.Read(readBuffer, 0, readBuffer.Length).Should().Be(data.Length);
                CollectionAssert.AreEqual(data, readBuffer);
            }
        }
Пример #7
0
 public MainPageViewModel(IPageDialogService pageDialogService)
 {
     _pageDialogService = pageDialogService;
     _fileSystem        = new SmbFileSystem();
     Adapter            = new FileBrowserDirectoryAdapter(new SmbFileSystemDiscovery());
     Adapter.Error      = OnFileBrowserError;
     OpenFileCommand    = new Command <FileItem>(OnOpenFile);
 }
Пример #8
0
        public void Can_write_and_read_all_lines_to_file(ShareType shareType)
        {
            string[] testText = new[] { "Test text äöü", "line 2 äsad", "", "line 3" };
            var      fs       = new SmbFileSystem();

            CreateTestFolder(shareType);
            var filename = TestHelpers.ShareUri($"{TestFolder}/testlines.txt", shareType);

            fs.File.WriteAllLines(filename, testText, Encoding.UTF32);

            fs.File.ReadAllLines(filename, Encoding.UTF32).Should().BeEquivalentTo(testText);
        }
Пример #9
0
        public void Can_write_and_read_all_text_to_file(ShareType shareType)
        {
            const string testText = "Test text äöü";
            var          fs       = new SmbFileSystem();

            CreateTestFolder(shareType);
            var filename = TestHelpers.ShareUri($"{TestFolder}/test.txt", shareType);

            fs.File.WriteAllText(filename, testText, Encoding.UTF32);

            fs.File.ReadAllText(filename, Encoding.UTF32).Should().Be(testText);
        }
Пример #10
0
        public void Can_check_file_exists(ShareType shareType)
        {
            var fs = new SmbFileSystem();

            CreateTestFolder(shareType);
            var filename = TestHelpers.ShareUri($"{TestFolder}/somefile.txt", shareType);

            fs.File.Exists(filename).Should().BeFalse();

            fs.File.Create(filename).Close();

            fs.File.Exists(filename).Should().BeTrue();
        }
Пример #11
0
        public void Cannot_copy_file_without_overwrite_when_existing(ShareType shareType)
        {
            var fs = new SmbFileSystem();

            CreateTestFolder(shareType);
            var srcFilename = TestHelpers.ShareUri($"{TestFolder}/source.txt", shareType);
            var dstFilename = TestHelpers.ShareUri($"{TestFolder}/dest.txt", shareType);

            fs.File.WriteAllText(srcFilename, "test");
            fs.File.WriteAllText(dstFilename, "dest");

            fs.File.Copy(srcFilename, dstFilename, false);
        }
        public IObservable <IFileSystemDiscoveryResult> DiscoverRootDirectoriesContinuous(TimeSpan scanTime = default)
        {
            var inner         = DiscoverSmbHostsContinuous(scanTime);
            var smbFileSystem = new SmbFileSystem();

            return(inner.Repeat()
                   .SelectMany(host =>
                               smbFileSystem.Directory.GetLogicalDrives(host.SmbUrl).Select(ld =>
                                                                                            new SmbFileSystemDiscoveryResult(
                                                                                                smbFileSystem,
                                                                                                host.SmbUrl,
                                                                                                host.DisplayName)
                                                                                            )));
        }
        public async Task <IFileSystemDiscoveryResult[]> DiscoverRootDirectoriesAsync(TimeSpan scanTime = default, CancellationToken cancellationToken = default)
        {
            var hosts = await DiscoverSmbHostsAsync(scanTime, cancellationToken);

            var smbFileSystem = new SmbFileSystem();

            return(hosts.SelectMany(host =>
                                    smbFileSystem.Directory.GetLogicalDrives(host.SmbUrl).Select(ld =>
                                                                                                 new SmbFileSystemDiscoveryResult(
                                                                                                     smbFileSystem,
                                                                                                     host.SmbUrl,
                                                                                                     host.DisplayName)
                                                                                                 )).ToArray());
        }
        public void Can_create_subdirectory(ShareType shareType)
        {
            var fs = new SmbFileSystem();

            CreateTestFolder(shareType);
            var dirname = TestHelpers.ShareUri(TestFolder, ShareType.Anonymous);
            var dir     = fs.DirectoryInfo.FromDirectoryName(dirname);

            var info = dir.CreateSubdirectory("sub1/sub2");

            info.Exists.Should().BeTrue();

            fs.DirectoryInfo.FromDirectoryName(TestHelpers.ShareUri($"{TestFolder}/sub1/sub2", ShareType.Anonymous)).Exists.Should().BeTrue();
        }
Пример #15
0
        public void Can_create_file_with_spaces(ShareType shareType)
        {
            var fs = new SmbFileSystem();

            CreateTestFolder(shareType);
            var filename = TestHelpers.ShareUri($"{TestFolder}/source and spaces.txt", shareType);

            fs.File.WriteAllText(filename, "test");

            fs.File.Exists(filename).Should().BeTrue();

            var info = fs.FileInfo.FromFileName(filename);

            info.Name.Should().Be("source and spaces.txt");
        }
Пример #16
0
        public void Can_copy_file_with_overwrite(ShareType shareType)
        {
            var fs = new SmbFileSystem();

            CreateTestFolder(shareType);
            var srcFilename = TestHelpers.ShareUri($"{TestFolder}/source.txt", shareType);
            var dstFilename = TestHelpers.ShareUri($"{TestFolder}/dest.txt", shareType);

            fs.File.WriteAllText(srcFilename, "test");
            fs.File.WriteAllText(dstFilename, "dest");

            fs.File.Copy(srcFilename, dstFilename, true);

            fs.File.ReadAllText(srcFilename).Should().Be("test");
            fs.File.ReadAllText(dstFilename).Should().Be("test");
        }
Пример #17
0
        public void Can_move_file(ShareType shareType)
        {
            var fs = new SmbFileSystem();

            CreateTestFolder(shareType);
            var srcFilename = TestHelpers.ShareUri($"{TestFolder}/source.txt", shareType);
            var dstFilename = TestHelpers.ShareUri($"{TestFolder}/dest.txt", shareType);

            fs.File.WriteAllText(srcFilename, "test");
            fs.File.WriteAllText(dstFilename, "dest");

            fs.File.Move(srcFilename, dstFilename);

            fs.File.Exists(srcFilename).Should().BeFalse("file has been moved");
            fs.File.ReadAllText(dstFilename).Should().Be("test");
        }
        public void Can_Create_Smb_Directory(ShareType shareType)
        {
            var info = new SmbFileSystem().Directory.CreateDirectory(TestHelpers.ShareUri($"{TestFolder}/Cifs.Fs", shareType));

            info.Exists.Should().BeTrue();
            info.FullName.Should().Be(TestHelpers.SmbPath($"{TestFolder}/Cifs.Fs", shareType));
            info.Name.Should().Be("Cifs.Fs");
            info.Extension.Should().Be(".Fs");
            info.LastAccessTime.Should().BeCloseTo(DateTime.Now, 1000);
            info.LastAccessTimeUtc.Should().BeCloseTo(DateTime.UtcNow, 1000);
            info.LastWriteTime.Should().BeCloseTo(DateTime.Now, 1000);
            info.LastWriteTimeUtc.Should().BeCloseTo(DateTime.UtcNow, 1000);
            info.CreationTime.Should().BeCloseTo(DateTime.Now, 1000);
            info.CreationTimeUtc.Should().BeCloseTo(DateTime.UtcNow, 1000);
            info.Attributes.Should().Be(FileAttributes.Directory);
        }
        public void Can_get_parent()
        {
            var dirname = TestHelpers.ShareUri($"{TestFolder}/testparent/testchild", ShareType.Anonymous);
            var fs      = new SmbFileSystem();
            var parent  = fs.DirectoryInfo.FromDirectoryName(dirname).Parent;

            parent.Should().NotBeNull();
            parent.FullName.Should().Be($"/{TestHelpers.AnonymousShare}/{TestFolder}/testparent");

            parent = fs.DirectoryInfo.FromDirectoryName(TestHelpers.ShareUri(TestFolder, ShareType.Anonymous)).Parent;
            parent.Should().NotBeNull();
            parent.FullName.Should().Be($"/{TestHelpers.AnonymousShare}");

            parent = fs.DirectoryInfo.FromDirectoryName(TestHelpers.ShareUri($"", ShareType.Anonymous)).Parent;
            parent.Should().BeNull("no more parent folders");
        }
        public void Can_move_directory(ShareType shareType)
        {
            var fs = new SmbFileSystem();

            CreateTestFolder(shareType);
            var dirname  = TestHelpers.ShareUri($"{TestFolder}/src", ShareType.Anonymous);
            var destname = TestHelpers.ShareUri($"{TestFolder}/dest", ShareType.Anonymous);

            fs.DirectoryInfo.FromDirectoryName(dirname).Create();
            fs.FileInfo.FromFileName(dirname + "/test.txt").Create().Close();

            fs.Directory.Move(dirname, destname);

            fs.DirectoryInfo.FromDirectoryName(dirname).Exists.Should().BeFalse();
            fs.DirectoryInfo.FromDirectoryName(destname).Exists.Should().BeTrue();
            fs.FileInfo.FromFileName(destname + "/test.txt").Exists.Should().BeTrue();
        }
Пример #21
0
        public void Can_get_and_set_file_attributes(ShareType shareType)
        {
            var fs = new SmbFileSystem();

            CreateTestFolder(shareType);
            var filename = TestHelpers.ShareUri($"{TestFolder}/testattributes.txt", shareType);

            fs.File.Create(filename).Close();

            fs.File.SetAttributes(filename, FileAttributes.Hidden | FileAttributes.System | FileAttributes.Archive);

            var attributes = fs.File.GetAttributes(filename);

            attributes.Should().HaveFlag(FileAttributes.Hidden);
            attributes.Should().HaveFlag(FileAttributes.System);
            attributes.Should().HaveFlag(FileAttributes.Archive);
        }
Пример #22
0
        public void Can_create_and_delete_a_file(ShareType shareType)
        {
            var fs = new SmbFileSystem();

            CreateTestFolder(shareType);

            var filename = TestHelpers.ShareUri($"{TestFolder}/data.bin", shareType);

            fs.FileInfo.FromFileName(filename).Exists.Should().BeFalse();

            fs.File.Create(filename).Close();

            fs.FileInfo.FromFileName(filename).Exists.Should().BeTrue();

            fs.File.Delete(filename);

            fs.FileInfo.FromFileName(filename).Exists.Should().BeFalse();
        }
Пример #23
0
        public void Can_write_and_read_all_bytes_to_file(ShareType shareType)
        {
            var rand = new Random(12345);
            var data = new byte[1024 * 1024 * 4];

            rand.NextBytes(data);
            var fs = new SmbFileSystem();

            CreateTestFolder(shareType);

            var filename = TestHelpers.ShareUri($"{TestFolder}/testbytes.bin", shareType);

            fs.File.WriteAllBytes(filename, data);

            var read = fs.File.ReadAllBytes(filename);

            CollectionAssert.AreEqual(data, read);
        }
        public void Can_enumerate_directories_in_smb_directory(ShareType shareType)
        {
            var dirList = new List <string>
            {
                $"{TestFolder}/Cifs.Fs",
                $"{TestFolder}/Cifs.Fs.2"
            };

            var fs = new SmbFileSystem();

            foreach (var dir in dirList)
            {
                fs.Directory.CreateDirectory(TestHelpers.ShareUri(dir, shareType));
            }

            var found = fs.Directory.EnumerateDirectories(TestHelpers.ShareUri(TestFolder, shareType));

            found.Should().BeEquivalentTo(dirList.Select(d => TestHelpers.SmbPath(d, shareType)));
        }
        public async Task Can_resolve_smb_hosts()
        {
            var testHostIps = Dns.GetHostEntry(TestHelpers.TestHost).AddressList;
            var hostUrls    = await new SmbFileSystemDiscovery().DiscoverSmbHostsAsync(TimeSpan.FromMilliseconds(2000));

            hostUrls.FirstOrDefault(host =>
            {
                var uri = new Uri(host.SmbUrl);

                if (testHostIps.Any(ip => ip.ToString() == uri.Host) ||
                    TestHelpers.TestHost.Equals(uri.Host, StringComparison.OrdinalIgnoreCase))
                {
                    var drives = new SmbFileSystem().Directory.GetLogicalDrives(host.SmbUrl);

                    return(drives.Any(d => d == TestHelpers.AnonymousShare));
                }
                return(false);
            }).Should().NotBeNull("test host should be discoverable by mDNS");
        }
        public void Can_enumerate_directories_in_smb_directory_with_pattern(ShareType shareType)
        {
            var dirList = new List <string>
            {
                $"{TestFolder}/Cifs.Fs",
                $"{TestFolder}/Cifs.Fs.2",
                $"{TestFolder}/Cifs.Fs.2/test.2"
            };

            var fs = new SmbFileSystem();

            foreach (var dir in dirList)
            {
                fs.Directory.CreateDirectory(TestHelpers.ShareUri(dir, shareType));
            }

            var found = fs.Directory.EnumerateDirectories(TestHelpers.ShareUri(TestFolder, shareType), "*.2").ToArray();

            found.Should().OnlyContain(f => f == TestHelpers.SmbPath(dirList[1], shareType));
        }