55
66using System ;
77using System . Buffers ;
8+ using System . Runtime . InteropServices ;
89using Xunit ;
910
1011namespace Microsoft . Extensions . Internal . Test
@@ -31,6 +32,67 @@ public void DisposeWithActiveBlocksThrows()
3132 exception = Assert . Throws < InvalidOperationException > ( ( ) => block . Dispose ( ) ) ;
3233 Assert . Equal ( "Block is being returned to disposed pool" , exception . Message ) ;
3334 }
35+
36+ [ Fact ]
37+ public void GetMemoryOfDisposedThrows ( )
38+ {
39+ var memoryPool = new SlabMemoryPool ( ) ;
40+ var block = memoryPool . Rent ( ) ;
41+
42+ var exception = Assert . Throws < InvalidOperationException > ( ( ) => memoryPool . Dispose ( ) ) ;
43+ Assert . Equal ( "Memory pool with active blocks is being disposed, 30 of 31 returned" , exception . Message ) ;
44+
45+ exception = Assert . Throws < ObjectDisposedException > ( ( ) => block . Memory ) ;
46+ Assert . Equal ( "Cannot access a disposed object.\r \n Object name: 'MemoryPoolBlock'." , exception . Message ) ;
47+ }
48+
49+ [ Fact ]
50+ public void GetMemoryPinOfDisposedThrows ( )
51+ {
52+ var memoryPool = new SlabMemoryPool ( ) ;
53+ var block = memoryPool . Rent ( ) ;
54+ var memory = block . Memory ;
55+ var exception = Assert . Throws < InvalidOperationException > ( ( ) => memoryPool . Dispose ( ) ) ;
56+ Assert . Equal ( "Memory pool with active blocks is being disposed, 30 of 31 returned" , exception . Message ) ;
57+
58+ exception = Assert . Throws < ObjectDisposedException > ( ( ) => memory . Pin ( ) ) ;
59+ Assert . Equal ( "Cannot access a disposed object.\r \n Object name: 'MemoryPoolBlock'." , exception . Message ) ;
60+ }
61+
62+ [ Fact ]
63+ public void GetMemorySpanOfDisposedThrows ( )
64+ {
65+ var memoryPool = new SlabMemoryPool ( ) ;
66+ var block = memoryPool . Rent ( ) ;
67+ var memory = block . Memory ;
68+ var exception = Assert . Throws < InvalidOperationException > ( ( ) => memoryPool . Dispose ( ) ) ;
69+ Assert . Equal ( "Memory pool with active blocks is being disposed, 30 of 31 returned" , exception . Message ) ;
70+
71+ var threw = false ;
72+ try
73+ {
74+ _ = memory . Span ;
75+ }
76+ catch ( ObjectDisposedException ode )
77+ {
78+ threw = true ;
79+ Assert . Equal ( "Cannot access a disposed object.\r \n Object name: 'MemoryPoolBlock'." , ode . Message ) ;
80+ }
81+ Assert . True ( threw ) ;
82+ }
83+
84+ [ Fact ]
85+ public void GetMemoryTryGetArrayOfDisposedThrows ( )
86+ {
87+ var memoryPool = new SlabMemoryPool ( ) ;
88+ var block = memoryPool . Rent ( ) ;
89+ var memory = block . Memory ;
90+ var exception = Assert . Throws < InvalidOperationException > ( ( ) => memoryPool . Dispose ( ) ) ;
91+ Assert . Equal ( "Memory pool with active blocks is being disposed, 30 of 31 returned" , exception . Message ) ;
92+
93+ exception = Assert . Throws < ObjectDisposedException > ( ( ) => MemoryMarshal . TryGetArray < byte > ( memory , out _ ) ) ;
94+ Assert . Equal ( "Cannot access a disposed object.\r \n Object name: 'MemoryPoolBlock'." , exception . Message ) ;
95+ }
3496 }
3597}
3698
0 commit comments