@@ -855,7 +855,64 @@ public async Task SessionLogsCacheCommitCanceledException()
855
855
var token = cts . Token ;
856
856
cts . Cancel ( ) ;
857
857
await Assert . ThrowsAsync < OperationCanceledException > ( ( ) => context . Session . CommitAsync ( token ) ) ;
858
+ } ) ;
859
+ } )
860
+ . ConfigureServices ( services =>
861
+ {
862
+ services . AddSingleton ( typeof ( ILoggerFactory ) , loggerFactory ) ;
863
+ services . AddSingleton < IDistributedCache > ( new UnreliableCache ( new MemoryCache ( new MemoryCacheOptions ( ) ) )
864
+ {
865
+ DelaySetAsync = true
866
+ } ) ;
867
+ services . AddSession ( ) ;
868
+ } ) ;
869
+
870
+ using ( var server = new TestServer ( builder ) )
871
+ {
872
+ var client = server . CreateClient ( ) ;
873
+ var response = await client . GetAsync ( string . Empty ) ;
874
+ response . EnsureSuccessStatusCode ( ) ;
875
+ }
876
+
877
+ // The session is automatically committed on unwind even after the manual commit was canceled.
878
+ var sessionLogMessages = sink . Writes . Where ( message => message . LoggerName . Equals ( typeof ( DistributedSession ) . FullName , StringComparison . Ordinal ) ) . ToList ( ) ;
879
+
880
+ Assert . Contains ( "Session started" , sessionLogMessages [ 0 ] . State . ToString ( ) ) ;
881
+ Assert . Equal ( LogLevel . Information , sessionLogMessages [ 0 ] . LogLevel ) ;
882
+
883
+ Assert . Contains ( "Session stored" , sessionLogMessages [ 1 ] . State . ToString ( ) ) ;
884
+ Assert . Equal ( LogLevel . Debug , sessionLogMessages [ 1 ] . LogLevel ) ;
885
+
886
+ Assert . Empty ( sink . Writes . Where ( message => message . LoggerName . Equals ( typeof ( SessionMiddleware ) . FullName , StringComparison . Ordinal ) ) ) ;
887
+ }
888
+
889
+ [ Fact ]
890
+ public async Task RequestAbortedIgnored ( )
891
+ {
892
+ var sink = new TestSink (
893
+ writeContext =>
894
+ {
895
+ return writeContext . LoggerName . Equals ( typeof ( SessionMiddleware ) . FullName )
896
+ || writeContext . LoggerName . Equals ( typeof ( DistributedSession ) . FullName ) ;
897
+ } ,
898
+ beginScopeContext =>
899
+ {
900
+ return beginScopeContext . LoggerName . Equals ( typeof ( SessionMiddleware ) . FullName )
901
+ || beginScopeContext . LoggerName . Equals ( typeof ( DistributedSession ) . FullName ) ;
902
+ } ) ;
903
+ var loggerFactory = new TestLoggerFactory ( sink , enabled : true ) ;
904
+ var builder = new WebHostBuilder ( )
905
+ . Configure ( app =>
906
+ {
907
+ app . UseSession ( ) ;
908
+ app . Run ( context =>
909
+ {
910
+ context . Session . SetInt32 ( "key" , 0 ) ;
911
+ var cts = new CancellationTokenSource ( ) ;
912
+ var token = cts . Token ;
913
+ cts . Cancel ( ) ;
858
914
context . RequestAborted = token ;
915
+ return Task . CompletedTask ;
859
916
} ) ;
860
917
} )
861
918
. ConfigureServices ( services =>
@@ -875,12 +932,15 @@ public async Task SessionLogsCacheCommitCanceledException()
875
932
response . EnsureSuccessStatusCode ( ) ;
876
933
}
877
934
878
- Assert . Empty ( sink . Writes . Where ( message => message . LoggerName . Equals ( typeof ( DistributedSession ) . FullName , StringComparison . Ordinal ) ) ) ;
935
+ var sessionLogMessages = sink . Writes . Where ( message => message . LoggerName . Equals ( typeof ( DistributedSession ) . FullName , StringComparison . Ordinal ) ) . ToList ( ) ;
879
936
880
- var sessionMiddlewareLogs = sink . Writes . Where ( message => message . LoggerName . Equals ( typeof ( SessionMiddleware ) . FullName , StringComparison . Ordinal ) ) . ToList ( ) ;
937
+ Assert . Contains ( "Session started" , sessionLogMessages [ 0 ] . State . ToString ( ) ) ;
938
+ Assert . Equal ( LogLevel . Information , sessionLogMessages [ 0 ] . LogLevel ) ;
881
939
882
- Assert . Contains ( "Committing the session was canceled." , sessionMiddlewareLogs [ 0 ] . State . ToString ( ) ) ;
883
- Assert . Equal ( LogLevel . Information , sessionMiddlewareLogs [ 0 ] . LogLevel ) ;
940
+ Assert . Contains ( "Session stored" , sessionLogMessages [ 1 ] . State . ToString ( ) ) ;
941
+ Assert . Equal ( LogLevel . Debug , sessionLogMessages [ 1 ] . LogLevel ) ;
942
+
943
+ Assert . Empty ( sink . Writes . Where ( message => message . LoggerName . Equals ( typeof ( SessionMiddleware ) . FullName , StringComparison . Ordinal ) ) ) ;
884
944
}
885
945
886
946
[ Fact ]
0 commit comments