public async Task ConditionalTransformAppliesForRegex() { var clientIdTransform = new StorageRequestIdTransform(condition: new ApplyCondition() { UriRegex = @".+/Tables.*" }); RecordingHandler testRecordingHandler = new RecordingHandler(Directory.GetCurrentDirectory()); testRecordingHandler.Transforms.Clear(); testRecordingHandler.Transforms.Add(clientIdTransform); var playbackContext = new DefaultHttpContext(); var targetHeaderKey = "x-ms-client-request-id"; var targetFile = "Test.RecordEntries/response_with_xml_body.json"; var transformedEntry = TestHelpers.LoadRecordSession(targetFile).Session.Entries[0]; var clientId = transformedEntry.Request.Headers[targetHeaderKey][0]; var untransformedEntry = TestHelpers.LoadRecordSession(targetFile).Session.Entries[1]; // start playback var body = "{\"x-recording-file\":\"" + targetFile + "\"}"; playbackContext.Request.Body = TestHelpers.GenerateStreamRequestBody(body); playbackContext.Request.ContentLength = body.Length; var controller = new Playback(testRecordingHandler) { ControllerContext = new ControllerContext() { HttpContext = playbackContext } }; await controller.Start(); var recordingId = playbackContext.Response.Headers["x-recording-id"].ToString(); // transform should apply only to first/last request HttpRequest transformedRequest = TestHelpers.CreateRequestFromEntry(transformedEntry); HttpResponse transformedResponse = new DefaultHttpContext().Response; await testRecordingHandler.HandlePlaybackRequest(recordingId, transformedRequest, transformedResponse); Assert.Contains(clientId, transformedResponse.Headers["x-ms-client-request-id"].ToString()); // this one should not add the x-ms-client-request-id to the response, the transform should NOT apply HttpRequest nonTransformedRequest = TestHelpers.CreateRequestFromEntry(untransformedEntry); HttpResponse nonTransformedresponse = new DefaultHttpContext().Response; await testRecordingHandler.HandlePlaybackRequest(recordingId, nonTransformedRequest, nonTransformedresponse); Assert.False(nonTransformedresponse.Headers.ContainsKey(targetHeaderKey)); }
public async Task ApiTransformPullsFromRequest() { var headerTransform = new StorageRequestIdTransform(); RecordingHandler testRecordingHandler = new RecordingHandler(Directory.GetCurrentDirectory()); testRecordingHandler.Transforms.Clear(); testRecordingHandler.Transforms.Add(headerTransform); var playbackContext = new DefaultHttpContext(); var targetFile = "Test.RecordEntries/response_with_header_to_transform.json"; var requestEntry = TestHelpers.LoadRecordSession(targetFile).Session.Entries[0]; var fakeGuid = "not-a-guid"; requestEntry.Request.Headers["x-ms-client-request-id"] = new string[] { fakeGuid }; // start playback var body = "{\"x-recording-file\":\"" + targetFile + "\"}"; playbackContext.Request.Body = TestHelpers.GenerateStreamRequestBody(body); playbackContext.Request.ContentLength = body.Length; var controller = new Playback(testRecordingHandler, new NullLoggerFactory()) { ControllerContext = new ControllerContext() { HttpContext = playbackContext } }; await controller.Start(); var recordingId = playbackContext.Response.Headers["x-recording-id"].ToString(); // transform should apply HttpRequest request = TestHelpers.CreateRequestFromEntry(requestEntry); HttpResponse response = new DefaultHttpContext().Response; await testRecordingHandler.HandlePlaybackRequest(recordingId, request, response); Assert.Equal(fakeGuid, response.Headers["x-ms-client-request-id"].ToString()); }