コード例 #1
0
        // This unit tests reproduces GH 3885 where the consumer hanged forever
        public void ConsumerDoesNotHang()
        {
            for (var i = 0; i < 10000; i++)
            {
                var dataPoints = 10;

                var enumerator = new TestDataEnumerator {
                    MoveNextTrueCount = dataPoints
                };
                var factorFileProfider = new Mock <IFactorFileProvider>();
                factorFileProfider.Setup(s => s.Get(It.IsAny <Symbol>())).Returns(FactorFile.Read(_security.Symbol.Value, _config.Market));

                var subscription = SubscriptionUtils.CreateAndScheduleWorker(
                    new SubscriptionRequest(
                        false,
                        null,
                        _security,
                        _config,
                        DateTime.UtcNow,
                        Time.EndOfTime
                        ),
                    enumerator,
                    factorFileProfider.Object,
                    false);

                for (var j = 0; j < dataPoints; j++)
                {
                    Assert.IsTrue(subscription.MoveNext());
                }
                Assert.IsFalse(subscription.MoveNext());
                subscription.DisposeSafely();
            }
        }
コード例 #2
0
        public void ThrowingEnumeratorStackDisposesOfSubscription()
        {
            var enumerator = new TestDataEnumerator {
                MoveNextTrueCount = 10, ThrowException = true
            };

            var subscription = SubscriptionUtils.CreateAndScheduleWorker(
                new SubscriptionRequest(
                    false,
                    null,
                    _security,
                    _config,
                    DateTime.UtcNow,
                    Time.EndOfTime
                    ),
                enumerator);

            var count = 0;

            while (enumerator.MoveNextTrueCount != 9)
            {
                if (count++ > 100)
                {
                    Assert.Fail("Timeout waiting for producer");
                }
                Thread.Sleep(1);
            }

            Assert.IsFalse(subscription.MoveNext());
            Assert.IsTrue(subscription.EndOfStream);
            Assert.IsTrue(enumerator.Disposed);
        }
コード例 #3
0
        public void SubscriptionIsDisposed()
        {
            var dataPoints = 10;
            var enumerator = new TestDataEnumerator {
                MoveNextTrueCount = dataPoints
            };

            var subscription = SubscriptionUtils.CreateAndScheduleWorker(
                new SubscriptionRequest(
                    false,
                    null,
                    _security,
                    _config,
                    DateTime.UtcNow,
                    Time.EndOfTime
                    ),
                enumerator);

            var count = 0;

            while (enumerator.MoveNextTrueCount > 8)
            {
                if (count++ > 100)
                {
                    Assert.Fail($"Timeout waiting for producer. {enumerator.MoveNextTrueCount}");
                }
                Thread.Sleep(1);
            }

            subscription.DisposeSafely();
            Assert.IsFalse(subscription.MoveNext());
        }
コード例 #4
0
        // This unit tests reproduces GH 3885 where the consumer hanged forever
        public void ConsumerDoesNotHang()
        {
            for (var i = 0; i < 10000; i++)
            {
                var dataPoints = 10;

                var enumerator = new TestDataEnumerator {
                    MoveNextTrueCount = dataPoints
                };

                var subscription = SubscriptionUtils.CreateAndScheduleWorker(
                    new SubscriptionRequest(
                        false,
                        null,
                        _security,
                        _config,
                        DateTime.UtcNow,
                        Time.EndOfTime
                        ),
                    enumerator);

                for (var j = 0; j < dataPoints; j++)
                {
                    Assert.IsTrue(subscription.MoveNext());
                }
                Assert.IsFalse(subscription.MoveNext());
                subscription.DisposeSafely();
            }
        }
コード例 #5
0
        public void ThrowingEnumeratorStackDisposesOfSubscription()
        {
            var enumerator = new TestDataEnumerator {
                MoveNextTrueCount = 10, ThrowException = true
            };
            var factorFileProfider = new Mock <IFactorFileProvider>();

            factorFileProfider.Setup(s => s.Get(It.IsAny <Symbol>())).Returns(FactorFile.Read(_security.Symbol.Value, _config.Market));

            var subscription = SubscriptionUtils.CreateAndScheduleWorker(
                new SubscriptionRequest(
                    false,
                    null,
                    _security,
                    _config,
                    DateTime.UtcNow,
                    Time.EndOfTime
                    ),
                enumerator,
                factorFileProfider.Object,
                false);

            var count = 0;

            while (enumerator.MoveNextTrueCount != 9)
            {
                if (count++ > 100)
                {
                    Assert.Fail("Timeout waiting for producer");
                }
                Thread.Sleep(1);
            }

            Assert.IsFalse(subscription.MoveNext());
            Assert.IsTrue(subscription.EndOfStream);

            // enumerator is disposed by the producer
            count = 0;
            while (!enumerator.Disposed)
            {
                if (count++ > 100)
                {
                    Assert.Fail("Timeout waiting for producer");
                }
                Thread.Sleep(1);
            }
        }
コード例 #6
0
        public void FirstLoopLimit(int firstLoopLimit)
        {
            var dataPoints = 10;
            var enumerator = new TestDataEnumerator {
                MoveNextTrueCount = dataPoints
            };

            var subscription = SubscriptionUtils.CreateAndScheduleWorker(
                new SubscriptionRequest(
                    false,
                    null,
                    _security,
                    _config,
                    DateTime.UtcNow,
                    Time.EndOfTime
                    ),
                enumerator,
                firstLoopLimit: firstLoopLimit);

            var count         = 0;
            var expectedValue = dataPoints - firstLoopLimit - 1;

            expectedValue = expectedValue > 0 ? expectedValue : -1;
            while (enumerator.MoveNextTrueCount != expectedValue)
            {
                if (count++ > 100)
                {
                    Assert.Fail("Timeout waiting for producer");
                }
                Thread.Sleep(1);
            }
            // producer should only have produced 'firstLoopLimit' data points, lets assert remaining to produce
            Assert.AreEqual(expectedValue, enumerator.MoveNextTrueCount);

            for (var j = 0; j < dataPoints; j++)
            {
                Assert.IsTrue(subscription.MoveNext());
            }
            Assert.IsFalse(subscription.MoveNext());
            subscription.DisposeSafely();
            Assert.IsTrue(enumerator.Disposed);
        }
コード例 #7
0
        public void SubscriptionIsDisposed()
        {
            var dataPoints = 10;
            var enumerator = new TestDataEnumerator {
                MoveNextTrueCount = dataPoints
            };
            var factorFileProfider = new Mock <IFactorFileProvider>();

            factorFileProfider.Setup(s => s.Get(It.IsAny <Symbol>())).Returns(FactorFile.Read(_security.Symbol.Value, _config.Market));

            var subscription = SubscriptionUtils.CreateAndScheduleWorker(
                new SubscriptionRequest(
                    false,
                    null,
                    _security,
                    _config,
                    DateTime.UtcNow,
                    Time.EndOfTime
                    ),
                enumerator,
                factorFileProfider.Object,
                false);

            var count = 0;

            while (enumerator.MoveNextTrueCount > 8)
            {
                if (count++ > 100)
                {
                    Assert.Fail($"Timeout waiting for producer. {enumerator.MoveNextTrueCount}");
                }
                Thread.Sleep(1);
            }

            subscription.DisposeSafely();
            Assert.IsFalse(subscription.MoveNext());
        }