public void GetSubscriptionInfos_ReturnsCountZero_WhenZeroQueries() { var querySubscription = new QuerySubscriptions(); var querySubscriptionInfos = querySubscription.GetSubscriptionInfos(); Assert.Empty(querySubscriptionInfos); }
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); }
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); }
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); }
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); }
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); }