public async Task Should_not_hang(FtpEncryption encryption)
        {
            string randomFileName = $"{Guid.NewGuid()}.jpg";
            var    tempFile       = ResourceHelpers.GetTempFileInfo();

            tempFile.Length.Should().Be(0);

            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                await sut.LoginAsync();

                var stream = await OpenWriteAsync(sut, "/", randomFileName);

                stream.Dispose();
            }
        }
Esempio n. 2
0
        public async Task Should_delete_directory_when_exists(FtpEncryption encryption)
        {
            string randomDirectoryName = Guid.NewGuid().ToString();

            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;

                await sut.LoginAsync();

                await sut.CreateDirectoryAsync(randomDirectoryName);

                (await sut.ListDirectoriesAsync()).Any(x => x.Name == randomDirectoryName).Should().BeTrue();
                await sut.DeleteDirectoryAsync(randomDirectoryName);

                (await sut.ListDirectoriesAsync()).Any(x => x.Name == randomDirectoryName).Should().BeFalse();
            }
        }
        public async Task Should_change_to_directory_when_exists(FtpEncryption encryption)
        {
            string randomDirectoryName = Guid.NewGuid().ToString();

            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                await sut.LoginAsync();

                await sut.CreateDirectoryAsync(randomDirectoryName);

                await sut.ChangeWorkingDirectoryAsync(randomDirectoryName);

                sut.WorkingDirectory.Should().Be($"/{randomDirectoryName}");

                await sut.ChangeWorkingDirectoryAsync("../");

                await sut.DeleteDirectoryAsync(randomDirectoryName);
            }
        }
Esempio n. 4
0
        public async Task Should_create_a_directory(FtpEncryption encryption)
        {
            string randomDirectoryName = Guid.NewGuid().ToString();
            ReadOnlyCollection <FtpNodeInformation> directories;

            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                await sut.LoginAsync();

                await sut.CreateDirectoryAsync(randomDirectoryName);

                directories = await sut.ListDirectoriesAsync();

                await sut.DeleteDirectoryAsync(randomDirectoryName);

                await sut.LogOutAsync();
            }

            directories.Any(x => x.Name == randomDirectoryName).Should().BeTrue();
        }
        public async Task Should_give_size(FtpEncryption encryption)
        {
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                string randomFilename = $"{Guid.NewGuid()}.jpg";
                await sut.LoginAsync();

                await sut.CreateTestResourceWithNameAsync("test.png", randomFilename);

                long size = await sut.GetFileSizeAsync(randomFilename);

                size.Should().Be(34427);

                await sut.DeleteFileAsync(randomFilename);
            }
        }
Esempio n. 6
0
        public async Task Should_list_files_in_root(FtpEncryption encryption)
        {
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                string randomFileName = $"{Guid.NewGuid()}.jpg";
                await sut.LoginAsync();

                await sut.CreateTestResourceWithNameAsync("penguin.jpg", randomFileName);

                (await sut.ListFilesAsync()).Any(x => x.Name == randomFileName).Should().BeTrue();

                await sut.DeleteFileAsync(randomFileName);

                (await sut.ListFilesAsync()).Any(x => x.Name == randomFileName).Should().BeFalse();
            }
        }
Esempio n. 7
0
        public async Task Should_rename_file(FtpEncryption encryption)
        {
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                string originalRandomFileName            = $"{Guid.NewGuid()}.jpg";
                string subsequentlyRenamedRandomFileName = $"{Guid.NewGuid()}.jpg";

                await sut.LoginAsync();

                await sut.CreateTestResourceWithNameAsync("penguin.jpg", originalRandomFileName);

                (await sut.ListFilesAsync()).Any(x => x.Name == originalRandomFileName).Should().BeTrue();

                await sut.RenameAsync(originalRandomFileName, subsequentlyRenamedRandomFileName);

                var filesAfterRename = await sut.ListFilesAsync();

                filesAfterRename.Any(x => x.Name == originalRandomFileName).Should().BeFalse();
                filesAfterRename.Any(x => x.Name == subsequentlyRenamedRandomFileName).Should().BeTrue();

                await sut.DeleteFileAsync(subsequentlyRenamedRandomFileName);
            }
        }
Esempio n. 8
0
        public async Task Should_list_directories_in_root(FtpEncryption encryption)
        {
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;

                string randomDirectoryName = $"{Guid.NewGuid()}";

                await sut.LoginAsync();

                await sut.CreateDirectoryAsync(randomDirectoryName);

                var directories = await sut.ListDirectoriesAsync();

                directories.Any(x => x.Name == randomDirectoryName).Should().BeTrue();

                await sut.DeleteDirectoryAsync(randomDirectoryName);
            }
        }
Esempio n. 9
0
        /// <summary>
        /// FTP下载
        /// </summary>
        /// <param name="ftpConfig">ftp配置</param>
        /// <param name="ftpEncryption"></param>
        /// <param name="ignoreCertificateErrors"></param>
        /// <returns></returns>
        public static async Task <bool> Download(FtpConfig ftpConfig, FtpEncryption ftpEncryption = FtpEncryption.Implicit, bool ignoreCertificateErrors = true)
        {
            using (var ftpClient = new FtpClient(new FtpClientConfiguration
            {
                Host = ftpConfig.Host,
                Port = ftpConfig.Port,
                Username = ftpConfig.UserName,
                Password = ftpConfig.Password,
                BaseDirectory = ftpConfig.BaseDirectory,
                EncryptionType = ftpEncryption,
                IgnoreCertificateErrors = true
            }))
            {
                await ftpClient.LoginAsync();

                if (string.IsNullOrWhiteSpace(ftpConfig.RemotePath))
                {
                    //文件路径为空,递归保存工作目录下的全部文件
                    await SaveFileAsync(ftpClient, ftpConfig);
                }
                else
                {
                    //文件路径不为空,只保存这一个文件
                    var localPath = await GetLocalPathAsync(ftpConfig);

                    using (var ftpReadStream = await ftpClient.OpenFileReadStreamAsync(ftpConfig.RemotePath))
                        await SaveFileAsync(ftpReadStream, localPath, ftpConfig.RenameFormat);
                }
            }
            return(true);
        }
        public async Task Should_recurse_as_appropriate_to_create_file(FtpEncryption encryption)
        {
            string[] randomDirectoryNames =
            {
                Guid.NewGuid().ToString(),
                Guid.NewGuid().ToString()
            };
            string joinedPath = string.Join("/", randomDirectoryNames);

            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;

                await sut.LoginAsync();

                string randomFile = $"{Guid.NewGuid()}.txt";
                using (var writeStream = await sut.OpenFileWriteStreamAsync($"/{joinedPath}/{randomFile}"))
                {
                    var fileReadStream = "abc123".ToByteStream();
                    await fileReadStream.CopyToAsync(writeStream);
                }

                (await sut.ListDirectoriesAsync()).Any(x => x.Name == randomDirectoryNames[0]).Should().BeTrue();
                await sut.ChangeWorkingDirectoryAsync(randomDirectoryNames[0]);

                (await sut.ListDirectoriesAsync()).Any(x => x.Name == randomDirectoryNames[1]).Should().BeTrue();
                await sut.ChangeWorkingDirectoryAsync(randomDirectoryNames[1]);

                (await sut.ListFilesAsync()).Any(x => x.Name == randomFile).Should().BeTrue();


                await sut.DeleteFileAsync(randomFile);

                foreach (string directory in randomDirectoryNames.Reverse())
                {
                    await sut.ChangeWorkingDirectoryAsync("../");

                    await sut.DeleteDirectoryAsync(directory);
                }
            }
        }
        public async Task Should_be_in_base_directory_when_logging_in(FtpEncryption encryption)
        {
            string randomDirectoryName = $"{Guid.NewGuid()}";

            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                Logger?.LogDebug("----------Logging In first time----------");
                await sut.LoginAsync();

                Logger?.LogDebug("----------Creating Directory for use in basepath----------");
                await sut.CreateDirectoryAsync(randomDirectoryName);
            }

            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true,
                BaseDirectory = randomDirectoryName
            }))
            {
                sut.Logger = Logger;
                Logger?.LogDebug("----------Logging In second time----------");
                await sut.LoginAsync();

                sut.WorkingDirectory.Should().Be($"/{randomDirectoryName}");

                Logger?.LogDebug("----------Deleting directory----------");
                await sut.DeleteDirectoryAsync($"/{randomDirectoryName}");
            }
        }
Esempio n. 12
0
        public async Task Should_upload_file_to_subdirectory(FtpEncryption encryption)
        {
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                string randomDirectoryName = $"{Guid.NewGuid()}";
                string randomFileName      = $"{Guid.NewGuid()}.jpg";

                await sut.LoginAsync();

                await sut.CreateDirectoryAsync(randomDirectoryName);

                var fileinfo = ResourceHelpers.GetResourceFileInfo("penguin.jpg");

                using (var writeStream = await sut.OpenFileWriteStreamAsync($"/{randomDirectoryName}/{randomFileName}"))
                {
                    var fileReadStream = fileinfo.OpenRead();
                    await fileReadStream.CopyToAsync(writeStream);
                }

                await sut.ChangeWorkingDirectoryAsync(randomDirectoryName);

                var files = await sut.ListFilesAsync();

                files.Any(x => x.Name == randomFileName).Should().BeTrue();

                await sut.DeleteFileAsync(randomFileName);

                await sut.ChangeWorkingDirectoryAsync("../");

                await sut.DeleteDirectoryAsync(randomDirectoryName);
            }
        }
Esempio n. 13
0
        public async Task Should_list_directories_in_subdirectory(FtpEncryption encryption)
        {
            string[] randomDirectoryNames =
            {
                Guid.NewGuid().ToString(),
                Guid.NewGuid().ToString()
            };
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;

                string joinedPath = string.Join("/", randomDirectoryNames);
                await sut.LoginAsync();

                await sut.CreateDirectoryAsync(joinedPath);

                await sut.ChangeWorkingDirectoryAsync(randomDirectoryNames[0]);

                var directories = await sut.ListDirectoriesAsync();

                directories.Any(x => x.Name == randomDirectoryNames[1]).Should().BeTrue();

                await sut.ChangeWorkingDirectoryAsync($"/{joinedPath}");

                foreach (string directory in randomDirectoryNames.Reverse())
                {
                    await sut.ChangeWorkingDirectoryAsync("../");

                    await sut.DeleteDirectoryAsync(directory);
                }
            }
        }
Esempio n. 14
0
        public async Task Should_recursively_delete_folder(FtpEncryption encryption)
        {
            string randomDirectoryName = Guid.NewGuid().ToString();

            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                await sut.LoginAsync();

                await sut.CreateTestResourceWithNameAsync("penguin.jpg", $"{randomDirectoryName}/1/penguin.jpg");

                await sut.CreateDirectoryAsync($"{randomDirectoryName}/1/1/1");

                await sut.CreateDirectoryAsync($"{randomDirectoryName}/1/1/2");

                await sut.CreateDirectoryAsync($"{randomDirectoryName}/1/2/2");

                await sut.CreateDirectoryAsync($"{randomDirectoryName}/2/2/2");

                (await sut.ListDirectoriesAsync()).Any(x => x.Name == randomDirectoryName).Should().BeTrue();
                try
                {
                    await sut.DeleteDirectoryAsync(randomDirectoryName);
                }
                catch (Exception e)
                {
                    throw new Exception(e.ToAsyncString());
                }

                (await sut.ListDirectoriesAsync()).Any(x => x.Name == randomDirectoryName).Should().BeFalse();
            }
        }
        public async Task Should_throw_exception_when_file_nonexistent(FtpEncryption encryption)
        {
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                await sut.LoginAsync();

                await Assert.ThrowsAsync <FtpException>(() => sut.GetFileSizeAsync($"{Guid.NewGuid()}.png"));
            }
        }
        public async Task Should_set_as_binary(FtpEncryption encryption)
        {
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                await sut.LoginAsync();

                await sut.SetTransferMode(FtpTransferMode.Binary);
            }
        }
        public async Task Should_create_directory_structure_recursively(FtpEncryption encryption)
        {
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;

                var guid = Guid.NewGuid().ToString();
                await sut.LoginAsync();

                await sut.SetClientName(nameof( Should_create_directory_structure_recursively ));

                await sut.CreateDirectoryAsync($"{guid}/abc/123");

                (await sut.ListDirectoriesAsync()).ToList()
                .Any(x => x.Name == guid)
                .Should().BeTrue();

                await sut.ChangeWorkingDirectoryAsync(guid);

                (await sut.ListDirectoriesAsync()).ToList()
                .Any(x => x.Name == "abc")
                .Should().BeTrue();
                await sut.ChangeWorkingDirectoryAsync("/");

                await sut.DeleteDirectoryAsync($"/{guid}/abc/123");

                await sut.DeleteDirectoryAsync($"/{guid}/abc");

                await sut.DeleteDirectoryAsync(guid);
            }
        }
Esempio n. 18
0
        public async Task Should_upload_file_to_subdirectory_when_given_as_basepath(FtpEncryption encryption)
        {
            var guid = Guid.NewGuid();

            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true,
                BaseDirectory = $"{guid}/abc/123/doraeme"
            }))
            {
                sut.Logger = Logger;
                string randomFileName = $"{guid}.jpg";

                await sut.LoginAsync();

                var fileinfo = ResourceHelpers.GetResourceFileInfo("penguin.jpg");

                using (var writeStream = await sut.OpenFileWriteStreamAsync($"another_level/{randomFileName}"))
                {
                    var fileReadStream = fileinfo.OpenRead();
                    await fileReadStream.CopyToAsync(writeStream);
                }

                await sut.ChangeWorkingDirectoryAsync("/".CombineAsUriWith( sut.Configuration.BaseDirectory )
                                                      .CombineAsUriWith("another_level"));

                var files = await sut.ListFilesAsync();

                files.Any(x => x.Name == randomFileName).Should().BeTrue();

                await sut.DeleteDirectoryAsync($"/{guid}");
            }
        }
        public async Task Should_present_read_stream_and_deliver_file(FtpEncryption encryption)
        {
            string randomFileName = $"{Guid.NewGuid()}.jpg";
            var    tempFile       = ResourceHelpers.GetTempFileInfo();

            tempFile.Length.Should().Be(0);

            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                await sut.LoginAsync();

                await sut.CreateTestResourceWithNameAsync("test.png", randomFileName);

                using (var ftpReadStream = await sut.OpenFileReadStreamAsync(randomFileName))
                {
                    using (var fileWriteStream = tempFile.OpenWrite())
                    {
                        await ftpReadStream.CopyToAsync(fileWriteStream);
                    }
                }

                await sut.DeleteFileAsync(randomFileName);
            }

            tempFile.Exists.Should().BeTrue();
            tempFile.Refresh();
            tempFile.Length.Should().NotBe(0);
            tempFile.Delete();
        }
        public async Task Should_fail_when_changing_to_a_nonexistent_directory(FtpEncryption encryption)
        {
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                await sut.LoginAsync();

                await sut.SetClientName(nameof( Should_fail_when_changing_to_a_nonexistent_directory ));

                await Assert.ThrowsAsync <FtpException>(() => sut.ChangeWorkingDirectoryAsync(Guid.NewGuid().ToString()));
            }
        }
Esempio n. 21
0
        public async Task Should_rename_directory(FtpEncryption encryption)
        {
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true,
                TimeoutSeconds = 20
            }))
            {
                sut.Logger = Logger;
                string oldRandomDirectoryName = Guid.NewGuid().ToString();
                string newRandomDirectoryName = Guid.NewGuid().ToString();

                await sut.LoginAsync();

                await sut.CreateDirectoryAsync(oldRandomDirectoryName);


                (await sut.ListDirectoriesAsync()).Any(x => x.Name == oldRandomDirectoryName).Should().BeTrue();

                await sut.RenameAsync(oldRandomDirectoryName, newRandomDirectoryName);

                var directoriesAfterRename = await sut.ListDirectoriesAsync();

                directoriesAfterRename.Any(x => x.Name == oldRandomDirectoryName).Should().BeFalse();
                directoriesAfterRename.Any(x => x.Name == newRandomDirectoryName).Should().BeTrue();

                await sut.DeleteDirectoryAsync(newRandomDirectoryName);

                await sut.LogOutAsync();
            }
        }
Esempio n. 22
0
        public async Task Should_delete_file(FtpEncryption encryption)
        {
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                string randomFileName = $"{Guid.NewGuid()}.jpg";
                await sut.LoginAsync();

                var fileinfo = ResourceHelpers.GetResourceFileInfo("penguin.jpg");

                Logger.LogDebug("Writing the file");
                using (var writeStream = await sut.OpenFileWriteStreamAsync(randomFileName))
                {
                    var fileReadStream = fileinfo.OpenRead();
                    await fileReadStream.CopyToAsync(writeStream);
                }

                Logger.LogDebug("Listing the directory");
                (await sut.ListFilesAsync()).Any(x => x.Name == randomFileName).Should().BeTrue();

                Logger.LogDebug("Deleting the file");
                await sut.DeleteFileAsync(randomFileName);

                Logger.LogDebug("Listing the firector");
                (await sut.ListFilesAsync()).Any(x => x.Name == randomFileName).Should().BeFalse();
            }
        }
        public async Task Should_change_to_deep_directory_when_exists(FtpEncryption encryption)
        {
            string[] randomDirectoryNames =
            {
                Guid.NewGuid().ToString(),
                Guid.NewGuid().ToString()
            };
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                string joinedPath = string.Join("/", randomDirectoryNames);
                await sut.LoginAsync();

                await sut.CreateDirectoryAsync(joinedPath);

                await sut.ChangeWorkingDirectoryAsync(joinedPath);

                sut.WorkingDirectory.Should().Be($"/{joinedPath}");

                foreach (string directory in randomDirectoryNames.Reverse())
                {
                    await sut.ChangeWorkingDirectoryAsync("../");

                    await sut.DeleteDirectoryAsync(directory);
                }
            }
        }
Esempio n. 24
0
        public async Task Should_be_able_to_connect_and_disconnect_as_anonymous_user(FtpEncryption encryption)
        {
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;
                sut.IsConnected.Should().BeFalse();
                await sut.LoginAsync();

                sut.IsConnected.Should().BeTrue();
                await sut.LogOutAsync();

                sut.IsConnected.Should().BeFalse();
            }
        }
Esempio n. 25
0
        public async Task Should_throw_exception_when_folder_nonexistent(FtpEncryption encryption)
        {
            using (var sut = new FtpClient(new FtpClientConfiguration
            {
                Host = Program.FtpConfiguration.Host,
                Username = Program.FtpConfiguration.Username,
                Password = Program.FtpConfiguration.Password,
                Port = encryption == FtpEncryption.Implicit
                    ? 990
                    : Program.FtpConfiguration.Port,
                EncryptionType = encryption,
                IgnoreCertificateErrors = true
            }))
            {
                sut.Logger = Logger;

                string randomDirectoryName = Guid.NewGuid().ToString();
                await sut.LoginAsync();

                await Assert.ThrowsAsync <FtpException>(() => sut.DeleteDirectoryAsync(randomDirectoryName));

                await sut.LogOutAsync();
            }
        }
Esempio n. 26
0
        /// <summary>
        /// FTP下载
        /// </summary>
        /// <param name="ip">ftp服务主机ip</param>
        /// <param name="username">ftp用户名</param>
        /// <param name="password">ftp用户密码</param>
        /// <param name="baseDirectory">基础目录</param>
        /// <param name="remotepath">文件路径</param>
        /// <param name="localDirectory">本地保存目录</param>
        /// <param name="port">端口号,默认21</param>
        /// <param name="ftpEncryption"></param>
        /// <param name="ignoreCertificateErrors"></param>
        /// <returns></returns>
        public static async Task <bool> Download(string ip, string username, string password, string baseDirectory, string remotepath, string localDirectory, int port = 21, FtpEncryption ftpEncryption = FtpEncryption.Implicit, bool ignoreCertificateErrors = true)
        {
            var ftpConfig = new FtpConfig
            {
                Host           = ip,
                Port           = port,
                UserName       = username,
                Password       = password,
                BaseDirectory  = baseDirectory,
                RemotePath     = remotepath,
                LocalDirectory = localDirectory
            };

            return(await Download(ftpConfig, ftpEncryption, ignoreCertificateErrors));
        }