Esempio n. 1
0
 public Queue <RecordEntry> this[string key]
 {
     get
     {
         if (sessionRecords.ContainsKey(key))
         {
             return(sessionRecords[key]);
         }
         else
         {
             throw new KeyNotFoundException(
                       string.Format("Unable to find a matching HTTP request for URL '{0}'. Calling method {1}().",
                                     RecorderUtilities.DecodeBase64AsUri(key),
                                     GetCallingMethodName()));
         }
     }
     set { sessionRecords[key] = value; }
 }
Esempio n. 2
0
        protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            if (Mode == HttpRecorderMode.Playback)
            {
                // Will throw KeyNotFoundException if the request is not recorded
                lock (records)
                {
                    var key = Matcher.GetMatchingKey(request);

                    var queue = records[key];
                    if (!queue.Any())
                    {
                        throw new InvalidOperationException(string.Format(
                                                                "Queue empty for request {0}",
                                                                RecorderUtilities.DecodeBase64AsUri(key)));
                    }

                    HttpResponseMessage result = queue.Dequeue().GetResponse();
                    result = AddTestModeHeaders(result);

                    result.RequestMessage = request;
                    return(Task.FromResult(result));
                }
            }
            else
            {
                lock (this)
                {
                    return(base.SendAsync(request, cancellationToken).ContinueWith <HttpResponseMessage>(response =>
                    {
                        HttpResponseMessage result = response.Result;
                        if (Mode == HttpRecorderMode.Record)
                        {
                            lock (records)
                            {
                                records.Enqueue(new RecordEntry(result));
                            }
                        }

                        return result;
                    }));
                }
            }
        }