public void ReturnsNullWhenActiveWorkersExistAndIsNotTimedOut() { var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.MaxValue }; var repository = new Mock<IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns(new Mock<IWorkItem>().Object); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.Null(unitOfWork); }
public void ReturnsNullWhenActiveWorkersExistAndIsNotTimedOut() { var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.MaxValue }; var repository = new Mock <IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns(new Mock <IWorkItem>().Object); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.Null(unitOfWork); }
public void JobToBeExecuted_Positive() { var fakeServiceProvider = new FakeServiceProvider(); var listener = new DIJobListener(fakeServiceProvider); var fakeJob = new FakeJob(); var context = new FakeJobExecutionContext { JobInstance = fakeJob }; listener.JobToBeExecuted(context).Wait(); Assert.Equal(fakeServiceProvider, fakeJob.ServiceProvider); }
public void ReturnsUnitOfWorkWhenNoActiveWorkers() { var job = new FakeJob { Name = "jobname" }; var repository = new Mock <IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns((IWorkItem)null); repository.Setup(r => r.RunInTransaction(It.IsAny <Action>())).Callback <Action>(a => a()); repository.Setup(r => r.CreateWorkItem("worker-id", job)).Returns(123); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.NotNull(unitOfWork); }
public async Task WaitsForScheduleBeforeRunningWrappedJob() { var clock = Clock.DefaultClock; using (var cts = new CancellationTokenSource()) { var job = new FakeJob(cts, clock); var fakeSchedule = new FakeSchedule(2); var scheduledJob = new ScheduledJob <FakeJob>(() => job, fakeSchedule, NullLoggerFactory.Instance, clock); var timeBefore = clock.UtcNow; await Assert.ThrowsAsync <OperationCanceledException>(() => scheduledJob.RunAsync(cts.Token)); Assert.True(job.RunTime.Subtract(timeBefore) >= TimeSpan.FromSeconds(2)); } }
public void ReturnsNullWhenActiveWorkersExistWithinTransaction() { var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.MaxValue }; var complete = new Mock<IWorkItem>(); complete.Setup(wi => wi.Completed).Returns(DateTime.UtcNow); var active = new Mock<IWorkItem>(); active.Setup(wi => wi.Completed).Returns((DateTime?)null); var activeWorkerQueue = new Queue<IWorkItem>(new[] { complete.Object, active.Object }); var repository = new Mock<IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns(activeWorkerQueue.Dequeue); repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a()); repository.Setup(r => r.CreateWorkItem("worker-id", job)).Throws(new InvalidOperationException()); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.Null(unitOfWork); }
public void ReturnsUnitOfWorkWhenLastActiveWorkerIsTimedOut() { var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.FromSeconds(10) }; var workItem = new Mock <IWorkItem>(); workItem.Setup(w => w.Id).Returns(1233); workItem.Setup(w => w.Started).Returns(DateTime.UtcNow.AddSeconds(-11)); var repository = new Mock <IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns(workItem.Object); repository.Setup(r => r.RunInTransaction(It.IsAny <Action>())).Callback <Action>(a => a()); repository.Setup(r => r.CreateWorkItem("worker-id", job)).Returns(123); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.NotNull(unitOfWork); repository.Verify(r => r.SetWorkItemFailed(1233, It.IsAny <TimeoutException>())); }
public void ReturnsNullWhenActiveWorkersExistWithinTransaction() { var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.MaxValue }; var complete = new Mock <IWorkItem>(); complete.Setup(wi => wi.Completed).Returns(DateTime.UtcNow); var active = new Mock <IWorkItem>(); active.Setup(wi => wi.Completed).Returns((DateTime?)null); var activeWorkerQueue = new Queue <IWorkItem>(new[] { complete.Object, active.Object }); var repository = new Mock <IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns(activeWorkerQueue.Dequeue); repository.Setup(r => r.RunInTransaction(It.IsAny <Action>())).Callback <Action>(a => a()); repository.Setup(r => r.CreateWorkItem("worker-id", job)).Throws(new InvalidOperationException()); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.Null(unitOfWork); }
public void ReturnsUnitOfWorkWhenNoActiveWorkers() { var job = new FakeJob { Name = "jobname" }; var repository = new Mock<IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns((IWorkItem)null); repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a()); repository.Setup(r => r.CreateWorkItem("worker-id", job)).Returns(123); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.NotNull(unitOfWork); }
public void ReturnsUnitOfWorkWhenLastActiveWorkerIsTimedOut() { var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.FromSeconds(10) }; var workItem = new Mock<IWorkItem>(); workItem.Setup(w => w.Id).Returns(1233); workItem.Setup(w => w.Started).Returns(DateTime.UtcNow.AddSeconds(-11)); var repository = new Mock<IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns(workItem.Object); repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a()); repository.Setup(r => r.CreateWorkItem("worker-id", job)).Returns(123); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.NotNull(unitOfWork); repository.Verify(r => r.SetWorkItemFailed(1233, It.IsAny<TimeoutException>())); }