[TestFixture]
public class FtpServiceIntegrationTests
{
private Process _ftpd;
private FtpService _ftpService;
private string _filename;
private string _server;
private readonly byte[] _data = new byte[10];
[TestFixtureSetUp]
public void OneTimeSetup()
{
new Random().NextBytes(_data);
var pi = new ProcessStartInfo("ftpdmin.exe", "./")
{
CreateNoWindow = true,
UseShellExecute = false
};
_ftpd = Process.Start(pi);
_ftpService = new FtpService(new NetworkCredential("me@localhost.com", ""));
var address = Dns.GetHostAddresses(Dns.GetHostName())[0];
_server = "ftp://" + address;
_filename = "Test.txt";
}
[Test]
public void CanUploadData()
{
_ftpService.Upload(new MemoryStream(_data), _server + "/" + _filename);
Assert.That(_ftpService.FileExists(_server + "/" + _filename));
}
[Test]
public void CanListFiles()
{
_ftpService.Upload(new MemoryStream(_data), _server + "/" + _filename);
var files = _ftpService.ListFiles(_server);
Assert.That(files.Any(f => f.ToLower() == _filename.ToLower()));
}
[Test]
public void CanCreateFolders()
{
var randnum = new Random().Next(100);
_ftpService.CreateFolder(_server + "/" + "Folder" + randnum);
Assert.That(_ftpService.FolderExists(_server + "/" + "Folder" + randnum));
}
[Test]
public void CanGetFileData()
{
_ftpService.Upload(new MemoryStream(_data), _server + "/" + _filename);
var returnedData = new byte[_data.Length];
_ftpService.Get(_server + "/" + _filename).Read(returnedData, 0, _data.Length);
Assert.AreEqual(_data, returnedData);
}
[Test]
public void CheckingForANonExistantFolderReturnsFalse()
{
Assert.IsFalse(_ftpService.FolderExists(_server + "/Folder/Test"));
}
[Test]
public void CheckingForANonExistantFileReturnsFalse()
{
Assert.IsFalse(_ftpService.FileExists(_server + "/" + "File" + new Random().Next(101, 200)));
}
[TestFixtureTearDown]
public void OneTimeTearDown()
{
_ftpd.Kill();
_ftpd.Dispose();
}