Exemple #1
0
        public void WhenAll()
        {
            var control = new ControlComponent(ControlComponent.Match.All);

            control.When(env => false, (env, next) => TaskHelper.Exception(new Exception()));
            control.When(env => true,
                         (env, next) => {
                env.SetValue("branch1", "pass");
                return(TaskHelper.Completed());
            });
            control.When(env => false, (env, next) => TaskHelper.Exception(new Exception()));
            control.When(env => true,
                         (env, next) => {
                env.SetValue("branch2", "pass");
                return(TaskHelper.Completed());
            });
            var environment       = OwinFactory.CreateEnvironment();
            var pipelineComponent = control as IPipelineComponent;

            pipelineComponent.Connect(Pipeline.ReturnDone);
            Task task = pipelineComponent.Execute(environment);

            task.Wait();
            task.IsCanceled.ShouldBeFalse();
            task.IsFaulted.ShouldBeFalse();
            task.IsCompleted.ShouldBeTrue();
            environment.GetValue <string>("branch1")
            .ShouldEqual("pass");
            environment.GetValue <string>("branch2")
            .ShouldEqual("pass");
        }
Exemple #2
0
        public TcpSession(IDictionary <string, object> owinEnvironment, Func <IDictionary <string, object>, Task> appFunc, Socket socket)
        {
            _sessionEnvironment = OwinFactory.CreateScopedEnvironment(owinEnvironment);
            _appFunc            = appFunc;
            _socket             = socket;

            var remote = socket.RemoteEndPoint as IPEndPoint;

            if (remote != null)
            {
                _sessionEnvironment.Add(OwinKeys.Server.RemoteIpAddress, remote.Address.ToString());
                _sessionEnvironment.Add(OwinKeys.Server.RemotePort, remote.Port.ToString(CultureInfo.InvariantCulture));
            }

            _networkStream = new NetworkStream(_socket, FileAccess.ReadWrite, true);
            _output        = new MemoryStream();
        }
Exemple #3
0
        public IContext Process(TestRequest request)
        {
            var requestEnvironment = OwinFactory.CreateScopedEnvironment(_host.Environment);

            var context = OwinContext.Get(requestEnvironment);

            context.Request.PathBase = string.Empty;
            context.Request.Method   = request.RequestLine.Method;
            context.Request.FullUri  = request.Url;
            context.Request.Protocol = request.RequestLine.HttpVersion;
            context.Request.Headers.MergeIn(request.Headers);
            context.Request.Body = request.Body != null ? new MemoryStream(request.Body, false) : Stream.Null;

            context.Response.Body = new MemoryStream();

            _appFunc(requestEnvironment)
            .Wait();

            return(context);
        }
Exemple #4
0
        public Task ProcessRequest()
        {
            try {
                //build out request environment
                var requestEnvironment = OwinFactory.CreateScopedEnvironment(_sessionEnvironment);
                _context = OwinContext.Get(requestEnvironment);
                Trace("Session - Process Request");

                //todo: configure OnSendingHeaders aggregator

                // parse request line
                HttpRequestLine requestLine = HttpRequestLine.Parse(_networkStream.ReadLine());
                if (!requestLine.IsValid)
                {
                    ProcessError(Status.Is.BadRequest);
                    return(_sessionCompleted.Task);
                }
                if (!ValidVerbs.Contains(requestLine.Method))
                {
                    ProcessError(Status.Is.NotImplemented);
                    return(_sessionCompleted.Task);
                }
                _context.Request.PathBase = string.Empty;
                _context.Request.Method   = requestLine.Method;
                if (requestLine.Uri.StartsWith("http", StringComparison.OrdinalIgnoreCase))
                {
                    Uri requestUri;
                    if (!Uri.TryCreate(requestLine.Uri, UriKind.Absolute, out requestUri))
                    {
                        ProcessError(Status.Is.BadRequest);
                        return(_sessionCompleted.Task);
                    }
                    _context.Request.FullUri = requestUri;
                }
                else
                {
                    _context.Request.Scheme = "http";
                    var splitUri = requestLine.Uri.Split('?');
                    _context.Request.Path        = splitUri[0];
                    _context.Request.QueryString = splitUri.Length == 2 ? splitUri[1] : string.Empty;
                }
                _context.Request.Protocol = requestLine.HttpVersion;
                _httpVer = requestLine.HttpVersion.Substring(requestLine.HttpVersion.IndexOf('/') + 1);

                // parse http headers
                var headers = new List <string>();
                while (true)
                {
                    string headerLine = _networkStream.ReadLine();
                    if (headerLine == string.Empty)
                    {
                        break;
                    }
                    headers.Add(headerLine);
                }
                _context.Request.Headers.AddRaw(headers);

                _keepAlive = (_httpVer == "1.0" && _context.Request.Headers.ValueIs(HttpHeaderKeys.Connection, "Keep-Alive", false)) ||
                             !_context.Request.Headers.ValueIs(HttpHeaderKeys.Connection, "Close", false);
                _context.Request.Body  = _networkStream;
                _context.Response.Body = _output;

                // handle 100-continue
                _context.Request.Headers.GetValue(HttpHeaderKeys.Expect);
                if (_context.Request.Headers.ValueIs(HttpHeaderKeys.Expect, "100-Continue", false))
                {
                    _networkStream.WriteAsync("HTTP/1.1 100 Continue\r\n", Encoding.UTF8)
                    .ContinueWith(task => {
                        if (task.IsFaulted)
                        {
                            SessionFaulted(task.Exception);
                            return;
                        }
                        _appFunc(_context.Environment)
                        .ContinueWith(ProcessResult);
                    });
                }
                else
                {
                    _appFunc(_context.Environment)
                    .ContinueWith(ProcessResult);
                }
            }
            catch (Exception exception) {
                SessionFaulted(exception);
            }
            return(_sessionCompleted.Task);
        }
Exemple #5
0
 public OwinHost()
 {
     _hostContext = new OwinHostContext(OwinFactory.CreateEnvironment());
     _state       = OwinHostState.ConfigureHost;
 }