コード例 #1
0
        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());
        }
コード例 #2
0
        private FtpXboxGameRepository CreateSut(FtpXboxSettings settings)
        {
            var ftpClientFactory = new FtpClientFactory(settings);
            var sut = new FtpXboxGameRepository(ftpClientFactory, settings, _policyRegistry);

            return(sut);
        }
コード例 #3
0
        private static IXboxGameRepositoryFactory UseFtpAdapter(FtpXboxSettings ftpXboxSettings)
        {
            FtpClientFactory ftpClientFactory = new FtpClientFactory(ftpXboxSettings);

            IXboxGameRepositoryFactory xboxGameRepositoryFactory =
                new FtpXboxGameRepositoryFactory(ftpClientFactory, ftpXboxSettings);

            return(xboxGameRepositoryFactory);
        }
コード例 #4
0
        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>();
        }
コード例 #5
0
        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>();
        }
コード例 #6
0
        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();
        }
コード例 #7
0
        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();
        }
コード例 #8
0
        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>();
        }
コード例 #9
0
        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());
        }
コード例 #10
0
        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();
        }
コード例 #11
0
        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);
        }