public void TestUpdateResources()
        {
            var channelManager = new GrpcChannelManager(
                new string[] { "server1", "server2" },
                timeout: TimeSpan.FromMilliseconds(200));

            var channelsBeforeUpdate = channelManager
                                       .ResourceManager
                                       .Resources
                                       .Keys
                                       .ToDictionary(x => x.Url, x => x.Channel);

            Assert.AreEqual(2, channelManager.ResourceManager.Resources.Count);
            Assert.IsNotNull(channelsBeforeUpdate["server1"]);
            Assert.IsNotNull(channelsBeforeUpdate["server2"]);

            channelManager.UpdateResources(new string[] { "server1", "server3", "server4" });

            var channelsAfterUpdate = channelManager
                                      .ResourceManager
                                      .Resources
                                      .Keys
                                      .ToDictionary(x => x.Url, x => x.Channel);

            Assert.AreEqual(3, channelManager.ResourceManager.Resources.Count);
            Assert.IsNotNull(channelsAfterUpdate["server1"]);
            Assert.IsNotNull(channelsAfterUpdate["server3"]);
            Assert.IsNotNull(channelsAfterUpdate["server4"]);

            Assert.AreSame(channelsBeforeUpdate["server1"], channelsAfterUpdate["server1"]);
        }
        public void TestUpdateResourcesOnClient()
        {
            var server1 = SampleApiMock.CreateLocalServer(() =>
            {
                return(Task.FromResult(new SampleResponse()
                {
                    Payload = "server1"
                }));
            });
            var server2 = SampleApiMock.CreateLocalServer(() =>
            {
                return(Task.FromResult(new SampleResponse()
                {
                    Payload = "server2"
                }));
            });

            server1.Start();
            server2.Start();

            try
            {
                var server1Url = GrpcServerUtil.GetServerUrl(server1);
                var server2Url = GrpcServerUtil.GetServerUrl(server2);

                var channelManager = new GrpcChannelManager(
                    new string[] { server1Url },
                    timeout: TimeSpan.FromMilliseconds(200));
                var lbCallInvoker = channelManager.GetCallInvoker();
                var client        = new SampleApi.SampleApiClient(lbCallInvoker);

                var result1 = client.SampleRpcMethod(new SampleRequest()
                {
                    Payload = ""
                });
                Assert.AreEqual(result1.Payload, "server1");

                channelManager.UpdateResources(new string[] { server2Url });

                var result2 = client.SampleRpcMethod(new SampleRequest()
                {
                    Payload = ""
                });
                Assert.AreEqual(result2.Payload, "server2");
            }
            finally
            {
                server1.ShutdownAsync().Wait();
                server2.ShutdownAsync().Wait();
            }
        }