public void GetTransportSettingsTest(Option <UpstreamProtocol> upstreamProtocol, int connectionPoolSize, Option <IWebProxy> proxy, ITransportSettings[] expectedTransportSettingsList, bool useServerHeartbeat)
        {
            const string expectedAuthChain = "e3;e2;e1";

            ITransportSettings[] transportSettingsList = CloudConnectionProvider.GetTransportSettings(upstreamProtocol, connectionPoolSize, proxy, useServerHeartbeat, expectedAuthChain);

            Assert.NotNull(transportSettingsList);
            Assert.Equal(expectedTransportSettingsList.Length, transportSettingsList.Length);
            for (int i = 0; i < expectedTransportSettingsList.Length; i++)
            {
                ITransportSettings expectedTransportSettings = expectedTransportSettingsList[i];
                ITransportSettings transportSettings         = transportSettingsList[i];

                Assert.Equal(expectedTransportSettings.GetType(), transportSettings.GetType());
                Assert.Equal(expectedTransportSettings.GetTransportType(), transportSettings.GetTransportType());

                // Check authchain via Reflection
                string authChain = (string)transportSettings.GetType()
                                   .GetProperty("AuthenticationChain", BindingFlags.NonPublic | BindingFlags.Instance)
                                   .GetValue(transportSettings);

                Assert.Equal(authChain, expectedAuthChain);

                switch (expectedTransportSettings)
                {
                case AmqpTransportSettings _:
                {
                    var expected = (AmqpTransportSettings)expectedTransportSettings;
                    var actual   = (AmqpTransportSettings)transportSettings;
                    Assert.True(expected.Equals(actual));     // AmqpTransportSettings impls Equals, but doesn't override Object.Equals

                    if (proxy == Option.None <IWebProxy>())
                    {
                        Assert.Null(actual.Proxy);
                    }
                    else
                    {
                        Assert.True(actual.Proxy is WebProxy);
                        Assert.Equal(((WebProxy)expected.Proxy).Address, ((WebProxy)actual.Proxy).Address);
                    }

                    break;
                }

                case MqttTransportSettings _:
                {
                    var expected = (MqttTransportSettings)expectedTransportSettings;
                    var actual   = (MqttTransportSettings)transportSettings;
                    Assert.True(actual.Proxy is WebProxy);
                    Assert.Equal(((WebProxy)expected.Proxy).Address, ((WebProxy)actual.Proxy).Address);
                    break;
                }
                }
            }
        }
        public void GetTransportSettingsTest(Option <UpstreamProtocol> upstreamProtocol, int connectionPoolSize, Option <IWebProxy> proxy, ITransportSettings[] expectedTransportSettingsList)
        {
            ITransportSettings[] transportSettingsList = CloudConnectionProvider.GetTransportSettings(upstreamProtocol, connectionPoolSize, proxy);

            Assert.NotNull(transportSettingsList);
            Assert.Equal(expectedTransportSettingsList.Length, transportSettingsList.Length);
            for (int i = 0; i < expectedTransportSettingsList.Length; i++)
            {
                ITransportSettings expectedTransportSettings = expectedTransportSettingsList[i];
                ITransportSettings transportSettings         = transportSettingsList[i];

                Assert.Equal(expectedTransportSettings.GetType(), transportSettings.GetType());
                Assert.Equal(expectedTransportSettings.GetTransportType(), transportSettings.GetTransportType());
                switch (expectedTransportSettings)
                {
                case AmqpTransportSettings _:
                {
                    var expected = (AmqpTransportSettings)expectedTransportSettings;
                    var actual   = (AmqpTransportSettings)transportSettings;
                    Assert.True(expected.Equals(actual));     // AmqpTransportSettings impls Equals, but doesn't override Object.Equals

                    if (proxy == Option.None <IWebProxy>())
                    {
                        Assert.Null(actual.Proxy);
                    }
                    else
                    {
                        Assert.True(actual.Proxy is WebProxy);
                        Assert.Equal(((WebProxy)expected.Proxy).Address, ((WebProxy)actual.Proxy).Address);
                    }

                    break;
                }

                case MqttTransportSettings _:
                {
                    var expected = (MqttTransportSettings)expectedTransportSettings;
                    var actual   = (MqttTransportSettings)transportSettings;
                    Assert.True(actual.Proxy is WebProxy);
                    Assert.Equal(((WebProxy)expected.Proxy).Address, ((WebProxy)actual.Proxy).Address);
                    break;
                }
                }
            }
        }
        public void GetTransportSettingsTest(Option <UpstreamProtocol> upstreamProtocol, int connectionPoolSize, ITransportSettings[] expectedTransportSettingsList)
        {
            ITransportSettings[] transportSettingsList = CloudConnectionProvider.GetTransportSettings(upstreamProtocol, connectionPoolSize);

            Assert.NotNull(transportSettingsList);
            Assert.Equal(expectedTransportSettingsList.Length, transportSettingsList.Length);
            for (int i = 0; i < expectedTransportSettingsList.Length; i++)
            {
                ITransportSettings expectedTransportSettings = expectedTransportSettingsList[i];
                ITransportSettings transportSettings         = transportSettingsList[i];

                Assert.Equal(expectedTransportSettings.GetType(), transportSettings.GetType());
                Assert.Equal(expectedTransportSettings.GetTransportType(), transportSettings.GetTransportType());
                if (expectedTransportSettings is AmqpTransportSettings)
                {
                    Assert.True(((AmqpTransportSettings)expectedTransportSettings).Equals((AmqpTransportSettings)transportSettings));
                }
            }
        }