示例#1
0
        static ISslStreamProvider GetSslStreamProvider(TestContext ctx, HttpServerFlags serverFlags)
        {
            var factory = DependencyInjector.Get <ConnectionProviderFactory> ();

            ConnectionProvider     provider;
            ConnectionTestFlags    explicitFlags;
            ConnectionProviderType providerType;

            if (ctx.TryGetParameter(out providerType))
            {
                provider = factory.GetProvider(providerType);
            }
            else if (ctx.TryGetParameter(out explicitFlags))
            {
                explicitFlags |= ConnectionTestFlags.RequireSslStream;
                var filter = ConnectionProviderFilter.CreateSimpleFilter(explicitFlags);
                provider = filter.GetDefaultServer(ctx, null);
            }
            else if ((serverFlags & HttpListenerSsl) == HttpListenerSsl)
            {
                explicitFlags = ConnectionTestFlags.RequireHttpListener;
                var filter = ConnectionProviderFilter.CreateSimpleFilter(explicitFlags);
                provider = filter.GetDefaultServer(ctx, null);
            }
            else
            {
                return(factory.DefaultSslStreamProvider);
            }

            ctx.Assert(provider, Is.Not.Null, "Failed to resolve ConnectionProvider");
            ctx.Assert(provider.SupportsSslStreams, "Seleced ConnectionProvider `{0}' does not support SSL.", provider);

            return(provider.SslStreamProvider);
        }
示例#2
0
 public HttpServerProvider(
     string identifier, HttpServerFlags serverFlags,
     ISslStreamProvider provider)
 {
     Value             = identifier;
     ServerFlags       = serverFlags;
     SslStreamProvider = provider;
 }
示例#3
0
        static void CheckConnectionFlags(ref ConnectionTestFlags flags, HttpServerFlags serverFlags)
        {
            var sslListenerFlags = HttpServerFlags.HttpListener | HttpServerFlags.SSL;

            if ((serverFlags & sslListenerFlags) == sslListenerFlags)
            {
                flags |= ConnectionTestFlags.RequireMonoServer | ConnectionTestFlags.RequireHttpListener;
            }
        }
示例#4
0
        public HttpValidationTestRunner(IPortableEndPoint endpoint, HttpValidationTestParameters parameters,
                                        ConnectionTestProvider provider, Uri uri, HttpServerFlags flags)
        {
            Parameters  = parameters;
            Provider    = provider;
            ServerFlags = flags;
            Uri         = uri;

            Server = new BuiltinHttpServer(uri, endpoint, ServerFlags, parameters, null);

            ME = $"{GetType ().Name}({EffectiveType})";
        }
示例#5
0
        public HttpsTestRunner(IPortableEndPoint endpoint, HttpsTestParameters parameters,
                               ConnectionTestProvider provider, Uri uri, HttpServerFlags flags)
            : base(endpoint, parameters)
        {
            Provider    = provider;
            ServerFlags = flags;
            Uri         = uri;

            Server = new BuiltinHttpServer(uri, endpoint, flags, parameters, null)
            {
                Delegate = this
            };
        }
示例#6
0
        bool GetParameters(TestContext ctx, HttpServerFlags flags, out ConnectionParameters parameters)
        {
            if ((flags & HttpServerFlags.SSL) == 0)
            {
                parameters = null;
                return(false);
            }

            var certificate = ResourceManager.SelfSignedServerCertificate;

            parameters = new ConnectionParameters("http", certificate);
            return(true);
        }
示例#7
0
 static HttpServerFlags GetFlags(HttpServerFlags flags, HttpServer target, AuthenticationType proxyAuth)
 {
     flags |= HttpServerFlags.Proxy;
     if (target.UseSSL)
     {
         flags |= HttpServerFlags.ProxySSL;
     }
     if (proxyAuth != AuthenticationType.None)
     {
         flags |= HttpServerFlags.ProxyAuthentication;
     }
     return(flags);
 }
        HttpServerFlags GetServerFlags(TestContext ctx)
        {
            HttpServerFlags flags = serverFlags | HttpServerFlags.SSL;

            bool reuseConnection;

            if (ctx.TryGetParameter <bool> (out reuseConnection, "ReuseConnection") && reuseConnection)
            {
                flags |= HttpServerFlags.ReuseConnection;
            }

            return(flags);
        }
示例#9
0
        public HttpServer(IPortableEndPoint listenAddress, HttpServerFlags flags,
                          ConnectionParameters parameters, ISslStreamProvider sslStreamProvider)
        {
            ListenAddress     = listenAddress;
            Flags             = flags;
            Parameters        = parameters;
            SslStreamProvider = sslStreamProvider;

            if (Parameters != null)
            {
                Flags |= HttpServerFlags.SSL;
            }

            if ((Flags & HttpServerFlags.NoSSL) != 0)
            {
                Flags &= ~HttpServerFlags.SSL;
            }


            if ((Flags & HttpServerFlags.SSL) != 0)
            {
                if (SslStreamProvider == null)
                {
                    var factory = DependencyInjector.Get <ConnectionProviderFactory> ();
                    SslStreamProvider = factory.DefaultSslStreamProvider;
                }
            }
            else
            {
                SslStreamProvider = null;
            }

            var description = FormatFlags(Flags);

            if (!string.IsNullOrEmpty(description))
            {
                description = ": " + description;
            }
            var identifier = parameters?.Identifier;

            if (identifier != null)
            {
                identifier = ": " + identifier;
            }

            ME = $"[{GetType ().Name}:{ID}{identifier}{description}]";
        }
示例#10
0
        public IEnumerable <HttpServerProvider> GetProviders(TestContext ctx)
        {
            HttpServerFlags serverFlags = HttpServerFlags.None;

            if (UsingHttpListener)
            {
                serverFlags |= HttpServerFlags.HttpListener;
            }

            if (IsMartinTest)
            {
                yield return(new HttpServerProvider("https", serverFlags, null));

                yield break;
            }

            if (!RequireSsl)
            {
                serverFlags |= HttpServerFlags.NoSSL;
                yield return(new HttpServerProvider("http", serverFlags, null));
            }

            if (!UsingSsl)
            {
                yield break;
            }

            var supportedProviders = GetSupportedProviders(ctx);

            if (supportedProviders.Count() == 0)
            {
                ctx.AssertFail("Could not find any supported HttpServerProvider.");
            }

            serverFlags |= HttpServerFlags.SSL;
            foreach (var provider in supportedProviders)
            {
                yield return(new HttpServerProvider(
                                 $"https:{provider.Name}", serverFlags,
                                 provider.SslStreamProvider));
            }
        }
示例#11
0
        public static IEnumerable <PostHandler> GetPostTests(HttpServerFlags flags)
        {
            if ((flags & HttpServerFlags.HttpListener) == 0)
            {
                yield return(new PostHandler("No body"));
            }
            yield return(new PostHandler("Empty body", StringContent.Empty));

            yield return(new PostHandler("Normal post", HttpContent.HelloWorld));

            yield return(new PostHandler("Content-Length", HttpContent.HelloWorld, TransferMode.ContentLength));

            yield return(new PostHandler("Chunked", HttpContent.HelloChunked, TransferMode.Chunked));

            yield return(new PostHandler("Explicit length and empty body", StringContent.Empty, TransferMode.ContentLength));

            yield return(new PostHandler("Explicit length and no body", null, TransferMode.ContentLength));

            yield return(new PostHandler("Bug #41206", new RandomContent(102400)));

            yield return(new PostHandler("Bug #41206 odd size", new RandomContent(102431)));
        }
示例#12
0
        public HttpServer(IPortableEndPoint listenAddress, HttpServerFlags flags,
                          ConnectionParameters parameters, ISslStreamProvider sslStreamProvider)
        {
            ListenAddress     = listenAddress;
            Flags             = flags;
            Parameters        = parameters;
            SslStreamProvider = sslStreamProvider;

            if (Parameters != null)
            {
                Flags |= HttpServerFlags.SSL;
            }

            if ((Flags & HttpServerFlags.SSL) != 0)
            {
                if (SslStreamProvider == null)
                {
                    var factory = DependencyInjector.Get <ConnectionProviderFactory> ();
                    SslStreamProvider = factory.DefaultSslStreamProvider;
                }
            }
        }
示例#13
0
        static string FormatFlags(HttpServerFlags flags)
        {
            var sb = new StringBuilder();

            Append("shared", HttpServerFlags.ReuseConnection);
            Append("ssl", HttpServerFlags.SSL);
            Append("proxy", HttpServerFlags.Proxy);
            Append("ssl-proxy", HttpServerFlags.ProxySSL);
            Append("proxy-auth", HttpServerFlags.ProxyAuthentication);
            return(sb.ToString());

            void Append(string name, HttpServerFlags flag)
            {
                if ((flags & flag) == 0)
                {
                    return;
                }
                if (sb.Length > 0)
                {
                    sb.Append(",");
                }
                sb.Append(name);
            }
        }
示例#14
0
 public BuiltinHttpServer(Uri uri, IPortableEndPoint listenAddress, HttpServerFlags flags,
                          ConnectionParameters parameters, ISslStreamProvider sslStreamProvider)
     : base(listenAddress, flags | HttpServerFlags.SSL, parameters, sslStreamProvider)
 {
     Uri = uri;
 }
示例#15
0
 public BuiltinHttpServer(IPortableEndPoint clientEndPoint, IPortableEndPoint listenAddress, HttpServerFlags flags,
                          ConnectionParameters parameters, ISslStreamProvider sslStreamProvider)
     : base(listenAddress, flags, parameters, sslStreamProvider)
 {
     Uri = new Uri(string.Format("http{0}://{1}:{2}/", SslStreamProvider != null ? "s" : "", clientEndPoint.Address, clientEndPoint.Port));
 }
示例#16
0
        public BuiltinProxyServer(HttpServer target, IPortableEndPoint listenAddress, HttpServerFlags flags)
            : base(listenAddress, flags | HttpServerFlags.Proxy, null, null)
        {
            Target = target;

            Uri = new Uri(string.Format("http://{0}:{1}/", ListenAddress.Address, ListenAddress.Port));
        }
示例#17
0
 public HttpServerAttribute(HttpServerFlags serverFlags)
     : base(null, TestFlags.Hidden)
 {
     ExplicitServerFlags = serverFlags;
 }
示例#18
0
        public static IEnumerable <Handler> GetParameters(TestContext ctx, string filter, HttpServerFlags flags)
        {
            switch (filter)
            {
            case null:
                var list = new List <Handler> ();
                list.Add(new HelloWorldHandler("hello world"));
                list.AddRange(GetPostTests(flags));
                list.AddRange(GetDeleteTests());
                list.AddRange(GetRecentlyFixed());
                return(list);

            case "post":
                return(GetPostTests(flags));

            case "delete":
                return(GetDeleteTests());

            case "chunked":
                return(GetChunkedTests());

            case "recently-fixed":
                return(GetRecentlyFixed());

            default:
                throw ctx.AssertFail("Invalid TestPost filter `{0}'.", filter);
            }
        }
示例#19
0
        public BuiltinProxyServer(HttpServer target, IPortableEndPoint listenAddress, HttpServerFlags flags,
                                  AuthenticationType proxyAuth = AuthenticationType.None)
            : base(listenAddress, GetFlags(flags, target, proxyAuth), null, null)
        {
            Target             = target;
            AuthenticationType = proxyAuth;

            Uri = new Uri(string.Format("http://{0}:{1}/", ListenAddress.Address, ListenAddress.Port));
        }
示例#20
0
 public HttpServerFlagsAttribute(HttpServerFlags flags)
 {
     Flags = flags;
 }
 public HttpsTestRunnerAttribute(HttpServerFlags serverFlags = HttpServerFlags.None)
     : base(typeof(HttpsTestRunnerAttribute))
 {
     this.serverFlags = serverFlags;
 }