public async Task GetResponseMessage_returns_an_HttpResponseMessage_when_given_OnPremiseTargetResponse_is_null() { IHttpResponseMessageBuilder sut = new HttpResponseMessageBuilder(); var onPremiseTargetRequest = new OnPremiseTargetReponse { StatusCode = HttpStatusCode.NotFound, Body = new byte[] { 0, 0, 0, 0 }, HttpHeaders = new Dictionary <string, string> { { "Content-Length", "4" }, { "X-Foo", "X-Bar" } } }; var link = new Link(); HttpResponseMessage result; result = sut.BuildFrom(onPremiseTargetRequest, link); var content = await result.Content.ReadAsByteArrayAsync(); result.StatusCode.Should().Be(HttpStatusCode.NotFound); content.LongLength.Should().Be(4L); result.Content.Headers.ContentLength.Should().Be(4L); result.Content.Headers.GetValues("X-Foo").Single().Should().Be("X-Bar"); }
public void Trace_logs_exception() { var traceFileWriterMock = new Mock <ITraceFileWriter>(); var loggerMock = new Mock <ILogger>(); var traceConfigurationId = Guid.NewGuid(); var clientRequest = new OnPremiseConnectorRequest { HttpHeaders = new Dictionary <string, string> { { "Content-Type", "text/plain" }, { "Content-Length", "700" } }, Body = new byte[] { 65, 66, 67 } }; var onPremiseTargetResponse = new OnPremiseTargetReponse { HttpHeaders = new Dictionary <string, string> { { "Content-Type", "image/png" }, { "Content-Length", "7500" } }, Body = new byte[] { 66, 67, 68 } }; ITraceManager sut = new TraceManager(null, traceFileWriterMock.Object, null, new Configuration(), loggerMock.Object); var exception = new Exception(); traceFileWriterMock.Setup(t => t.WriteContentFile(It.IsAny <string>(), clientRequest.Body)).Throws(exception); loggerMock.Setup(l => l.Warn(It.IsAny <string>(), exception)); sut.Trace(clientRequest, onPremiseTargetResponse, traceConfigurationId); traceFileWriterMock.VerifyAll(); }
public async Task Relay_delegates_information_and_returns_valid_httpResponseMessage_when_entered_a_valid_path() { var startTime = DateTime.UtcNow; var loggerMock = new Mock <ILogger>(); var backendCommunicationMock = new Mock <IBackendCommunication>(); var relayRepositoryMock = new Mock <ILinkRepository>(); var pathSplitterMock = new Mock <IPathSplitter>(); var clientRequestBuilderMock = new Mock <IOnPremiseRequestBuilder>(); var httpResponseMessageBuilderMock = new Mock <IHttpResponseMessageBuilder>(); var requestLoggerMock = new Mock <IRequestLogger>(); var traceManagerMock = new Mock <ITraceManager>(); var sut = new ClientController(backendCommunicationMock.Object, loggerMock.Object, relayRepositoryMock.Object, requestLoggerMock.Object, httpResponseMessageBuilderMock.Object, clientRequestBuilderMock.Object, pathSplitterMock.Object, traceManagerMock.Object) { ControllerContext = new HttpControllerContext { Request = new HttpRequestMessage { Method = HttpMethod.Post } }, Request = new HttpRequestMessage() }; HttpResponseMessage result; var linkFake = new Link { Id = Guid.Parse("fb35e2fb-5fb6-4475-baa0-e0b06f5fdeda") }; var clientRequestFake = new OnPremiseConnectorRequest { RequestId = "239b6e03-9795-450d-bdd1-ab72900f1a98" }; var onPremiseTargetReponseFake = new OnPremiseTargetReponse(); var httpResponseMessageFake = new HttpResponseMessage { StatusCode = HttpStatusCode.Found }; var localConfigurationGuid = Guid.NewGuid(); loggerMock.Setup(l => l.Trace(It.IsAny <string>)); backendCommunicationMock.SetupGet(b => b.OriginId).Returns("c9208bdb-c195-460d-b84e-6c146bb252e5"); relayRepositoryMock.Setup(l => l.GetLink(It.IsAny <string>())).Returns(linkFake); pathSplitterMock.Setup(p => p.Split(It.IsAny <string>())).Returns(new PathInformation { PathWithoutUserName = "******" }); clientRequestBuilderMock.Setup(c => c.BuildFrom(sut.Request, "c9208bdb-c195-460d-b84e-6c146bb252e5", "Bar/Baz")).ReturnsAsync(clientRequestFake); backendCommunicationMock.Setup(b => b.SendOnPremiseConnectorRequest("fb35e2fb-5fb6-4475-baa0-e0b06f5fdeda", clientRequestFake)).Returns(Task.FromResult(0)); backendCommunicationMock.Setup(b => b.GetResponseAsync("239b6e03-9795-450d-bdd1-ab72900f1a98")).ReturnsAsync(onPremiseTargetReponseFake); httpResponseMessageBuilderMock.Setup(h => h.BuildFrom(onPremiseTargetReponseFake, linkFake)).Returns(httpResponseMessageFake); traceManagerMock.Setup(t => t.GetCurrentTraceConfigurationId(linkFake.Id)).Returns(localConfigurationGuid); traceManagerMock.Setup(t => t.Trace(clientRequestFake, onPremiseTargetReponseFake, localConfigurationGuid)); requestLoggerMock.Setup(r => r.LogRequest(clientRequestFake, onPremiseTargetReponseFake, HttpStatusCode.Found, Guid.Parse("fb35e2fb-5fb6-4475-baa0-e0b06f5fdeda"), "c9208bdb-c195-460d-b84e-6c146bb252e5", "Foo/Bar/Baz")); result = await sut.Relay("Foo/Bar/Baz"); relayRepositoryMock.VerifyAll(); pathSplitterMock.VerifyAll(); backendCommunicationMock.VerifyAll(); clientRequestBuilderMock.VerifyAll(); httpResponseMessageBuilderMock.VerifyAll(); requestLoggerMock.VerifyAll(); traceManagerMock.VerifyAll(); clientRequestFake.RequestFinished.Should().BeAfter(startTime).And.BeOnOrBefore(DateTime.UtcNow); result.Should().BeSameAs(httpResponseMessageFake); }
public void GetResponseContentForOnPremiseTargetResponse_does_not_disclose_content_when_InternalServerError_occurred_and_ForwardOnPremiseTargetErrorResponse_is_turned_off() { var sut = new HttpResponseMessageBuilder(); var onPremiseTargetResponse = new OnPremiseTargetReponse { StatusCode = HttpStatusCode.InternalServerError }; var link = new Link(); HttpContent result; result = sut.GetResponseContentForOnPremiseTargetResponse(onPremiseTargetResponse, link); result.Should().BeNull(); }
public void Trace_uses_correct_file_names_build_from_Trace_ID_and_DateTime_ticks() { var traceFileWriterMock = new Mock <ITraceFileWriter>(); var loggerMock = new Mock <ILogger>(); var traceConfigurationId = Guid.NewGuid(); var clientRequest = new OnPremiseConnectorRequest { HttpHeaders = new Dictionary <string, string> { { "Content-Type", "text/plain" }, { "Content-Length", "700" } }, Body = new byte[] { 65, 66, 67 } }; var onPremiseTargetResponse = new OnPremiseTargetReponse { HttpHeaders = new Dictionary <string, string> { { "Content-Type", "image/png" }, { "Content-Length", "7500" } }, Body = new byte[] { 66, 67, 68 } }; string clientRequestBodyFileName = null; string clientRequestHeadersFileName = null; string onPremiseTargetResponseBodyFileName = null; string onPremiseTargetResponseHeadersFileName = null; DateTime startTime; ITraceManager sut = new TraceManager(null, traceFileWriterMock.Object, null, new Configuration(), loggerMock.Object); startTime = DateTime.Now; traceFileWriterMock.Setup(t => t.WriteContentFile(It.IsAny <string>(), clientRequest.Body)).Callback((string f, byte[] c) => clientRequestBodyFileName = f); traceFileWriterMock.Setup(t => t.WriteContentFile(It.IsAny <string>(), onPremiseTargetResponse.Body)).Callback((string f, byte[] c) => onPremiseTargetResponseBodyFileName = f);; traceFileWriterMock.Setup(t => t.WriteHeaderFile(It.IsAny <string>(), clientRequest.HttpHeaders)).Callback((string f, IDictionary <string, string> c) => clientRequestHeadersFileName = f);; traceFileWriterMock.Setup(t => t.WriteHeaderFile(It.IsAny <string>(), onPremiseTargetResponse.HttpHeaders)).Callback((string f, IDictionary <string, string> c) => onPremiseTargetResponseHeadersFileName = f);; sut.Trace(clientRequest, onPremiseTargetResponse, traceConfigurationId); var ticks = new DateTime(long.Parse(clientRequestBodyFileName.Split('-').Skip(5).First().Split('.').First())); var expectedFileNamePrefix = Path.Combine("tracefiles", traceConfigurationId + "-" + ticks.Ticks); traceFileWriterMock.VerifyAll(); ticks.Should().BeOnOrAfter(startTime).And.BeOnOrBefore(DateTime.Now); clientRequestBodyFileName.Should().Be(expectedFileNamePrefix + ".ct.content"); onPremiseTargetResponseBodyFileName.Should().Be(expectedFileNamePrefix + ".optt.content"); clientRequestHeadersFileName.Should().Be(expectedFileNamePrefix + ".ct.headers"); onPremiseTargetResponseHeadersFileName.Should().Be(expectedFileNamePrefix + ".optt.headers"); }
public async Task GetResponseContentForOnPremiseTargetResponse_sets_StatusCode_accordingly_and_discloses_content() { var sut = new HttpResponseMessageBuilder(); var onPremiseTargetResponse = new OnPremiseTargetReponse { StatusCode = HttpStatusCode.OK, Body = new byte[] { 0, 0, 0, 0 } }; var link = new Link(); HttpContent result; result = sut.GetResponseContentForOnPremiseTargetResponse(onPremiseTargetResponse, link); var body = await result.ReadAsByteArrayAsync(); result.Should().NotBeNull(); body.LongLength.Should().Be(4L); }
public void GetOnPremiseTargetInformation_returns_date_values_from_OnPremiseTargetResult_when_content_is_null() { var onPremiseTargetResponse = new OnPremiseTargetReponse { RequestStarted = new DateTime(2014, 1, 1), RequestFinished = new DateTime(2014, 1, 2) }; var sut = new RequestLogger(null, null); RequestLogger.OnPremiseTargetInformation result; result = sut.GetOnPremiseTargetInformation(onPremiseTargetResponse); result.ContentBytesOut.Should().Be(0L); result.OnPremiseTargetInDate.Should().Be(new DateTime(2014, 1, 1)); result.OnPremiseTargetOutDate.Should().Be(new DateTime(2014, 1, 2)); }
public async Task GetResponseContentForOnPremiseTargetResponse_discloses_content_when_InternalServerError_occurred_and_ForwardOnPremiseTargetErrorResponse_is_turned_on() { var sut = new HttpResponseMessageBuilder(); var onPremiseTargetResponse = new OnPremiseTargetReponse { StatusCode = HttpStatusCode.InternalServerError, Body = new byte[] { 0, 0, 0 } }; var link = new Link { ForwardOnPremiseTargetErrorResponse = true }; HttpContent result; result = sut.GetResponseContentForOnPremiseTargetResponse(onPremiseTargetResponse, link); var body = await result.ReadAsByteArrayAsync(); result.Should().NotBeNull(); body.LongLength.Should().Be(3L); }
public void Trace_creates_tracefiles_directory() { var traceFileWriterMock = new Mock <ITraceFileWriter>(); var loggerMock = new Mock <ILogger>(); var traceConfigurationId = Guid.NewGuid(); var clientRequest = new OnPremiseConnectorRequest { HttpHeaders = new Dictionary <string, string> { { "Content-Type", "text/plain" }, { "Content-Length", "700" } }, Body = new byte[] { 65, 66, 67 } }; var onPremiseTargetResponse = new OnPremiseTargetReponse { HttpHeaders = new Dictionary <string, string> { { "Content-Type", "image/png" }, { "Content-Length", "7500" } }, Body = new byte[] { 66, 67, 68 } }; ITraceManager sut = new TraceManager(null, traceFileWriterMock.Object, null, new Configuration(), loggerMock.Object); Directory.CreateDirectory("tracefiles"); Directory.Delete("tracefiles"); traceFileWriterMock.Setup(t => t.WriteContentFile(It.IsAny <string>(), clientRequest.Body)); traceFileWriterMock.Setup(t => t.WriteContentFile(It.IsAny <string>(), onPremiseTargetResponse.Body)); traceFileWriterMock.Setup(t => t.WriteHeaderFile(It.IsAny <string>(), clientRequest.HttpHeaders)); traceFileWriterMock.Setup(t => t.WriteHeaderFile(It.IsAny <string>(), onPremiseTargetResponse.HttpHeaders)); sut.Trace(clientRequest, onPremiseTargetResponse, traceConfigurationId); traceFileWriterMock.VerifyAll(); Directory.Exists("tracefiles").Should().BeTrue(); Directory.Delete("tracefiles"); }
public void LogRequest_writes_correctly_composed_log_entry_to_the_RelayRepository_with_OnPremiseTargetResult_set() { var logRepositoryMock = new Mock <ILogRepository>(); var pathSplitterMock = new Mock <IPathSplitter>(); IRequestLogger sut = new RequestLogger(logRepositoryMock.Object, pathSplitterMock.Object); var clientRequest = new OnPremiseConnectorRequest { Body = new byte[] { 0, 0, 0 }, RequestStarted = new DateTime(2014, 1, 1), RequestFinished = new DateTime(2014, 1, 2) }; var onPremiseTargetResponse = new OnPremiseTargetReponse { RequestStarted = new DateTime(2014, 1, 3), RequestFinished = new DateTime(2014, 1, 4), Body = new byte[] { 0, 0 } }; RequestLogEntry result = null; logRepositoryMock.Setup(r => r.LogRequest(It.IsAny <RequestLogEntry>())).Callback <RequestLogEntry>(r => result = r); pathSplitterMock.Setup(p => p.Split(It.IsAny <string>())).Returns(new PathInformation { OnPremiseTargetKey = "that", LocalUrl = "/file.html" }); sut.LogRequest(clientRequest, onPremiseTargetResponse, HttpStatusCode.PaymentRequired, Guid.Parse("4bb4ff98-ba03-49ee-bd83-5a229f63fade"), "35eff886-2d7c-4265-a6a4-f3f471ab93e8", "gimme/that/file.html"); logRepositoryMock.Verify(r => r.LogRequest(It.IsAny <RequestLogEntry>())); result.HttpStatusCode.Should().Be(HttpStatusCode.PaymentRequired); result.OriginId.Should().Be(Guid.Parse("35eff886-2d7c-4265-a6a4-f3f471ab93e8")); result.LocalUrl.Should().Be("/file.html"); result.OnPremiseTargetKey.Should().Be("that"); result.OnPremiseConnectorInDate.Should().Be(new DateTime(2014, 1, 1)); result.OnPremiseConnectorOutDate.Should().Be(new DateTime(2014, 1, 2)); result.OnPremiseTargetInDate.Should().Be(new DateTime(2014, 1, 3)); result.OnPremiseTargetOutDate.Should().Be(new DateTime(2014, 1, 4)); result.ContentBytesIn.Should().Be(3L); result.ContentBytesOut.Should().Be(2L); result.LinkId.Should().Be(Guid.Parse("4bb4ff98-ba03-49ee-bd83-5a229f63fade")); }