public async Task Start_WontRecoverBeforeIntervalTimeout_AfterFailedDB() { // Arrange var jobRepositoryMock = new Mock <IJobRepository>(); var settings = new HorariumSettings { IntervalStartJob = TimeSpan.FromSeconds(2), }; var runnerJobs = new RunnerJobs(jobRepositoryMock.Object, settings, new JsonSerializerSettings(), Mock.Of <IHorariumLogger>(), Mock.Of <IExecutorJob>(), Mock.Of <IUncompletedTaskList>()); jobRepositoryMock.SetupSequence(x => x.GetReadyJob(It.IsAny <string>(), It.IsAny <TimeSpan>())) .ThrowsAsync(new Exception()) .ReturnsAsync(new JobDb()); // Act runnerJobs.Start(); await Task.Delay(settings.IntervalStartJob - TimeSpan.FromMilliseconds(500)); // Assert jobRepositoryMock.Verify(r => r.GetReadyJob(It.IsAny <string>(), It.IsAny <TimeSpan>()), Times.Once); }
public async Task Start_ExecutionWithDelay_WithThrottle() { // Arrange var jobRepositoryMock = new Mock <IJobRepository>(); var settings = new HorariumSettings { IntervalStartJob = TimeSpan.FromSeconds(1), JobThrottleSettings = new JobThrottleSettings { UseJobThrottle = true, IntervalMultiplier = 1, JobRetrievalAttempts = 1 } }; var runnerJobs = new RunnerJobs(jobRepositoryMock.Object, settings, new JsonSerializerSettings(), Mock.Of <IHorariumLogger>(), Mock.Of <IExecutorJob>(), Mock.Of <IUncompletedTaskList>()); // Act runnerJobs.Start(); await Task.Delay(settings.IntervalStartJob - TimeSpan.FromMilliseconds(500)); jobRepositoryMock.Invocations.Clear(); await Task.Delay(settings.IntervalStartJob + settings.IntervalStartJob.Multiply(settings.JobThrottleSettings.IntervalMultiplier)); // Assert jobRepositoryMock.Verify(r => r.GetReadyJob(It.IsAny <string>(), It.IsAny <TimeSpan>()), Times.Once); }
public async Task StopAsync_AwaitsWhenAllCompleted() { // Arrange var jobRepositoryMock = new Mock <IJobRepository>(); var uncompletedTaskList = new Mock <IUncompletedTaskList>(); var cancellationToken = new CancellationTokenSource().Token; var settings = new HorariumSettings { IntervalStartJob = TimeSpan.FromSeconds(2), }; var runnerJobs = new RunnerJobs(jobRepositoryMock.Object, settings, new JsonSerializerSettings(), Mock.Of <IHorariumLogger>(), Mock.Of <IExecutorJob>(), uncompletedTaskList.Object); jobRepositoryMock.Setup(x => x.GetReadyJob(It.IsAny <string>(), It.IsAny <TimeSpan>())); // Act runnerJobs.Start(); await Task.Delay(TimeSpan.FromSeconds(1)); await runnerJobs.Stop(cancellationToken); // Assert uncompletedTaskList.Verify(x => x.WhenAllCompleted(cancellationToken), Times.Once); }
public void IntervalStartJob_IsValid() { var defaultIntervalStartJob = TimeSpan.FromMilliseconds(100); var settings = new HorariumSettings(); Assert.Equal(defaultIntervalStartJob, settings.IntervalStartJob); }
public ExecutorJob( IJobRepository jobRepository, IAdderJobs adderJobs, HorariumSettings settings) { _jobRepository = jobRepository; _adderJobs = adderJobs; _settings = settings; }
public RunnerJobs(IJobRepository jobRepository, HorariumSettings settings, JsonSerializerSettings jsonSerializerSettings, IHorariumLogger horariumLogger, IExecutorJob executorJob) { _jobRepository = jobRepository; _settings = settings; _jsonSerializerSettings = jsonSerializerSettings; _horariumLogger = horariumLogger; _executorJob = executorJob; }
private static void PrepareSettings(HorariumSettings settings, IServiceProvider serviceProvider) { if (settings.JobFactory is DefaultJobFactory) { settings.JobFactory = new JobFactory(serviceProvider); } if (settings.Logger is EmptyLogger) { settings.Logger = new HorariumLogger(serviceProvider.GetService <ILogger <HorariumLogger> >()); } }
public RunnerJobs(IJobRepository jobRepository, HorariumSettings settings, JsonSerializerSettings jsonSerializerSettings, IHorariumLogger horariumLogger, IExecutorJob executorJob, IUncompletedTaskList uncompletedTaskList) { _jobRepository = jobRepository; _settings = settings; _jsonSerializerSettings = jsonSerializerSettings; _horariumLogger = horariumLogger; _executorJob = executorJob; _uncompletedTaskList = uncompletedTaskList; }
public void AddHorariumServer_DefaultSettings_ReplaceForAspNetCore() { var service = new ServiceCollection(); var settings = new HorariumSettings(); service.AddHorariumServer(Mock.Of <IJobRepository>(), provider => settings); var descriptor = service.Single(x => x.ServiceType == typeof(IHorarium)); var horarium = descriptor.ImplementationFactory(Mock.Of <IServiceProvider>()); Assert.Equal(ServiceLifetime.Singleton, descriptor.Lifetime); Assert.Equal(typeof(IHorarium), descriptor.ServiceType); Assert.Equal(typeof(JobScopeFactory), settings.JobScopeFactory.GetType()); Assert.Equal(typeof(HorariumLogger), settings.Logger.GetType()); Assert.Equal(typeof(HorariumServer), horarium.GetType()); Assert.Contains(service, x => x.ImplementationType == typeof(HorariumServerHostedService)); }
public void AddHorariumServer_CustomSettings_DontReplaceForAspNetCore() { var serviceMock = new Mock <IServiceCollection>(); var service = serviceMock.Object; var settings = new HorariumSettings { JobScopeFactory = new JobScopeFactoryTest(), Logger = new LoggerTest() }; serviceMock.Setup(x => x.Add(It.IsAny <ServiceDescriptor>())) .Callback <ServiceDescriptor>(x => { }); service.AddHorariumServer(Mock.Of <IJobRepository>(), provider => settings); Assert.Equal(typeof(JobScopeFactoryTest), settings.JobScopeFactory.GetType()); Assert.Equal(typeof(LoggerTest), settings.Logger.GetType()); }
public void AddHorariumClient_DefaultSettings_ReplaceForAspNetCore() { var serviceMock = new Mock <IServiceCollection>(); var service = serviceMock.Object; ServiceDescriptor descriptor = null; var settings = new HorariumSettings(); serviceMock.Setup(x => x.Add(It.IsAny <ServiceDescriptor>())) .Callback <ServiceDescriptor>(x => descriptor = x); service.AddHorariumClient(Mock.Of <IJobRepository>(), provider => settings); var horarium = descriptor.ImplementationFactory(Mock.Of <IServiceProvider>()); Assert.Equal(ServiceLifetime.Singleton, descriptor.Lifetime); Assert.Equal(typeof(IHorarium), descriptor.ServiceType); Assert.Equal(typeof(JobScopeFactory), settings.JobScopeFactory.GetType()); Assert.Equal(typeof(HorariumLogger), settings.Logger.GetType()); Assert.Equal(typeof(HorariumClient), horarium.GetType()); }