Exemple #1
0
        private async Task <HttpResponseMessage> RecordAsync(HttpCallAsync call, HttpRequestMessage request, CancellationToken cancellationToken)
        {
            if (request.Content != null)
            {
                await request.Content.LoadIntoBufferAsync();
            }

            //HttpRequest must be created before passing to the rest of the HttpClient middleware
            //since additional handlers can modify the request, ie. add headers which we will not have
            //when replaying and trying to mach.
            var httpRequest = HttpRequest.Create(request);
            var response    = await call(request, cancellationToken);

            if (response.Content != null)
            {
                await response.Content.LoadIntoBufferAsync();
            }

            var httpResponse = HttpResponse.Create(response);

            lock (_httpInteractions)
            {
                _httpInteractions.Add(new HttpInteraction {
                    Request = httpRequest, Response = httpResponse
                });
            }

            return(response);
        }
Exemple #2
0
        private Task <HttpResponseMessage> RecordNewAsync(HttpCallAsync call, HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var match = FindMatch(HttpRequest.Create(request));

            if (match == null)
            {
                return(RecordAsync(call, request, cancellationToken));
            }

            return(ProcessMatchAsync(match));
        }
Exemple #3
0
        private Task <HttpResponseMessage> RecordOnceAsync(HttpCallAsync call, HttpRequestMessage request, CancellationToken cancellationToken)
        {
            if (_isNew)
            {
                return(RecordAsync(call, request, cancellationToken));
            }

            var httpRequest = HttpRequest.Create(request);
            var match       = FindMatch(httpRequest);

            if (match != null)
            {
                return(ProcessMatchAsync(match));
            }

            throw new MatchNotFoundException(httpRequest);
        }
Exemple #4
0
        internal Task <HttpResponseMessage> HandleRequestAsync(HttpCallAsync call, HttpRequestMessage request, CancellationToken cancellationToken)
        {
            if (_recordMode == RecordMode.None)
            {
                return(PlaybackAsync(request));
            }

            if (_recordMode == RecordMode.Once)
            {
                return(RecordOnceAsync(call, request, cancellationToken));
            }

            if (_recordMode == RecordMode.NewEpisodes)
            {
                return(RecordNewAsync(call, request, cancellationToken));
            }

            if (_recordMode == RecordMode.All)
            {
                return(RecordAsync(call, request, cancellationToken));
            }

            throw new InvalidOperationException("Cassette record mode unknown: " + _recordMode.ToString());
        }