Exemplo n.º 1
0
        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 });
        }
Exemplo n.º 2
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 });
        }