Updating unit tests for Frame IFeatureCollection update

This commit is contained in:
Louis DeJardin 2015-10-06 12:52:12 -07:00
parent 71fc2bf2e5
commit dc0eb679ae
7 changed files with 84 additions and 59 deletions

View File

@ -6,6 +6,7 @@ using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Http; using Microsoft.AspNet.Http;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Dnx.Runtime; using Microsoft.Dnx.Runtime;
using Microsoft.AspNet.Server.Kestrel;
#if DNX451 #if DNX451
using System.IO; using System.IO;

View File

@ -11,7 +11,6 @@ using Microsoft.AspNet.Server.Kestrel.Infrastructure;
using Microsoft.AspNet.Server.Kestrel.Networking; using Microsoft.AspNet.Server.Kestrel.Networking;
using Microsoft.Dnx.Runtime; using Microsoft.Dnx.Runtime;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Framework.Logging;
namespace Microsoft.AspNet.Server.Kestrel namespace Microsoft.AspNet.Server.Kestrel
{ {

View File

@ -1,6 +1,7 @@
// Copyright (c) .NET Foundation. All rights reserved. // Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.AspNet.Http.Features;
using System; using System;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -15,9 +16,10 @@ namespace Microsoft.AspNet.Server.KestrelTests
{ {
using (var server = new TestServer(async frame => using (var server = new TestServer(async frame =>
{ {
frame.ResponseHeaders.Clear(); var response = frame.Get<IHttpResponseFeature>();
await frame.ResponseBody.WriteAsync(Encoding.ASCII.GetBytes("Hello "), 0, 6); response.Headers.Clear();
await frame.ResponseBody.WriteAsync(Encoding.ASCII.GetBytes("World!"), 0, 6); await response.Body.WriteAsync(Encoding.ASCII.GetBytes("Hello "), 0, 6);
await response.Body.WriteAsync(Encoding.ASCII.GetBytes("World!"), 0, 6);
})) }))
{ {
using (var connection = new TestConnection()) using (var connection = new TestConnection())
@ -46,10 +48,11 @@ namespace Microsoft.AspNet.Server.KestrelTests
{ {
using (var server = new TestServer(async frame => using (var server = new TestServer(async frame =>
{ {
frame.ResponseHeaders.Clear(); var response = frame.Get<IHttpResponseFeature>();
await frame.ResponseBody.WriteAsync(Encoding.ASCII.GetBytes("Hello "), 0, 6); response.Headers.Clear();
await frame.ResponseBody.WriteAsync(new byte[0], 0, 0); await response.Body.WriteAsync(Encoding.ASCII.GetBytes("Hello "), 0, 6);
await frame.ResponseBody.WriteAsync(Encoding.ASCII.GetBytes("World!"), 0, 6); await response.Body.WriteAsync(new byte[0], 0, 0);
await response.Body.WriteAsync(Encoding.ASCII.GetBytes("World!"), 0, 6);
})) }))
{ {
using (var connection = new TestConnection()) using (var connection = new TestConnection())
@ -78,8 +81,9 @@ namespace Microsoft.AspNet.Server.KestrelTests
{ {
using (var server = new TestServer(async frame => using (var server = new TestServer(async frame =>
{ {
frame.ResponseHeaders.Clear(); var response = frame.Get<IHttpResponseFeature>();
await frame.ResponseBody.WriteAsync(new byte[0], 0, 0); response.Headers.Clear();
await response.Body.WriteAsync(new byte[0], 0, 0);
})) }))
{ {
using (var connection = new TestConnection()) using (var connection = new TestConnection())
@ -104,8 +108,9 @@ namespace Microsoft.AspNet.Server.KestrelTests
{ {
using (var server = new TestServer(async frame => using (var server = new TestServer(async frame =>
{ {
frame.ResponseHeaders.Clear(); var response = frame.Get<IHttpResponseFeature>();
await frame.ResponseBody.WriteAsync(Encoding.ASCII.GetBytes("Hello World!"), 0, 12); response.Headers.Clear();
await response.Body.WriteAsync(Encoding.ASCII.GetBytes("Hello World!"), 0, 12);
throw new Exception(); throw new Exception();
})) }))
{ {
@ -133,8 +138,9 @@ namespace Microsoft.AspNet.Server.KestrelTests
{ {
using (var server = new TestServer(async frame => using (var server = new TestServer(async frame =>
{ {
frame.ResponseHeaders.Clear(); var response = frame.Get<IHttpResponseFeature>();
await frame.ResponseBody.WriteAsync(new byte[0], 0, 0); response.Headers.Clear();
await response.Body.WriteAsync(new byte[0], 0, 0);
throw new Exception(); throw new Exception();
})) }))
{ {

View File

@ -6,23 +6,26 @@ using System.Threading.Tasks;
using Microsoft.AspNet.Server.Kestrel.Filter; using Microsoft.AspNet.Server.Kestrel.Filter;
using Microsoft.AspNet.Server.Kestrel.Http; using Microsoft.AspNet.Server.Kestrel.Http;
using Xunit; using Xunit;
using Microsoft.AspNet.Http.Features;
namespace Microsoft.AspNet.Server.KestrelTests namespace Microsoft.AspNet.Server.KestrelTests
{ {
public class ConnectionFilterTests public class ConnectionFilterTests
{ {
private async Task App(Frame frame) private async Task App(IFeatureCollection frame)
{ {
frame.ResponseHeaders.Clear(); var request = frame.Get<IHttpRequestFeature>();
var response = frame.Get<IHttpResponseFeature>();
response.Headers.Clear();
while (true) while (true)
{ {
var buffer = new byte[8192]; var buffer = new byte[8192];
var count = await frame.RequestBody.ReadAsync(buffer, 0, buffer.Length); var count = await request.Body.ReadAsync(buffer, 0, buffer.Length);
if (count == 0) if (count == 0)
{ {
break; break;
} }
await frame.ResponseBody.WriteAsync(buffer, 0, count); await response.Body.WriteAsync(buffer, 0, count);
} }
} }

View File

@ -13,6 +13,7 @@ using Microsoft.AspNet.Server.Kestrel.Http;
using Microsoft.Dnx.Runtime; using Microsoft.Dnx.Runtime;
using Microsoft.Dnx.Runtime.Infrastructure; using Microsoft.Dnx.Runtime.Infrastructure;
using Xunit; using Xunit;
using Microsoft.AspNet.Http.Features;
namespace Microsoft.AspNet.Server.KestrelTests namespace Microsoft.AspNet.Server.KestrelTests
{ {
@ -40,18 +41,20 @@ namespace Microsoft.AspNet.Server.KestrelTests
} }
} }
private async Task App(Frame frame) private async Task App(IFeatureCollection frame)
{ {
frame.ResponseHeaders.Clear(); var request = frame.Get<IHttpRequestFeature>();
var response = frame.Get<IHttpResponseFeature>();
response.Headers.Clear();
while (true) while (true)
{ {
var buffer = new byte[8192]; var buffer = new byte[8192];
var count = await frame.RequestBody.ReadAsync(buffer, 0, buffer.Length); var count = await request.Body.ReadAsync(buffer, 0, buffer.Length);
if (count == 0) if (count == 0)
{ {
break; break;
} }
await frame.ResponseBody.WriteAsync(buffer, 0, count); await response.Body.WriteAsync(buffer, 0, count);
} }
} }
@ -78,20 +81,22 @@ namespace Microsoft.AspNet.Server.KestrelTests
} }
} }
private async Task AppChunked(Frame frame) private async Task AppChunked(IFeatureCollection frame)
{ {
var request = frame.Get<IHttpRequestFeature>();
var response = frame.Get<IHttpResponseFeature>();
var data = new MemoryStream(); var data = new MemoryStream();
await frame.RequestBody.CopyToAsync(data); await request.Body.CopyToAsync(data);
var bytes = data.ToArray(); var bytes = data.ToArray();
frame.ResponseHeaders.Clear(); response.Headers.Clear();
frame.ResponseHeaders["Content-Length"] = new[] { bytes.Length.ToString() }; response.Headers["Content-Length"] = bytes.Length.ToString();
await frame.ResponseBody.WriteAsync(bytes, 0, bytes.Length); await response.Body.WriteAsync(bytes, 0, bytes.Length);
} }
private Task EmptyApp(Frame frame) private Task EmptyApp(IFeatureCollection frame)
{ {
frame.ResponseHeaders.Clear(); frame.Get<IHttpResponseFeature>().Headers.Clear();
return Task.FromResult<object>(null); return Task.FromResult<object>(null);
} }
@ -494,12 +499,14 @@ namespace Microsoft.AspNet.Server.KestrelTests
{ {
using (var server = new TestServer(async frame => using (var server = new TestServer(async frame =>
{ {
frame.ResponseHeaders.Clear(); var request = frame.Get<IHttpRequestFeature>();
var response = frame.Get<IHttpResponseFeature>();
response.Headers.Clear();
using (var reader = new StreamReader(frame.RequestBody, Encoding.ASCII)) using (var reader = new StreamReader(request.Body, Encoding.ASCII))
{ {
var statusString = await reader.ReadLineAsync(); var statusString = await reader.ReadLineAsync();
frame.StatusCode = int.Parse(statusString); response.StatusCode = int.Parse(statusString);
} }
}, testContext)) }, testContext))
{ {
@ -547,15 +554,16 @@ namespace Microsoft.AspNet.Server.KestrelTests
using (var server = new TestServer(frame => using (var server = new TestServer(frame =>
{ {
frame.OnStarting(_ => var response = frame.Get<IHttpResponseFeature>();
response.OnStarting(_ =>
{ {
onStartingCalled = true; onStartingCalled = true;
return Task.FromResult<object>(null); return Task.FromResult<object>(null);
}, null); }, null);
// Anything added to the ResponseHeaders dictionary is ignored // Anything added to the ResponseHeaders dictionary is ignored
frame.ResponseHeaders.Clear(); response.Headers.Clear();
frame.ResponseHeaders["Content-Length"] = new[] { "11" }; response.Headers["Content-Length"] = "11";
throw new Exception(); throw new Exception();
}, testContext)) }, testContext))
{ {
@ -599,15 +607,16 @@ namespace Microsoft.AspNet.Server.KestrelTests
using (var server = new TestServer(async frame => using (var server = new TestServer(async frame =>
{ {
frame.OnStarting(_ => var response = frame.Get<IHttpResponseFeature>();
response.OnStarting(_ =>
{ {
onStartingCalled = true; onStartingCalled = true;
return Task.FromResult<object>(null); return Task.FromResult<object>(null);
}, null); }, null);
frame.ResponseHeaders.Clear(); response.Headers.Clear();
frame.ResponseHeaders["Content-Length"] = new[] { "11" }; response.Headers["Content-Length"] = new[] { "11" };
await frame.ResponseBody.WriteAsync(Encoding.ASCII.GetBytes("Hello World"), 0, 11); await response.Body.WriteAsync(Encoding.ASCII.GetBytes("Hello World"), 0, 11);
throw new Exception(); throw new Exception();
}, testContext)) }, testContext))
{ {
@ -636,15 +645,16 @@ namespace Microsoft.AspNet.Server.KestrelTests
using (var server = new TestServer(async frame => using (var server = new TestServer(async frame =>
{ {
frame.OnStarting(_ => var response = frame.Get<IHttpResponseFeature>();
response.OnStarting(_ =>
{ {
onStartingCalled = true; onStartingCalled = true;
return Task.FromResult<object>(null); return Task.FromResult<object>(null);
}, null); }, null);
frame.ResponseHeaders.Clear(); response.Headers.Clear();
frame.ResponseHeaders["Content-Length"] = new[] { "11" }; response.Headers["Content-Length"] = new[] { "11" };
await frame.ResponseBody.WriteAsync(Encoding.ASCII.GetBytes("Hello"), 0, 5); await response.Body.WriteAsync(Encoding.ASCII.GetBytes("Hello"), 0, 5);
throw new Exception(); throw new Exception();
}, testContext)) }, testContext))
{ {
@ -740,13 +750,14 @@ namespace Microsoft.AspNet.Server.KestrelTests
{ {
using (var server = new TestServer(frame => using (var server = new TestServer(frame =>
{ {
frame.OnStarting(_ => var response = frame.Get<IHttpResponseFeature>();
response.OnStarting(_ =>
{ {
throw new Exception(); throw new Exception();
}, null); }, null);
frame.ResponseHeaders.Clear(); response.Headers.Clear();
frame.ResponseHeaders["Content-Length"] = new[] { "11" }; response.Headers["Content-Length"] = new[] { "11" };
// If we write to the response stream, we will not get a 500. // If we write to the response stream, we will not get a 500.
@ -791,21 +802,22 @@ namespace Microsoft.AspNet.Server.KestrelTests
{ {
var onStartingException = new Exception(); var onStartingException = new Exception();
frame.OnStarting(_ => var response = frame.Get<IHttpResponseFeature>();
response.OnStarting(_ =>
{ {
throw onStartingException; throw onStartingException;
}, null); }, null);
frame.ResponseHeaders.Clear(); response.Headers.Clear();
frame.ResponseHeaders["Content-Length"] = new[] { "11" }; response.Headers["Content-Length"] = new[] { "11" };
var writeException = await Assert.ThrowsAsync<Exception>(async () => var writeException = await Assert.ThrowsAsync<Exception>(async () =>
await frame.ResponseBody.WriteAsync(Encoding.ASCII.GetBytes("Hello World"), 0, 11)); await response.Body.WriteAsync(Encoding.ASCII.GetBytes("Hello World"), 0, 11));
Assert.Same(onStartingException, writeException); Assert.Same(onStartingException, writeException);
// The second write should succeed since the OnStarting callback will not be called again // The second write should succeed since the OnStarting callback will not be called again
await frame.ResponseBody.WriteAsync(Encoding.ASCII.GetBytes("Exception!!"), 0, 11); await response.Body.WriteAsync(Encoding.ASCII.GetBytes("Exception!!"), 0, 11);
}, testContext)) }, testContext))
{ {
using (var connection = new TestConnection()) using (var connection = new TestConnection())

View File

@ -13,23 +13,26 @@ using Microsoft.AspNet.Server.Kestrel.Http;
using Microsoft.AspNet.Server.Kestrel.Https; using Microsoft.AspNet.Server.Kestrel.Https;
using Microsoft.AspNet.Testing.xunit; using Microsoft.AspNet.Testing.xunit;
using Xunit; using Xunit;
using Microsoft.AspNet.Http.Features;
namespace Microsoft.AspNet.Server.KestrelTests namespace Microsoft.AspNet.Server.KestrelTests
{ {
public class HttpsConnectionFilterTests public class HttpsConnectionFilterTests
{ {
private async Task App(Frame frame) private async Task App(IFeatureCollection frame)
{ {
frame.ResponseHeaders.Clear(); var request = frame.Get<IHttpRequestFeature>();
var response = frame.Get<IHttpResponseFeature>();
response.Headers.Clear();
while (true) while (true)
{ {
var buffer = new byte[8192]; var buffer = new byte[8192];
var count = await frame.RequestBody.ReadAsync(buffer, 0, buffer.Length); var count = await request.Body.ReadAsync(buffer, 0, buffer.Length);
if (count == 0) if (count == 0)
{ {
break; break;
} }
await frame.ResponseBody.WriteAsync(buffer, 0, count); await response.Body.WriteAsync(buffer, 0, count);
} }
} }

View File

@ -7,6 +7,7 @@ using Microsoft.AspNet.Server.Kestrel;
using Microsoft.AspNet.Server.Kestrel.Http; using Microsoft.AspNet.Server.Kestrel.Http;
using Microsoft.Dnx.Runtime; using Microsoft.Dnx.Runtime;
using Microsoft.Dnx.Runtime.Infrastructure; using Microsoft.Dnx.Runtime.Infrastructure;
using Microsoft.AspNet.Http.Features;
namespace Microsoft.AspNet.Server.KestrelTests namespace Microsoft.AspNet.Server.KestrelTests
{ {
@ -18,16 +19,16 @@ namespace Microsoft.AspNet.Server.KestrelTests
private KestrelEngine _engine; private KestrelEngine _engine;
private IDisposable _server; private IDisposable _server;
public TestServer(Func<Frame, Task> app) public TestServer(Func<IFeatureCollection, Task> app)
: this(app, new TestServiceContext()) : this(app, new TestServiceContext())
{ {
} }
public TestServer(Func<Frame, Task> app, ServiceContext context) public TestServer(Func<IFeatureCollection, Task> app, ServiceContext context)
: this(app, context, "http://localhost:54321/") : this(app, context, "http://localhost:54321/")
{ {
} }
public TestServer(Func<Frame, Task> app, ServiceContext context, string serverAddress) public TestServer(Func<IFeatureCollection, Task> app, ServiceContext context, string serverAddress)
{ {
Create(app, context, serverAddress); Create(app, context, serverAddress);
} }
@ -54,7 +55,7 @@ namespace Microsoft.AspNet.Server.KestrelTests
} }
} }
public void Create(Func<Frame, Task> app, ServiceContext context, string serverAddress) public void Create(Func<IFeatureCollection, Task> app, ServiceContext context, string serverAddress)
{ {
_engine = new KestrelEngine( _engine = new KestrelEngine(
LibraryManager, LibraryManager,