public void WorkerSleepsIfNoJobsFound() { // Arrange var service = Substitute.For<IService>(); var db = Substitute.For<IJobsDb>(); db.GetNextJob().ReturnsForAnyArgs((Job)null); var worker = new Worker(service, db) { PollRate = 1000 }; worker.DoWork = false; // Act var sw = Stopwatch.StartNew(); worker.Poll(); sw.Stop(); // Assert Assert.That(sw.ElapsedMilliseconds, Is.AtLeast(950)); }
public void WorkerSleepsUntilJobFound() { // Arrange var service = Substitute.For<IService>(); var db = Substitute.For<IJobsDb>(); var worker = new Worker(service, db) { PollRate = 500 }; SubstituteExtensions.ReturnsForAnyArgs( service.CompareDynamic(Arg.Any<dynamic>(), Arg.Any<dynamic>(), Arg.Any<bool>()), new[] { new Comparison { Id = new ObjectId(Randomator.RandomFromSample(24, "0123456789ABCDEF")) } }); // Third try will return a job var job = FakeJobs.PendingCompareJob; db.GetNextJob().ReturnsForAnyArgs(null, null, job); var counter = 0; // Stop work on the third call db.When(j => j.GetNextJob()).Do(x => { if (++counter == 4) worker.DoWork = false; }); // Act var sw = Stopwatch.StartNew(); worker.Poll(); sw.Stop(); // Assert Assert.That(sw.ElapsedMilliseconds, Is.AtLeast(950)); Assert.AreEqual("C", job.Status); }