public void JobsShouldFireWithHighPrecisionHeartbeat() { using (var manager = new JobManager()) { var did_run = false; manager.Initialize(); var job = new Mocks.MockFastJob(everyMilliseconds: JobManager.HIGH_PRECISION_HEARTBEAT_INTERVAL_MSEC * 2, action: (token) => { did_run = true; }); manager.LoadJobInstance(job); manager.EnableHighPrecisionHeartbeat = true; manager.Start(); var elapsed = Utility.Threading.BlockUntil(() => did_run, JobManager.HIGH_PRECISION_HEARTBEAT_INTERVAL_MSEC * 3); Assert.True(did_run); Assert.True(elapsed <= JobManager.HIGH_PRECISION_HEARTBEAT_INTERVAL_MSEC * 5); } }
public void JobFiringShouldRespectSchedule() { var RUN_COUNT = 10; var JOB_INTERVAL = JobManager.HIGH_PRECISION_HEARTBEAT_INTERVAL_MSEC * 5; var EXPECTED_TIME = JOB_INTERVAL * RUN_COUNT; var MAXIMUM_TIME = JOB_INTERVAL * (RUN_COUNT + 1); using (var manager = new JobManager()) { var runtimes = new List <DateTime>(); var complete_times = new List <DateTime>(); manager.Initialize(); manager.EnableHighPrecisionHeartbeat = true; var job = new Mocks.MockFastJob(everyMilliseconds: JOB_INTERVAL, action: (token) => { runtimes.Add(DateTime.UtcNow); }); job.Complete += (sender, event_args) => { complete_times.Add(DateTime.UtcNow); }; manager.LoadJobInstance(job); manager.Start(); var elapsed = Utility.Threading.BlockUntil(() => runtimes.Count == RUN_COUNT, timeout: MAXIMUM_TIME); //stop processing new events ... manager.Standby(); var diff_from_expected = Math.Abs(elapsed - EXPECTED_TIME); Assert.True(diff_from_expected < JobManager.HIGH_PRECISION_HEARTBEAT_INTERVAL_MSEC); Assert.Equal(RUN_COUNT, runtimes.Count); Assert.Equal(RUN_COUNT, complete_times.Count); } }