/// <summary> /// /// </summary> /// <param name="settings"></param> /// <param name="servers"></param> /// <param name="messageReceivers"></param> /// <remarks>internal nur, damit wir in den Tests rankommen</remarks> internal void CheckIfUpdateIsNecessaryAndEnqueueCommands(Settings settings, IEnumerable<IUpdatePackage> servers, IEnumerable<INotificationReceiver> messageReceivers) { if (_checkTimer.IsCheckForUpdatesNecessary(settings.Global.CheckIntervalMinutes)) { var commands = _commandBuilder.GetCommands(settings.Global.WorkFolder, servers, messageReceivers); foreach (var command in commands) { // Damit wir keine doppelte Arbeit machen, packen wir Commands nur dann rein, wenn noch kein Command für das gleiche // Update-Paket vorhanden ist. // Das klappt hier nur so einfach, weil wir ja genau genommen immer nur das CheckIfNewer-Command bekommen, und alles weitere // erst nach und nach in die Warteschlange kommt. if (!UpdatePackageInCommandAlreadyQueued(command, CommandsProducerConsumer.Queue)) { _logger.Debug("Queueing first command for {PackageName}", command.PackageName); CommandsProducerConsumer.Queue.TryAdd(command); } } } }
async Task IAutoUpdaterCommandCreator.NeverendingCreationLoop(Settings settings) { var servers = _configurationConverter.ConvertServers(settings.Servers); var messageReceivers = _configurationConverter.ConvertMessageReceivers(settings.Global.ResultMessageReceivers, settings.Global.EMailSettings, settings.Global.EMailPickupDirectory, settings.Global.EMailSenderName); await Task.Run(async () => { TimeSpan waitTime; while (true) { try { CheckIfUpdateIsNecessaryAndEnqueueCommands(settings, servers, messageReceivers); } catch (Exception ex) { _logger.Error("NeverendingCreationLoop: " + ex.Message + " @ " + ex.StackTrace); } waitTime = CalculateWaitTimeToNextMinute(_nowGetter); await Task.Delay(waitTime); } }); }
public void JsonFileConfigurationTest_Get_BasicConfiguration() { var content = @"{ 'global': { 'eMailSettings': { 'address': 'smtp.mailserver.com', 'username': '******', 'password': '******', 'useDefaultCredentials': 'false', }, 'eMailPickupDirectory': 'C:\\Mails\\Pickup\\', 'eMailSenderName': '*****@*****.**', 'workFolder': 'C:\\Temp\\IwAutoUpdater\\', 'checkIntervalMinutes': 15, 'resultMessageReceivers': [ { 'type': 'EMail', 'receiver': '*****@*****.**' } ] }, 'servers': [ { 'type': 'localFile', 'path': '//otherSystem/buildDir/Server1_Packaged.zip', 'downloadOnly': 'false', 'skipDatabaseUpdate': 'false', 'installerCommand': 'install-stuff.bat', 'installerCommandArguments': 'fromA toB', 'databaseUpdaterCommand': 'update-db.exe', 'databaseUpdaterCommandArguments': '--cs=""<<connectionString>>""', 'connectionString': 'Server=myServerAddress;Database=myDataBase;Integrated Security=true;', 'checkUrlsAfterInstallation': [ 'http://www.firsturl.de', 'https://*****:*****@wow.com", ResultMessageReceivers = new MessageReceiver[] { new MessageReceiver() { Receiver = "*****@*****.**", Type = Base.MessageReceiverType.EMail } }, WorkFolder = "C:\\Temp\\IwAutoUpdater\\" }, Servers = new ServerSettings[] { new ServerSettings() { DownloadOnly = false, Path = @"//otherSystem/buildDir/Server1_Packaged.zip", SkipDatabaseUpdate = false, Type = Base.GetDataMethod.LocalFile, InstallerCommand = "install-stuff.bat", InstallerCommandArguments = "fromA toB", DatabaseUpdaterCommand = "update-db.exe", DatabaseUpdaterCommandArguments = @"--cs=""<<connectionString>>""", ConnectionString = "Server=myServerAddress;Database=myDataBase;Integrated Security=true;", CheckUrlsAfterInstallation = new[] { "http://www.firsturl.de", "https://*****:*****@".\Webmenue\versioninfo.xml" } } }; Assert.IsNotNull(actual); Assert.AreEqual(expected.Global.CheckIntervalMinutes, actual.Global.CheckIntervalMinutes); Assert.AreEqual(expected.Global.EMailSettings.Password, actual.Global.EMailSettings.Password); Assert.AreEqual(expected.Global.EMailSettings.Address, actual.Global.EMailSettings.Address); Assert.AreEqual(expected.Global.EMailSettings.Username, actual.Global.EMailSettings.Username); Assert.AreEqual(expected.Global.EMailSettings.UseDefaultCredentials, actual.Global.EMailSettings.UseDefaultCredentials); Assert.AreEqual(expected.Global.EMailPickupDirectory, actual.Global.EMailPickupDirectory); Assert.AreEqual(expected.Global.EMailSenderName, actual.Global.EMailSenderName); Assert.AreEqual(expected.Global.ResultMessageReceivers.ElementAt(0).Receiver, actual.Global.ResultMessageReceivers.ElementAt(0).Receiver); Assert.AreEqual(expected.Global.ResultMessageReceivers.ElementAt(0).Type, actual.Global.ResultMessageReceivers.ElementAt(0).Type); Assert.AreEqual(expected.Global.WorkFolder, actual.Global.WorkFolder); Assert.AreEqual(expected.Servers.ElementAt(0).Path, actual.Servers.ElementAt(0).Path); Assert.AreEqual(expected.Servers.ElementAt(0).Type, actual.Servers.ElementAt(0).Type); Assert.AreEqual(expected.Servers.ElementAt(0).DownloadOnly, actual.Servers.ElementAt(0).DownloadOnly); Assert.AreEqual(expected.Servers.ElementAt(0).SkipDatabaseUpdate, actual.Servers.ElementAt(0).SkipDatabaseUpdate); Assert.AreEqual(expected.Servers.ElementAt(0).InstallerCommand, actual.Servers.ElementAt(0).InstallerCommand); Assert.AreEqual(expected.Servers.ElementAt(0).InstallerCommandArguments, actual.Servers.ElementAt(0).InstallerCommandArguments); Assert.AreEqual(expected.Servers.ElementAt(0).DatabaseUpdaterCommand, actual.Servers.ElementAt(0).DatabaseUpdaterCommand); Assert.AreEqual(expected.Servers.ElementAt(0).DatabaseUpdaterCommandArguments, actual.Servers.ElementAt(0).DatabaseUpdaterCommandArguments); Assert.AreEqual(expected.Servers.ElementAt(0).ConnectionString, actual.Servers.ElementAt(0).ConnectionString); Assert.IsTrue(expected.Servers.ElementAt(0).CheckUrlsAfterInstallation.SequenceEqual(actual.Servers.ElementAt(0).CheckUrlsAfterInstallation)); Assert.AreEqual(expected.Servers.ElementAt(0).CheckUrlProxySettings, actual.Servers.ElementAt(0).CheckUrlProxySettings); Assert.AreEqual(expected.Servers.ElementAt(0).ReadVersionInfoFrom, actual.Servers.ElementAt(0).ReadVersionInfoFrom); }
public void TestInitialize() { TestCleanup(); _settings = new Settings(); _settings.Global = new GlobalSettings() { CheckIntervalMinutes = 5 }; _nowGetterMock = new NowGetterMock(); _checkTimerMock = new CheckTimerMock(); _configurationConverterMock = new ConfigurationConverterMock(); _commandBuilderMock = new CommandBuilderMock(); _loggerMock = new LoggerMock(); _autoUpdaterCommandCreator = new AutoUpdaterCommandCreator(_checkTimerMock, _configurationConverterMock, _commandBuilderMock, _nowGetterMock, _loggerMock); }