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 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);
            }
예제 #4
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>()));
            }
예제 #5
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 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>()));
            }