public override bool IsServerSupported(TestContext ctx, ConnectionProvider provider, string filter)
        {
            if (!IsServerSupported(provider))
            {
                return(false);
            }

            var supported = IsSupported(ctx, provider, filter);

            if (supported != null)
            {
                return(supported.Value);
            }

            return(ConnectionTestRunner.IsSupported(ctx, Category, provider));
        }
        bool IsSupported(TestContext ctx, ConnectionProvider provider, string filter)
        {
            var supportsSslStream    = (provider.Flags & ConnectionProviderFlags.SupportsSslStream) != 0;
            var supportsHttps        = (provider.Flags & ConnectionProviderFlags.SupportsHttp) != 0;
            var supportsTrustedRoots = (provider.Flags & ConnectionProviderFlags.SupportsTrustedRoots) != 0;

            if ((Flags & ConnectionTestFlags.RequireSslStream) != 0 && !supportsSslStream)
            {
                return(false);
            }
            if ((Flags & ConnectionTestFlags.RequireHttp) != 0 && !supportsHttps)
            {
                return(false);
            }
            if ((Flags & ConnectionTestFlags.RequireTrustedRoots) != 0 && !supportsTrustedRoots)
            {
                return(false);
            }

            var match = MatchesFilter(provider, filter);

            if (match != null)
            {
                return(match.Value);
            }
            if ((provider.Flags & ConnectionProviderFlags.IsExplicit) != 0)
            {
                return(false);
            }

            if ((Flags & ConnectionTestFlags.AssumeSupportedByTest) != 0)
            {
                return(true);
            }

            return(ConnectionTestRunner.IsSupported(ctx, Category, provider));
        }