/// <summary>Creates a batch request from an in-memory request representation.</summary> /// <param name="request">The request to parse into a batch.</param> /// <returns>The newly created batch request.</returns> public static BatchWebRequest FromRequest(InMemoryWebRequest request) { BatchWebRequest batch = new BatchWebRequest(); Assert.AreEqual("/$batch", request.RequestUriString, "The request is not a batch request, it does not target the /$batch uri/"); batch.ParseBatchContent(request.GetRequestStream(), request.RequestContentType, false, false); return batch; }
/// <summary>Creates a batch request from an in-memory request representation.</summary> /// <param name="request">The request to parse into a batch.</param> /// <returns>The newly created batch request.</returns> public static BatchWebRequest FromRequest(InMemoryWebRequest request) { BatchWebRequest batch = new BatchWebRequest(); Assert.AreEqual("/$batch", request.RequestUriString, "The request is not a batch request, it does not target the /$batch uri/"); batch.ParseBatchContent(request.GetRequestStream(), request.RequestContentType, false, false); return(batch); }
public InMemoryWebRequest ProcessRequestOverride(InMemoryWebRequest request) { if (IsTextPayloadType(request.RequestContentType)) { string payload = ReplaceUriOccurences( this.playbackServiceBaseUri, this.underlyingServiceBaseUri, new StreamReader(request.GetRequestStream()).ReadToEnd()); // Remove all Content-Length headers (if it's a batch since we just changed the length of the requests by replacing strings) StringBuilder sb = new StringBuilder(); TextReader reader = new StringReader(payload); string line; while ((line = reader.ReadLine()) != null) { if (!line.StartsWith("Content-Length")) { sb.AppendLine(line); } } request.SetRequestStreamAsText(sb.ToString()); } // Copy the request to the server request request.WriteRequest(this.underlyingService); // Send the request try { this.underlyingService.SendRequest(); // Copy the response to our in-memory representation var response = InMemoryWebRequest.FromResponse(this.underlyingService); if (IsTextPayloadType(response.ResponseContentType)) { response.SetResponseStreamAsText( ReplaceUriOccurences( this.underlyingServiceBaseUri, this.playbackServiceBaseUri, response.GetResponseStreamAsText())); } var headersToReplace = new string[] { "Location", "OData-EntityId" }; foreach (var headerName in headersToReplace) { string value; if (response.ResponseHeaders.TryGetValue(headerName, out value)) { response.ResponseHeaders[headerName] = ReplaceUriOccurences( this.underlyingServiceBaseUri, this.playbackServiceBaseUri, value); } } return(response); } catch (Exception exception) { // Translate everything into a 500, it's easier and we don't need correct error reporting on the client anyway (for versioning tests) var response = new InMemoryWebRequest(); response.SetResponseStatusCode(500); response.ResponseHeaders["Content-Type"] = UnitTestsUtil.MimeTextPlain; response.SetResponseStreamAsText(exception.ToString()); return(response); } }
public InMemoryWebRequest ProcessRequestOverride(InMemoryWebRequest request) { if (IsTextPayloadType(request.RequestContentType)) { string payload = ReplaceUriOccurences( this.playbackServiceBaseUri, this.underlyingServiceBaseUri, new StreamReader(request.GetRequestStream()).ReadToEnd()); // Remove all Content-Length headers (if it's a batch since we just changed the length of the requests by replacing strings) StringBuilder sb = new StringBuilder(); TextReader reader = new StringReader(payload); string line; while((line = reader.ReadLine()) != null) { if (!line.StartsWith("Content-Length")) sb.AppendLine(line); } request.SetRequestStreamAsText(sb.ToString()); } // Copy the request to the server request request.WriteRequest(this.underlyingService); // Send the request try { this.underlyingService.SendRequest(); // Copy the response to our in-memory representation var response = InMemoryWebRequest.FromResponse(this.underlyingService); if (IsTextPayloadType(response.ResponseContentType)) { response.SetResponseStreamAsText( ReplaceUriOccurences( this.underlyingServiceBaseUri, this.playbackServiceBaseUri, response.GetResponseStreamAsText())); } var headersToReplace = new string[] { "Location", "OData-EntityId" }; foreach (var headerName in headersToReplace) { string value; if (response.ResponseHeaders.TryGetValue(headerName, out value)) { response.ResponseHeaders[headerName] = ReplaceUriOccurences( this.underlyingServiceBaseUri, this.playbackServiceBaseUri, value); } } return response; } catch (Exception exception) { // Translate everything into a 500, it's easier and we don't need correct error reporting on the client anyway (for versioning tests) var response = new InMemoryWebRequest(); response.SetResponseStatusCode(500); response.ResponseHeaders["Content-Type"] = UnitTestsUtil.MimeTextPlain; response.SetResponseStreamAsText(exception.ToString()); return response; } }