Reacting to new Hosting API

This commit is contained in:
John Luo 2015-12-17 19:58:58 -08:00
parent 09278f7013
commit 257c1786b3
5 changed files with 310 additions and 249 deletions

View File

@ -3,6 +3,7 @@
using System;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
@ -74,5 +75,15 @@ namespace SessionSample
await context.Response.WriteAsync("</body></html>");
});
}
public static void Main(string[] args)
{
var application = new WebApplicationBuilder()
.UseConfiguration(WebApplicationConfiguration.GetDefault(args))
.UseStartup<Startup>()
.Build();
application.Run();
}
}
}

View File

@ -0,0 +1,3 @@
{
"server": "Microsoft.AspNet.Server.Kestrel"
}

View File

@ -1,10 +1,12 @@
{
"compilationOptions": {
"emitEntryPoint": true
},
"commands": {
"web": "Microsoft.AspNet.Hosting server=Microsoft.AspNet.Server.WebListener server.urls=http://localhost:5001"
"web": "SessionSample"
},
"dependencies": {
"Microsoft.AspNet.Server.IIS": "1.0.0-*",
"Microsoft.AspNet.Server.WebListener": "1.0.0-*",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-*",
"Microsoft.AspNet.Session": "1.0.0-*",
"Microsoft.Extensions.Caching.Memory": "1.0.0-*",
"Microsoft.Extensions.Caching.Redis": "1.0.0-*",
@ -14,6 +16,5 @@
"exclude": "wwwroot/**/*.*",
"frameworks": {
"dnx451": { }
},
"webroot": "wwwroot"
}
}

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
</handlers>
<httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" forwardWindowsAuthToken="false" startupTimeLimit="3600" />
</system.webServer>
</configuration>

View File

@ -4,10 +4,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Http.Features;
using Microsoft.AspNet.TestHost;
@ -27,7 +27,8 @@ namespace Microsoft.AspNet.Session
[Fact]
public async Task ReadingEmptySessionDoesNotCreateCookie()
{
using (var server = TestServer.Create(app =>
var builder = new WebApplicationBuilder()
.Configure(app =>
{
app.UseSession();
@ -36,12 +37,14 @@ namespace Microsoft.AspNet.Session
Assert.Null(context.Session.GetString("NotFound"));
return Task.FromResult(0);
});
},
services =>
})
.ConfigureServices(services =>
{
services.AddCaching();
services.AddSession();
}))
});
using (var server = new TestServer(builder))
{
var client = server.CreateClient();
var response = await client.GetAsync(string.Empty);
@ -54,7 +57,8 @@ namespace Microsoft.AspNet.Session
[Fact]
public async Task SettingAValueCausesTheCookieToBeCreated()
{
using (var server = TestServer.Create(app =>
var builder = new WebApplicationBuilder()
.Configure(app =>
{
app.UseSession();
app.Run(context =>
@ -64,12 +68,14 @@ namespace Microsoft.AspNet.Session
Assert.Equal("Value", context.Session.GetString("Key"));
return Task.FromResult(0);
});
},
services =>
})
.ConfigureServices(services =>
{
services.AddCaching();
services.AddSession();
}))
});
using (var server = new TestServer(builder))
{
var client = server.CreateClient();
var response = await client.GetAsync(string.Empty);
@ -84,7 +90,8 @@ namespace Microsoft.AspNet.Session
[Fact]
public async Task SessionCanBeAccessedOnTheNextRequest()
{
using (var server = TestServer.Create(app =>
var builder = new WebApplicationBuilder()
.Configure(app =>
{
app.UseSession();
app.Run(context =>
@ -99,12 +106,14 @@ namespace Microsoft.AspNet.Session
context.Session.SetInt32("Key", value.Value + 1);
return context.Response.WriteAsync(value.Value.ToString());
});
},
services =>
})
.ConfigureServices(services =>
{
services.AddCaching();
services.AddSession();
}))
});
using (var server = new TestServer(builder))
{
var client = server.CreateClient();
var response = await client.GetAsync("first");
@ -123,7 +132,8 @@ namespace Microsoft.AspNet.Session
[Fact]
public async Task RemovedItemCannotBeAccessedAgain()
{
using (var server = TestServer.Create(app =>
var builder = new WebApplicationBuilder()
.Configure(app =>
{
app.UseSession();
app.Run(context =>
@ -148,12 +158,15 @@ namespace Microsoft.AspNet.Session
}
return context.Response.WriteAsync(value.Value.ToString());
});
},
})
.ConfigureServices(
services =>
{
services.AddCaching();
services.AddSession();
}))
});
using (var server = new TestServer(builder))
{
var client = server.CreateClient();
var response = await client.GetAsync("first");
@ -171,7 +184,8 @@ namespace Microsoft.AspNet.Session
[Fact]
public async Task ClearedItemsCannotBeAccessedAgain()
{
using (var server = TestServer.Create(app =>
var builder = new WebApplicationBuilder()
.Configure(app =>
{
app.UseSession();
app.Run(context =>
@ -196,12 +210,14 @@ namespace Microsoft.AspNet.Session
}
return context.Response.WriteAsync(value.Value.ToString());
});
},
services =>
})
.ConfigureServices(services =>
{
services.AddCaching();
services.AddSession();
}))
});
using (var server = new TestServer(builder))
{
var client = server.CreateClient();
var response = await client.GetAsync("first");
@ -221,7 +237,8 @@ namespace Microsoft.AspNet.Session
{
var sink = new TestSink();
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
using (var server = TestServer.Create(app =>
var builder = new WebApplicationBuilder()
.Configure(app =>
{
app.UseSession();
app.Run(context =>
@ -229,13 +246,15 @@ namespace Microsoft.AspNet.Session
context.Session.SetString("Key", "Value");
return Task.FromResult(0);
});
},
services =>
})
.ConfigureServices(services =>
{
services.AddSingleton(typeof(ILoggerFactory), loggerFactory);
services.AddCaching();
services.AddSession();
}))
});
using (var server = new TestServer(builder))
{
var client = server.CreateClient();
var response = await client.GetAsync(string.Empty);
@ -254,7 +273,8 @@ namespace Microsoft.AspNet.Session
{
var sink = new TestSink();
var loggerFactory = new TestLoggerFactory(sink, enabled: true);
using (var server = TestServer.Create(app =>
var builder = new WebApplicationBuilder()
.Configure(app =>
{
app.UseSession();
app.Run(context =>
@ -273,13 +293,15 @@ namespace Microsoft.AspNet.Session
}
return context.Response.WriteAsync(value.Value.ToString());
});
},
services =>
})
.ConfigureServices(services =>
{
services.AddSingleton(typeof(ILoggerFactory), loggerFactory);
services.AddCaching();
services.AddSession(o => o.IdleTimeout = TimeSpan.FromMilliseconds(30));
}))
});
using (var server = new TestServer(builder))
{
var client = server.CreateClient();
var response = await client.GetAsync("first");
@ -305,7 +327,8 @@ namespace Microsoft.AspNet.Session
public async Task RefreshesSession_WhenSessionData_IsNotModified()
{
var clock = new TestClock();
using (var server = TestServer.Create(app =>
var builder = new WebApplicationBuilder()
.Configure(app =>
{
app.UseSession();
app.Run(context =>
@ -328,14 +351,16 @@ namespace Microsoft.AspNet.Session
return context.Response.WriteAsync(responseData);
});
},
services =>
})
.ConfigureServices(services =>
{
services.AddSingleton(typeof(ILoggerFactory), new NullLoggerFactory());
services.AddCaching();
services.AddSession(o => o.IdleTimeout = TimeSpan.FromMinutes(20));
services.Configure<MemoryCacheOptions>(o => o.Clock = clock);
}))
});
using (var server = new TestServer(builder))
{
var client = server.CreateClient();
var response = await client.GetAsync("AddDataToSession");
@ -360,7 +385,8 @@ namespace Microsoft.AspNet.Session
[Fact]
public async Task SessionFeature_IsUnregistered_WhenResponseGoingOut()
{
using (var server = TestServer.Create(app =>
var builder = new WebApplicationBuilder()
.Configure(app =>
{
app.Use(async (httpContext, next) =>
{
@ -376,12 +402,14 @@ namespace Microsoft.AspNet.Session
context.Session.SetString("key", "value");
return Task.FromResult(0);
});
},
services =>
})
.ConfigureServices(services =>
{
services.AddCaching();
services.AddSession();
}))
});
using (var server = new TestServer(builder))
{
var client = server.CreateClient();
var response = await client.GetAsync(string.Empty);
@ -392,7 +420,8 @@ namespace Microsoft.AspNet.Session
[Fact]
public async Task SessionFeature_IsUnregistered_WhenResponseGoingOut_AndAnUnhandledExcetionIsThrown()
{
using (var server = TestServer.Create(app =>
var builder = new WebApplicationBuilder()
.Configure(app =>
{
app.Use(async (httpContext, next) =>
{
@ -416,12 +445,14 @@ namespace Microsoft.AspNet.Session
{
throw new InvalidOperationException("An error occurred.");
});
},
services =>
})
.ConfigureServices(services =>
{
services.AddCaching();
services.AddSession();
}))
});
using (var server = new TestServer(builder))
{
var client = server.CreateClient();
var response = await client.GetAsync(string.Empty);
@ -434,15 +465,18 @@ namespace Microsoft.AspNet.Session
// Arrange, Act & Assert
var exception = await Assert.ThrowsAsync<InvalidOperationException>(async () =>
{
using (var server = TestServer.Create(app =>
var builder = new WebApplicationBuilder()
.Configure(app =>
{
app.UseSession();
},
services =>
})
.ConfigureServices(services =>
{
services.AddSingleton<IDistributedCache, TestDistributedCache>();
services.AddSession();
}))
});
using (var server = new TestServer(builder))
{
var client = server.CreateClient();
await client.GetAsync(string.Empty);
@ -455,7 +489,8 @@ namespace Microsoft.AspNet.Session
[Fact]
public async Task SessionKeys_AreCaseSensitive()
{
using (var server = TestServer.Create(app =>
var builder = new WebApplicationBuilder()
.Configure(app =>
{
app.UseSession();
app.Run(context =>
@ -466,12 +501,14 @@ namespace Microsoft.AspNet.Session
Assert.Equal("value", context.Session.GetString("key"));
return Task.FromResult(0);
});
},
services =>
})
.ConfigureServices(services =>
{
services.AddCaching();
services.AddSession();
}))
});
using (var server = new TestServer(builder))
{
var client = server.CreateClient();
var response = await client.GetAsync(string.Empty);