public void Store_WhenProvidingAStream_ShouldStoreFileCorrectly() { FtpXboxSettings settings = new FtpXboxSettings() { Host = Global.Settings.XboxFtpHost, User = Global.Settings.XboxFtpUser, Password = Global.Settings.XboxFtpPassword, GameRootDirectory = "/F/Games" }; var sut = CreateSut(settings); sut.Connect(); MemoryStream data = new MemoryStream(); data.Write(File.ReadAllBytes("SampleFileC.txt")); // act sut.Store("GameA", "SampleFileC.txt", data); // assert bool exists = _ftpClient.FileExists("/F/Games/GameA/SampleFileC.txt"); exists.Should().BeTrue(); FtpListItem fileInfo = _ftpClient.GetObjectInfo("/F/Games/GameA/SampleFileC.txt"); fileInfo.Size.Should().Be(42); MemoryStream memoryStream = new MemoryStream(); _ftpClient.Download(memoryStream, "/F/Games/GameA/SampleFileC.txt"); memoryStream.Length.Should().Be(42); var actualData = memoryStream.ToArray(); actualData.Should().BeEquivalentTo(data.ToArray()); }
private FtpXboxGameRepository CreateSut(FtpXboxSettings settings) { var ftpClientFactory = new FtpClientFactory(settings); var sut = new FtpXboxGameRepository(ftpClientFactory, settings, _policyRegistry); return(sut); }
private static IXboxGameRepositoryFactory UseFtpAdapter(FtpXboxSettings ftpXboxSettings) { FtpClientFactory ftpClientFactory = new FtpClientFactory(ftpXboxSettings); IXboxGameRepositoryFactory xboxGameRepositoryFactory = new FtpXboxGameRepositoryFactory(ftpClientFactory, ftpXboxSettings); return(xboxGameRepositoryFactory); }
public void Connect_WhenCredentialsAreValid_ShouldConnect() { FtpXboxSettings settings = new FtpXboxSettings() { Host = Global.Settings.XboxFtpHost, User = Global.Settings.XboxFtpUser, Password = Global.Settings.XboxFtpPassword, GameRootDirectory = "Games" }; var sut = CreateSut(settings); // act Action connectWithValidCredentials = () => sut.Connect(); // assert connectWithValidCredentials.Should().NotThrow <Exception>(); }
public void Connect_WhenUserIsIncorrect_ShouldThrow() { FtpXboxSettings settings = new FtpXboxSettings() { Host = Global.Settings.XboxFtpHost, User = "******", Password = Global.Settings.XboxFtpPassword, GameRootDirectory = "Games" }; var sut = CreateSut(settings); // act Action connectWithIncorrectUser = () => sut.Connect(); // assert connectWithIncorrectUser.Should().Throw <FtpException>(); }
public void Exists_WhenGameFolderExistsAndFileExistsAndSizeIsEqual_ShouldReturnTrue() { FtpXboxSettings settings = new FtpXboxSettings() { Host = Global.Settings.XboxFtpHost, User = Global.Settings.XboxFtpUser, Password = Global.Settings.XboxFtpPassword, GameRootDirectory = "/F/Games" }; var sut = CreateSut(settings); sut.Connect(); // act var exists = sut.Exists("GameA", "SampleFile.txt", 17); // assert exists.Should().BeTrue(); }
public void Exists_WhenGameFolderExists_ButPathDoesNot_ShouldReturnFalse() { FtpXboxSettings settings = new FtpXboxSettings() { Host = Global.Settings.XboxFtpHost, User = Global.Settings.XboxFtpUser, Password = Global.Settings.XboxFtpPassword, GameRootDirectory = "Games" }; var sut = CreateSut(settings); sut.Connect(); // act var exists = sut.Exists("GameA", "fileThatDoesNotExist.txt", 5000); // assert exists.Should().BeFalse(); }
public void Disconnect_WhenConnected_ShouldNotThrow() { FtpXboxSettings settings = new FtpXboxSettings() { Host = Global.Settings.XboxFtpHost, User = Global.Settings.XboxFtpUser, Password = Global.Settings.XboxFtpPassword, GameRootDirectory = "Games" }; var sut = CreateSut(settings); sut.Connect(); // act Action disconnect = () => sut.Disconnect(); // assert disconnect.Should().NotThrow <Exception>(); }
public void Store_WhenFtpDisconnects_ShouldReconnectAndContinue() { FtpXboxSettings settings = new FtpXboxSettings() { Host = Global.Settings.XboxFtpHost, User = Global.Settings.XboxFtpUser, Password = Global.Settings.XboxFtpPassword, GameRootDirectory = "/F/Games" }; FtpClient testFtpClient = new FtpClient(settings.Host, settings.Port, settings.User, settings.Password); SingletonFtpClientFactory ftpClientFactory = new SingletonFtpClientFactory(testFtpClient); var sut = CreateSut(settings, ftpClientFactory); MemoryStream data = new MemoryStream(); data.Write(File.ReadAllBytes("SampleFileC.txt")); sut.Connect(); testFtpClient.Disconnect(); // act sut.Store("GameA", "SampleFileD.txt", data); // assert bool exists = _ftpClient.FileExists("/F/Games/GameA/SampleFileD.txt"); exists.Should().BeTrue(); FtpListItem fileInfo = _ftpClient.GetObjectInfo("/F/Games/GameA/SampleFileD.txt"); fileInfo.Size.Should().Be(42); MemoryStream memoryStream = new MemoryStream(); _ftpClient.Download(memoryStream, "/F/Games/GameA/SampleFileD.txt"); memoryStream.Length.Should().Be(42); var actualData = memoryStream.ToArray(); actualData.Should().BeEquivalentTo(data.ToArray()); }
public void CreateGame_ShouldCreateDirectoryUnderGameRootDirectory() { FtpXboxSettings settings = new FtpXboxSettings() { Host = Global.Settings.XboxFtpHost, User = Global.Settings.XboxFtpUser, Password = Global.Settings.XboxFtpPassword, GameRootDirectory = "/F/Games" }; var sut = CreateSut(settings); sut.Connect(); // act sut.CreateGame("GameC"); // assert bool exists = _ftpClient.DirectoryExists("/F/Games/GameC"); exists.Should().BeTrue(); }
static void Main(string[] args) { SettingsLoaderIni settingsLoader = new SettingsLoaderIni(args); var settings = settingsLoader.Load(); string correlationId = Guid.NewGuid().ToString(); Log.Logger = SerilogConfiguration.Create("XboxFtpUpload", settings, correlationId).CreateLogger(); Log.Information("Starting XBox FTP Upload"); SerilogProgressNotifier serilogNotifier = new SerilogProgressNotifier(Log.Logger); TerminalGuiAdapter adapter = new TerminalGuiAdapter(); adapter.Initialize(); TerminalGuiProgressNotifier terminalGuiProgressNotifier = adapter.CreateNotifier(); IProgressNotifier notifier = new ChainedProgressNotifier(new List <IProgressNotifier>() { terminalGuiProgressNotifier, serilogNotifier }); try { IXboxGameRepositoryFactory xboxGameRepositoryFactory = null; if (settings.TestMode) { xboxGameRepositoryFactory = UseInMemoryAdapter(); } else { FtpXboxSettings xboxFtpsettings = new FtpXboxSettings() { Host = settings.Host, Password = settings.Password, User = settings.User, Port = settings.Port, GameRootDirectory = settings.GameRootDirectory }; xboxGameRepositoryFactory = UseFtpAdapter(xboxFtpsettings); } UploadArchivesUseCase useCase = new UploadArchivesUseCase(xboxGameRepositoryFactory, notifier, new ZipFileProcessor()); List <string> gamesToUpload = new List <string>(); if (!string.IsNullOrWhiteSpace(settings.GameToUpload)) { Log.Warning("Found single games for upload specified"); gamesToUpload.Add(settings.GameToUpload); } else if (!string.IsNullOrWhiteSpace(settings.GamesToUploadFile)) { if (!File.Exists(settings.GamesToUploadFile)) { Log.Warning("File specified in GameToUploadFile does not exist"); adapter.Shutdown(); Environment.Exit(-1); } gamesToUpload = File.ReadAllLines(settings.GamesToUploadFile).Select(x => RemoveSurroundingQuotes(x)) .ToList(); } else if (settings.GamesToUpload == null || settings.GamesToUpload.Count == 0) { Log.Warning("Found no games configured to upload"); adapter.Shutdown(); Environment.Exit(0); } else { gamesToUpload = settings.GamesToUpload; } useCase.Execute(gamesToUpload); } catch (Exception ex) { Log.Error(ex, "Unhandled exception occured"); adapter.Shutdown(); Environment.Exit(-1); } Log.Information("Finished XBox FTP Upload"); adapter.Shutdown(); Environment.Exit(0); }