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"); }
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(); }
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); }
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); }
public OwinHost() { _hostContext = new OwinHostContext(OwinFactory.CreateEnvironment()); _state = OwinHostState.ConfigureHost; }