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)); }
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); }
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); } }
public MainPageViewModel(IPageDialogService pageDialogService) { _pageDialogService = pageDialogService; _fileSystem = new SmbFileSystem(); Adapter = new FileBrowserDirectoryAdapter(new SmbFileSystemDiscovery()); Adapter.Error = OnFileBrowserError; OpenFileCommand = new Command <FileItem>(OnOpenFile); }
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); }
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); }
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(); }
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(); }
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"); }
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"); }
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(); }
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); }
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(); }
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)); }