public static void LoadBalancer_OddNumberOfChannels()
        {
            List <ILanguageWorkerChannel> results = new List <ILanguageWorkerChannel>();
            int totalInvocations = 100;

            IEnumerable <ILanguageWorkerChannel> workerChannels = new List <ILanguageWorkerChannel>()
            {
                new TestLanguageWorkerChannel("1"),
                new TestLanguageWorkerChannel("2"),
                new TestLanguageWorkerChannel("3")
            };

            int expectedInvocationsPerChannel = totalInvocations / workerChannels.Count();

            IFunctionDispatcherLoadBalancer loadBalancer = new FunctionDispatcherLoadBalancer();

            for (int index = 0; index < 100; index++)
            {
                results.Add(loadBalancer.GetLanguageWorkerChannel(workerChannels, workerChannels.Count()));
            }
            var channelGroupsQuery = results.GroupBy(r => r.Id)
                                     .Select(g => new { Value = g.Key, Count = g.Count() });

            foreach (var channelGroup in channelGroupsQuery)
            {
                Assert.True(channelGroup.Count >= expectedInvocationsPerChannel);
            }
        }
        public static void LoadBalancer_Throws_InvalidOperationException_NoWorkerChannels()
        {
            List <ILanguageWorkerChannel>        results        = new List <ILanguageWorkerChannel>();
            IEnumerable <ILanguageWorkerChannel> workerChannels = new List <ILanguageWorkerChannel>();
            IFunctionDispatcherLoadBalancer      loadBalancer   = new FunctionDispatcherLoadBalancer();

            var ex = Assert.Throws <InvalidOperationException>(() =>
            {
                loadBalancer.GetLanguageWorkerChannel(workerChannels, workerChannels.Count());
            });

            Assert.Equal($"Did not find any initialized language workers", ex.Message);
        }
        public static void LoadBalancer_SingleProcess_VerifyCounter()
        {
            List <ILanguageWorkerChannel> results = new List <ILanguageWorkerChannel>();

            IEnumerable <ILanguageWorkerChannel> workerChannels = new List <ILanguageWorkerChannel>()
            {
                new TestLanguageWorkerChannel("1"),
            };

            IFunctionDispatcherLoadBalancer loadBalancer = new FunctionDispatcherLoadBalancer();
            FunctionDispatcherLoadBalancer  functionDispatcherLoadBalancer = loadBalancer as FunctionDispatcherLoadBalancer;

            for (int index = 0; index < 10; index++)
            {
                loadBalancer.GetLanguageWorkerChannel(workerChannels, 1);
                Assert.Equal(0, functionDispatcherLoadBalancer.Counter);
            }
        }