@@ -25,13 +25,13 @@ public class OwinAppTests
2525 public async Task EventIntegration ( )
2626 {
2727 // Arrange
28- var result = new Result ( ) ;
28+ var tcs = new TaskCompletionSource < Result > ( ) ;
2929 var builder = WebApplication . CreateSlimBuilder ( ) ;
3030
3131 builder . Logging . AddDebug ( ) ;
3232 builder . WebHost . UseTestServer ( options => options . AllowSynchronousIO = true ) ;
3333
34- builder . Services . AddSingleton < IStartupFilter > ( new ResultWriterStartupFilter ( result ) ) ;
34+ builder . Services . AddSingleton < IStartupFilter > ( new ResultWriterStartupFilter ( tcs ) ) ;
3535 builder . Services . AddSystemWebAdapters ( )
3636 . AddOwinApp ( app =>
3737 {
@@ -64,6 +64,8 @@ public async Task EventIntegration()
6464 using var response = await app . GetTestClient ( ) . GetAsync ( new Uri ( "/" , UriKind . Relative ) ) ;
6565
6666 // Assert
67+ var result = await tcs . Task ;
68+
6769 Assert . Equal ( [
6870 "Before: AuthN" ,
6971 "Before: Owin1a" ,
@@ -87,12 +89,12 @@ public async Task EventIntegration()
8789 public async Task UseOwinTests ( )
8890 {
8991 // Arrange
90- var result = new Result ( ) ;
92+ var tcs = new TaskCompletionSource < Result > ( ) ;
9193 var builder = WebApplication . CreateSlimBuilder ( ) ;
9294
9395 builder . WebHost . UseTestServer ( options => options . AllowSynchronousIO = true ) ;
9496
95- builder . Services . AddSingleton < IStartupFilter > ( new ResultWriterStartupFilter ( result ) ) ;
97+ builder . Services . AddSingleton < IStartupFilter > ( new ResultWriterStartupFilter ( tcs ) ) ;
9698
9799 var app = builder . Build ( ) ;
98100
@@ -125,6 +127,7 @@ public async Task UseOwinTests()
125127 var response = await app . GetTestClient ( ) . GetStringAsync ( new Uri ( "/" , UriKind . Relative ) ) ;
126128
127129 // Assert
130+ var result = await tcs . Task ;
128131 Assert . Equal ( "Hello" , response ) ;
129132 Assert . Equal ( [
130133 "Before: a" ,
@@ -169,14 +172,21 @@ public override Task Invoke(IOwinContext context)
169172 }
170173 }
171174
172- private sealed class ResultWriterStartupFilter ( Result result ) : IStartupFilter
175+ // Use a TaskCompletionSource to make sure we wait until things are completed
176+ private sealed class ResultWriterStartupFilter ( TaskCompletionSource < Result > tcs ) : IStartupFilter
173177 {
174178 public Action < IApplicationBuilder > Configure ( Action < IApplicationBuilder > next )
175179 => builder =>
176180 {
177181 builder . Use ( async ( ctx , next ) =>
178182 {
183+ var result = new Result ( ) ;
179184 ctx . Features . Set ( result ) ;
185+ ctx . Response . OnCompleted ( ( ) =>
186+ {
187+ tcs . SetResult ( result ) ;
188+ return Task . CompletedTask ;
189+ } ) ;
180190 await next ( ctx ) ;
181191 } ) ;
182192 next ( builder ) ;
0 commit comments