public void SetUp() { _container = SupportContainer.Reset(); _service = new SchedulingServiceImpl( new TimeSourceServiceImpl(), _container.Resolve <ILockManager>()); _mgmtService = new SchedulingMgmtServiceImpl(); // 2-by-2 table of buckets and slots var buckets = new ScheduleBucket[3]; _slots = new long[buckets.Length][]; for (int i = 0; i < buckets.Length; i++) { buckets[i] = _mgmtService.AllocateBucket(); _slots[i] = new long[2]; for (int j = 0; j < _slots[i].Length; j++) { _slots[i][j] = buckets[i].AllocateSlot(); } } _callbacks = new SupportScheduleCallback[5]; for (int i = 0; i < _callbacks.Length; i++) { _callbacks[i] = new SupportScheduleCallback(); } }
public void TestIncorrectRemove() { var evaluator = new SchedulingServiceImpl(new TimeSourceServiceImpl(), _container.Resolve <ILockManager>()); var callback = new SupportScheduleCallback(); evaluator.Remove(callback, 0); }
public void TestIncorrectRemove() { var evaluator = new SchedulingServiceImpl(new TimeSourceServiceImpl()); var callback = new SupportScheduleCallback(); evaluator.Remove(callback, 0); }
public void SetUp() { service = new SchedulingServiceImpl(-1, new TimeSourceServiceImpl()); // 2-by-2 table of buckets and slots var buckets = new ScheduleBucket[3]; slots = new long[buckets.Length][]; slots.Fill(() => new long[2]); for (var i = 0; i < buckets.Length; i++) { buckets[i] = new ScheduleBucket(i); slots[i] = new long[2]; for (var j = 0; j < slots[i].Length; j++) { slots[i][j] = buckets[i].AllocateSlot(); } } callbacks = new SupportScheduleCallback[5]; for (var i = 0; i < callbacks.Length; i++) { callbacks[i] = new SupportScheduleCallback(); } }
public void TestWaitAndSpecTogether() { var startDate = new DateTime(2004, 12, 9, 15, 27, 10, 500, DateTimeKind.Local); var startTime = startDate.UtcMillis(); _service.Time = startTime; // Add a specification var spec = new ScheduleSpec(); spec.AddValue(ScheduleUnit.MONTHS, 12); spec.AddValue(ScheduleUnit.DAYS_OF_MONTH, 9); spec.AddValue(ScheduleUnit.HOURS, 15); spec.AddValue(ScheduleUnit.MINUTES, 27); spec.AddValue(ScheduleUnit.SECONDS, 20); _service.Add(ScheduleComputeHelper.ComputeDeltaNextOccurance(spec, _service.Time, TimeZoneInfo.Local, TimeAbacusMilliseconds.INSTANCE), _callbacks[3], _slots[1][1]); spec.AddValue(ScheduleUnit.SECONDS, 15); _service.Add(ScheduleComputeHelper.ComputeDeltaNextOccurance(spec, _service.Time, TimeZoneInfo.Local, TimeAbacusMilliseconds.INSTANCE), _callbacks[4], _slots[2][0]); // Add some more callbacks _service.Add(5000, _callbacks[0], _slots[0][0]); _service.Add(10000, _callbacks[1], _slots[0][1]); _service.Add(15000, _callbacks[2], _slots[1][0]); // GetInstance send a times reflecting various seconds later and check who got a callback _service.Time = startTime + 1000; SupportScheduleCallback.SetCallbackOrderNum(0); EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 0, 0, 0, 0, 0 }); _service.Time = startTime + 2000; EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 0, 0, 0, 0, 0 }); _service.Time = startTime + 4000; EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 0, 0, 0, 0, 0 }); _service.Time = startTime + 5000; EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 1, 0, 0, 0, 2 }); _service.Time = startTime + 9000; EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 0, 0, 0, 0, 0 }); _service.Time = startTime + 10000; EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 0, 3, 0, 4, 0 }); _service.Time = startTime + 11000; EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 0, 0, 0, 0, 0 }); _service.Time = startTime + 15000; EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 0, 0, 5, 0, 0 }); _service.Time = startTime + int.MaxValue; EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 0, 0, 0, 0, 0 }); }
public void TestTrigger() { long startTime = 0; _service.Time = 0; // Add callbacks _service.Add(20, _callbacks[3], _slots[1][1]); _service.Add(20, _callbacks[2], _slots[1][0]); _service.Add(20, _callbacks[1], _slots[0][1]); _service.Add(21, _callbacks[0], _slots[0][0]); Assert.IsTrue(_service.IsScheduled(_callbacks[3])); Assert.IsTrue(_service.IsScheduled(_callbacks[0])); // Evaluate before the within time, expect not results startTime += 19; _service.Time = startTime; EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 0, 0, 0, 0, 0 }); Assert.IsTrue(_service.IsScheduled(_callbacks[3])); // Evaluate exactly on the within time, expect a result startTime += 1; _service.Time = startTime; EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 0, 1, 2, 3, 0 }); Assert.IsFalse(_service.IsScheduled(_callbacks[3])); // Evaluate after already evaluated once, no result startTime += 1; _service.Time = startTime; EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 4, 0, 0, 0, 0 }); Assert.IsFalse(_service.IsScheduled(_callbacks[3])); startTime += 1; _service.Time = startTime; EvaluateSchedule(); Assert.AreEqual(0, _callbacks[3].ClearAndGetOrderTriggered()); // Adding the same callback more than once should cause an exception _service.Add(20, _callbacks[0], _slots[0][0]); _service.Add(28, _callbacks[0], _slots[0][0]); _service.Remove(_callbacks[0], _slots[0][0]); _service.Add(20, _callbacks[2], _slots[1][0]); _service.Add(25, _callbacks[1], _slots[0][1]); _service.Remove(_callbacks[1], _slots[0][1]); _service.Add(21, _callbacks[0], _slots[0][0]); _service.Add(21, _callbacks[3], _slots[1][1]); _service.Add(20, _callbacks[1], _slots[0][1]); SupportScheduleCallback.SetCallbackOrderNum(0); startTime += 20; _service.Time = startTime; EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 0, 1, 2, 0, 0 }); startTime += 1; _service.Time = startTime; EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 3, 0, 0, 4, 0 }); _service.Time = startTime + int.MaxValue; EvaluateSchedule(); CheckCallbacks(_callbacks, new[] { 0, 0, 0, 0, 0 }); }