private async Task<bool> CheckCounters(ISampleStreaming_ProducerGrain producer, IMultipleSubscriptionConsumerGrain consumer, int consumerCount, bool assertIsTrue)
{
var numProduced = await producer.GetNumberProduced();
var numConsumed = await consumer.GetNumberConsumed();
if (assertIsTrue)
{
Assert.IsTrue(numProduced > 0, "Events were not produced");
Assert.AreEqual(consumerCount, numConsumed.Count, "Incorrect number of consumers");
foreach (int consumed in numConsumed.Values)
{
Assert.AreEqual(numProduced, consumed, "Produced and consumed counts do not match");
}
}
else if (numProduced <= 0 || // no events produced?
consumerCount != numConsumed.Count || // subscription counts are wrong?
numConsumed.Values.Any(consumedCount => consumedCount != numProduced)) // consumed events don't match produced events for any subscription?
{
if (numProduced <= 0)
{
logger.Info("numProduced <= 0: Events were not produced");
}
if (consumerCount != numConsumed.Count)
{
logger.Info("consumerCount != numConsumed.Count: Incorrect number of consumers. consumerCount = {0}, numConsumed.Count = {1}",
consumerCount, numConsumed.Count);
}
foreach (int consumed in numConsumed.Values)
{
if (numProduced != consumed)
{
logger.Info("numProduced != consumed: Produced and consumed counts do not match. numProduced = {0}, consumed = {1}",
numProduced, consumed);
//numProduced, Utils.DictionaryToString(numConsumed));
}
}
return false;
}
logger.Info("All counts are equal. numProduced = {0}, consumerCount = {1}", numProduced, consumerCount); //Utils.DictionaryToString(numConsumed));
return true;
}
}