Esempio n. 1
0
        public void GetSubscriptionInfos_ReturnsCountZero_WhenZeroQueries()
        {
            var querySubscription      = new QuerySubscriptions();
            var querySubscriptionInfos = querySubscription.GetSubscriptionInfos();

            Assert.Empty(querySubscriptionInfos);
        }
Esempio n. 2
0
        public void GetSubscriptionInfos_ReturnsSubscriberCountEqualsTimesAdded_WhenMultipleQueries()
        {
            var querySubscription = new QuerySubscriptions();

            var queryCount = 2;
            var query      = new SingleQuoteQuery(1);

            var queryCount2 = 3;
            var query2      = new SingleQuoteQuery(2);

            for (var i = 0; i < queryCount; i++)
            {
                querySubscription.AddSubscriber(query);
            }

            for (var i = 0; i < queryCount2; i++)
            {
                querySubscription.AddSubscriber(query2);
            }

            var querySubscriptionInfos = querySubscription.GetSubscriptionInfos();

            Assert.Equal(2, querySubscriptionInfos.Count());

            var subcribedQuery  = querySubscriptionInfos.First(x => x.Query == query);
            var subcribedQuery2 = querySubscriptionInfos.First(x => x.Query == query2);

            Assert.Equal(queryCount, subcribedQuery.SubscriberCount);
            Assert.Equal(queryCount2, subcribedQuery2.SubscriberCount);
        }
Esempio n. 3
0
        public void GetSubscriptionInfos_ReturnsZeroSubscriberCount_WhenQueryCleared()
        {
            var querySubscription = new QuerySubscriptions();

            var query = new SingleQuoteQuery(1);

            querySubscription.AddSubscriber(query);
            querySubscription.ClearQuery(query);
            var querySubscriptionInfos = querySubscription.GetSubscriptionInfos();

            Assert.Empty(querySubscriptionInfos);
        }
Esempio n. 4
0
        public void GetSubscriptionInfos_ReturnsSubscriberCountEqualTimesAdded(int timesAdded)
        {
            var querySubscription = new QuerySubscriptions();

            var query = new SingleQuoteQuery(1);

            for (var i = 0; i < timesAdded; i++)
            {
                querySubscription.AddSubscriber(query);
            }

            var querySubscriptionInfos = querySubscription.GetSubscriptionInfos();

            Assert.Single(querySubscriptionInfos);
            Assert.Equal(timesAdded, querySubscriptionInfos.Single().SubscriberCount);
            Assert.Equal(query, querySubscriptionInfos.Single().Query);
        }
Esempio n. 5
0
        public void GetSubscriptionInfos_SubscriberCountNeverLessThanZero_WhenSubscribersRemoved()
        {
            var querySubscription = new QuerySubscriptions();

            var query = new SingleQuoteQuery(1);

            querySubscription.AddSubscriber(query);

            querySubscription.RemoveSubscriber(query);
            querySubscription.RemoveSubscriber(query);
            querySubscription.RemoveSubscriber(query);

            var querySubscriptionInfos = querySubscription.GetSubscriptionInfos();

            Assert.Single(querySubscriptionInfos);
            Assert.Equal(0, querySubscriptionInfos.Single().SubscriberCount);
            Assert.Equal(query, querySubscriptionInfos.Single().Query);
        }
        /// <summary>
        /// Get next set of queries needing to be updated, prioritized by subscriber count.
        /// </summary>
        /// <returns>Prioritized Queries as <see cref="IEnumerable{T}"/> of type <see cref="StockQuery"/></returns>
        public async Task <IEnumerable <StockQuery> > GetPrioritizedQueries()
        {
            _logger.LogTrace($"Begin Prioritizing Queries for {nameof(QuerySubscriptionCountRule)}");
            var stopWatch = new Stopwatch();

            stopWatch.Start();

            var subscriptionInfos = _querySubscriptions.GetSubscriptionInfos();

            var subscriptionNeedRefreshing = await GetSubscriptionNeedRefreshing(subscriptionInfos);

            var sortedQueries = subscriptionInfos.Where(s => s.HasSubscribers() && subscriptionNeedRefreshing.ContainsKey(s))
                                .OrderByDescending(s => s.SubscriberCount)
                                .Select(s => s.Query);

            _logger.LogTrace($"{nameof(QuerySubscriptionCountRule)} took {stopWatch.ElapsedMilliseconds} ms to sort.");
            return(sortedQueries);
        }
Esempio n. 7
0
        public void GetSubscriptionInfos_ReturnsSubscriberCountEqualTimesAddedAndSubtracted_WhenSingleQuery(int timesAdded, int timesRemoved)
        {
            var querySubscription = new QuerySubscriptions();

            var query = new SingleQuoteQuery(1);

            for (var i = 0; i < timesAdded; i++)
            {
                querySubscription.AddSubscriber(query);
            }

            for (var i = 0; i < timesRemoved; i++)
            {
                querySubscription.RemoveSubscriber(query);
            }

            var querySubscriptionInfos = querySubscription.GetSubscriptionInfos();
            var expectedCount          = Math.Abs(timesAdded - timesRemoved);

            Assert.Single(querySubscriptionInfos);
            Assert.Equal(expectedCount, querySubscriptionInfos.Single().SubscriberCount);
            Assert.Equal(query, querySubscriptionInfos.Single().Query);
        }