public void CrontabNextRun() { var target = new Crontab("* * * * * * *"); Assert.AreEqual(target.Next(new DateTime(2000, 1, 1, 1, 1, 0,0)), new DateTime(2000, 1, 1, 1, 1, 0,0)); Assert.AreEqual(target.Next(new DateTime(2200, 1, 1, 1, 1, 0)), new DateTime(2200, 1, 1, 1, 1, 0)); Assert.AreEqual(target.Next(new DateTime(1000, 1, 1, 1, 1, 0)), new DateTime(1000, 1, 1, 1, 1, 0)); target = new Crontab("* */1 * * * * *"); Assert.AreEqual(target.Next(new DateTime(2000, 1, 1, 1, 1, 0)), new DateTime(2000, 1, 1, 1, 1, 0)); target = new Crontab("* * * * * * 2008"); Assert.AreEqual(target.Next(new DateTime(2007, 12, 31, 23,59, 59)), new DateTime(2008, 1, 1, 0, 0, 0)); target = new Crontab("* * * * 2 * 2008"); Assert.AreEqual(target.Next(new DateTime(2008, 1, 31, 23, 59, 59)), new DateTime(2008, 2, 1, 0, 0, 0)); target = new Crontab("* * * 2 * * 2008"); Assert.AreEqual(target.Next(new DateTime(2008, 1, 1, 23, 59, 59)), new DateTime(2008, 1, 2, 0, 0, 0)); target = new Crontab("* * * * * 3 *"); Assert.AreEqual(target.Next(new DateTime(2012, 11, 27, 23, 59, 59)), new DateTime(2012, 11, 28, 0, 0, 0)); target = new Crontab("* * * * * 1 *"); Assert.AreEqual(target.Next(new DateTime(2012, 11, 27, 23, 59, 59)), new DateTime(2012, 12, 3, 0, 0, 0)); target = new Crontab("* * * * * 1 *"); Assert.AreEqual(target.Next(new DateTime(2012, 11, 27, 23, 59, 59)), new DateTime(2012, 12, 3, 0, 0, 0)); target = new Crontab("* 2-59/3 1,9,22 11-26 1-6 ? 2003"); Assert.AreEqual(target.Next(new DateTime(2003, 1, 11, 9, 5, 0)), new DateTime(2003, 1, 11, 9, 5, 0)); Assert.AreEqual(target.Next(new DateTime(2003, 1, 11, 9, 6, 0)), new DateTime(2003, 1, 11, 9, 8, 0)); Assert.AreEqual(target.Next(new DateTime(2003, 1, 11, 23, 6, 0)), new DateTime(2003, 1, 12, 1, 2, 0)); Assert.AreEqual(target.Next(new DateTime(2003, 1, 26, 23, 00, 0)), new DateTime(2003, 2, 11, 1, 2, 0)); target = new Crontab("* 2-59/3 1,9,22 11-26 1-6 ? 2003-2012"); Assert.AreEqual(target.Next(new DateTime(2008, 7, 11, 9, 5, 0)), new DateTime(2009, 1, 11, 1, 2, 0)); }
public void CrontabWithSeconds() { var target = new Crontab("10 */1 * * * * *", true); var nxt = target.Next(); var now = DateTime.Now; now += TimeSpan.FromMinutes(1); now += TimeSpan.FromSeconds(11); Assert.IsTrue(now>=nxt); Assert.IsTrue(target.MayRunAt(new DateTime(2000, 1, 1, 1, 1, 10))); target = new Crontab("* * * * * * *", true); Assert.IsTrue(target.MayRunAt(new DateTime(2000, 1, 1, 1, 1, 0))); target = new Crontab("10* * * * * * *", true); Assert.IsTrue(target.MayRunAt(new DateTime(2000, 1, 1, 1, 1, 10))); target = new Crontab("* */1 * * * * *", true); Assert.IsTrue(target.MayRunAt(new DateTime(2000, 1, 1, 1, 1, 0))); target = new Crontab("* 2-59/3 1,9,22 11-26 1-6 ? 2003", true); Assert.IsTrue(target.MayRunAt(new DateTime(2003, 1, 11, 9, 5, 0))); Assert.IsFalse(target.MayRunAt(new DateTime(2000, 1, 11, 9, 5, 0))); Assert.IsFalse(target.MayRunAt(new DateTime(2000, 1, 11, 9, 6, 0))); target = new Crontab("* 2-59/3 1,9,22 11-26 1-6 ? 2003-2012", true); Assert.IsTrue(target.MayRunAt(new DateTime(2008, 1, 11, 9, 5, 0))); target = new Crontab("* 0 0/1 * * * ?", true); Assert.IsFalse(target.MayRunAt(new DateTime(2000, 1, 1, 1, 1, 0))); Assert.IsTrue(target.MayRunAt(new DateTime(2000, 1, 1, 1, 0, 0))); }
public void CrontabWithDateInput() { var now = DateTime.Now; var target = new Crontab(now,5000); var good = new DateTime(now.Ticks + 5000* TimeSpan.TicksPerMillisecond); var bad = new DateTime(now.Ticks + 1040 * TimeSpan.TicksPerMillisecond); var next1 = target.Next(); Thread.Sleep(100); var next = target.Next(); Assert.IsTrue(target.MayRunAt(good)); Assert.IsFalse(target.MayRunAt(bad)); var showDiff = string.Format("Next <{0}> now <{1}>", next1, now); Assert.AreEqual(next1.DayOfYear, now.DayOfYear,showDiff); Assert.AreEqual(next1.Hour, now.Hour,showDiff); Assert.AreEqual(next1.Minute, now.Minute,showDiff); //Assert.IsTrue(Math.Abs(next1.Second - now.Second) <= 1, showDiff); Assert.AreEqual(next.DayOfYear, good.DayOfYear); Assert.AreEqual(next.Hour, good.Hour); Assert.AreEqual(next.Minute, good.Minute); Assert.IsTrue(Math.Abs(next.Second - good.Second) <= 1); DateTime? newNext = new DateTime(next.Ticks + 2600*TimeSpan.TicksPerMillisecond); var wrongNext = target.Next(newNext); Assert.IsFalse(Math.Abs(newNext.Value.Second - wrongNext.Second) <= 1); }