Example #1
0
        // case 3
        public async Task ShouldRejectNewEventWithLsnAlreadySeen()
        {
            var invariantTester = new SchedulerInVariantTester();
            var scheduler       = new EventCollectorScheduler(invariantTester.OnSchedule);
            await scheduler.NewEvent(1);

            await Assert.ThrowsAsync <InvalidOperationException>(async() => await scheduler.NewEvent(1));
        }
Example #2
0
        // case 2.a
        public void ShouldNotFireEventAgainForSuccessLsn()
        {
            var invariantTester = new SchedulerInVariantTester();
            var scheduler       = new EventCollectorScheduler(invariantTester.OnScheduleWithLsn);

            long MaxTimeToWaitInMs = 200;
            var  watch             = Stopwatch.StartNew();
            long lsn = 0;

            while (watch.ElapsedMilliseconds < MaxTimeToWaitInMs)
            {
                scheduler.NewEvent(lsn);
                lsn += 1;
            }
        }
Example #3
0
        // case 2.b
        public void ShouldFireEventAgainForFailureLsn()
        {
            var invariantTester = new SchedulerInVariantTester();
            var scheduler       = new EventCollectorScheduler(invariantTester.OnScheduleWithSomeFailure);

            long MaxTimeToWaitInMs = 200;
            var  watch             = Stopwatch.StartNew();
            long lsn = 0;

            while (watch.ElapsedMilliseconds < MaxTimeToWaitInMs)
            {
                scheduler.NewEvent(lsn);
                lsn += 1;
            }

            Assert.True(invariantTester.HasReceivedEventAfterFailedEvents());
        }
Example #4
0
        // case 4.b
        public async Task FirstSuccessShouldNotCompleteLaterTask()
        {
            var invariantTester = new SchedulerInVariantTester();
            var scheduler       = new EventCollectorScheduler(invariantTester.FirstSuccessOtherFailure);
            var lsn             = 1;
            var secondTaskLsn   = lsn;
            var t1 = scheduler.NewEvent(lsn);
            var t2 = t1;

            while (t1 == t2)
            {
                lsn          += 1;
                t2            = scheduler.NewEvent(lsn);
                secondTaskLsn = lsn;
            }

            await t1;
            await Assert.ThrowsAnyAsync <Exception>(async() => await t2);

            // check race condition between NewEvent and scheduler.
            Assert.True(invariantTester.PersistTillLsn == secondTaskLsn - 1,
                        $"invariantTester.PersistTillLsn {invariantTester.PersistTillLsn} == secondTaskLsn {secondTaskLsn} - 1 => Not all LSN covered in first task.");
        }
Example #5
0
 // case 4.a
 public async Task SuccessReturnShouldCompleteTask()
 {
     var invariantTester = new SchedulerInVariantTester();
     var scheduler       = new EventCollectorScheduler(invariantTester.OnSchedule);
     await scheduler.NewEvent(1);
 }