Esempio n. 1
0
        public Task Call(IDictionary <string, object> env)
        {
            CallCount += 1;

            Env = env;

            var tcs = new TaskCompletionSource <object>();

            ResultCallback = () =>
            {
                env["owin.ResponseStatusCode"]   = ResponseStatus;
                env["owin.ResponseReasonPhrase"] = ResponseReasonPhrase;
                var headers = (IDictionary <string, string[]>)env["owin.ResponseHeaders"];
                foreach (var kv in ResponseHeaders)
                {
                    headers[kv.Key] = kv.Value;
                }
                var output = (Stream)env["owin.ResponseBody"];
                ResponseBody
                .Subscribe(output)
                .CopyResultToCompletionSource(tcs, null);
            };

            RequestHeaders = (IDictionary <string, string[]>)env["owin.RequestHeaders"];
            RequestBody    = new FakeRequestBody((Stream)env["owin.RequestBody"]);

            var task = TaskHelpers.Completed();

            if (OptionReadRequestBody)
            {
                // read request body to nowhere, then call back result
                task = task.Then(() => RequestBody.Subscribe(CancellationToken.None));
            }
            if (OptionCallResultImmediately)
            {
                task = task.Then(() => ResultCallback());
            }
            task.CopyResultToCompletionSource(tcs, null);
            return(tcs.Task);
        }
Esempio n. 2
0
        public void Call(IDictionary<string, object> env, ResultDelegate result, Action<Exception> fault)
        {
            CallCount += 1;

            Env = env;
            ResultCallback = result;
            FaultCallback = fault;

            RequestHeaders = (IDictionary<string, IEnumerable<string>>)env["owin.RequestHeaders"];
            RequestBody = new FakeRequestBody((BodyDelegate)env["owin.RequestBody"]);

            if (OptionCallResultImmediately)
            {
                if (OptionReadRequestBody)
                {
                    // read request body to nowhere, then call back result
                    RequestBody.Subscribe(
                        _ => false,
                        _ => false,
                        _ => result(ResponseStatus, ResponseHeaders, ResponseBody.Subscribe),
                        CancellationToken.None);
                }
                else if (OptionCallResultImmediately)
                {
                    // just then call back result, request unconsumed
                    result(ResponseStatus, ResponseHeaders, ResponseBody.Subscribe);
                }
            }
            else
            {
                if (OptionReadRequestBody)
                {
                    // read request body to nowhere, and leave everything hanging
                    RequestBody.Subscribe(
                        _ => false,
                        _ => false,
                        _ => { },
                        CancellationToken.None);
                }
            }
        }
Esempio n. 3
0
        public Task Call(IDictionary<string, object> env)
        {
            CallCount += 1;

            Env = env;

            var tcs = new TaskCompletionSource<object>();
            ResultCallback = () =>
            {
                env["owin.ResponseStatusCode"] = ResponseStatus;
                env["owin.ResponseReasonPhrase"] = ResponseReasonPhrase;
                var headers = (IDictionary<string, string[]>)env["owin.ResponseHeaders"];
                foreach (var kv in ResponseHeaders)
                {
                    headers[kv.Key] = kv.Value;
                }
                var output = (Stream)env["owin.ResponseBody"];
                ResponseBody
                    .Subscribe(output)
                    .CopyResultToCompletionSource(tcs, null);
            };

            RequestHeaders = (IDictionary<string, string[]>)env["owin.RequestHeaders"];
            RequestBody = new FakeRequestBody((Stream)env["owin.RequestBody"]);

            var task = TaskHelpers.Completed();
            if (OptionReadRequestBody)
            {
                // read request body to nowhere, then call back result
                task = task.Then(() => RequestBody.Subscribe(CancellationToken.None));
            }
            if (OptionCallResultImmediately)
            {
                task = task.Then(() => ResultCallback());
            }
            task.CopyResultToCompletionSource(tcs, null);
            return tcs.Task;
        }