public void ScriptInjectionFilterStream_ExceptionOnSubsequentWrite() { // Arrange MockSocketAdapter serverSocket = new MockSocketAdapter(); serverSocket.SendString("HTTP/1.1 200 OK\r\n", Encoding.ASCII); MockScriptInjectionFilterContext filterContext = new MockScriptInjectionFilterContext(); ScriptInjectionFilterStream filterStream = CreateFilterStream(serverSocket, filterContext); byte[] bytesToSend = Encoding.UTF8.GetBytes("<html><head></head><body></body></html>"); // Act I - Write some bytes filterStream.Write(bytesToSend, 0, 20); // Assert Assert.Contains("<html><head></head><", serverSocket.SentContent); AssertWithMessage.Equal(0, filterContext.GetResponseBody(Encoding.UTF8).Length, "No content should be sent to the response yet."); Assert.False(serverSocket.IsClosed, "Server connection should not have been closed."); // Act II - Attempt to write more bytes serverSocket.ThrowExceptionOnNextSendAsync(); Task result = filterStream.WriteAsync(bytesToSend, 20, bytesToSend.Length - 20); // Assert TaskAssert.Faulted(result, "Exception should have been re-thrown"); Assert.Equal("SendAsync after ThrowExceptionOnNextSendAsync was called.", result.Exception.InnerException.Message); }
public void ScriptInjectionFilterStream_ExceptionOnFirstWrite() { // Arrange MockSocketAdapter serverSocket = new MockSocketAdapter(); MockScriptInjectionFilterContext filterContext = new MockScriptInjectionFilterContext(); ScriptInjectionFilterStream filterStream = CreateFilterStream(serverSocket, filterContext); byte[] bytesToSend = Encoding.UTF8.GetBytes("<html><head></head><body></body></html>"); // Act - Attempt to write some bytes serverSocket.ThrowExceptionOnNextSendAsync(); Task writeTask = filterStream.WriteAsync(bytesToSend, 0, 20); // Assert TaskAssert.NotFaulted(writeTask, "Task should not be faulted. Filter should switch to passthrough mode."); Assert.Equal("<html><head></head><", filterContext.GetResponseBody(Encoding.UTF8)); Assert.True(serverSocket.IsClosed, "Server connection should be closed."); }