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);
            }
示例#2
0
            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);
            }
示例#3
0
        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);
        }
示例#4
0
            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);
            }
示例#5
0
        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);
            }
示例#7
0
            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>()));
            }
示例#8
0
            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>()));
            }