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