@@ -22,10 +22,21 @@ func TestBlockDeviceBackedFilePool(t *testing.T) {
2222
2323 blockDevice := mock .NewMockBlockDevice (ctrl )
2424 sectorAllocator := mock .NewMockSectorAllocator (ctrl )
25+ freedSectors := make ([]uint32 , 0 , 16 )
26+ sectorAllocator .EXPECT ().FreeList (gomock .Any ()).DoAndReturn (func (sectors []uint32 ) {
27+ toFree := make ([]uint32 , 0 , len (sectors ))
28+ for _ , s := range sectors {
29+ if s != 0 {
30+ toFree = append (toFree , s )
31+ }
32+ }
33+ freedSectors = append (freedSectors , toFree ... )
34+ }).AnyTimes ()
2535 pool := pool .NewBlockDeviceBackedFilePool (blockDevice , sectorAllocator , 16 )
2636
2737 t .Run ("ReadEmptyFile" , func (t * testing.T ) {
2838 // Test that reads on an empty file work as expected.
39+ freedSectors = freedSectors [:0 ]
2940 f , err := pool .NewFile ()
3041 require .NoError (t , err )
3142
@@ -50,11 +61,12 @@ func TestBlockDeviceBackedFilePool(t *testing.T) {
5061 require .Equal (t , 0 , n )
5162 require .Equal (t , io .EOF , err )
5263
53- sectorAllocator . EXPECT (). FreeList ( make ( []uint32 , 12 ) )
64+ require . Equal ( t , []uint32 {}, freedSectors )
5465 require .NoError (t , f .Close ())
5566 })
5667
5768 t .Run ("Truncate" , func (t * testing.T ) {
69+ freedSectors = freedSectors [:0 ]
5870 f , err := pool .NewFile ()
5971 require .NoError (t , err )
6072
@@ -96,15 +108,13 @@ func TestBlockDeviceBackedFilePool(t *testing.T) {
96108
97109 // Continuing to shrink the file should eventually cause
98110 // the final sector to be released.
99- sectorAllocator .EXPECT ().FreeList ([]uint32 {5 })
100111 require .NoError (t , f .Truncate (80 ))
101- // Closing of the file should cause the direct sector
102- // list to be released.
103- sectorAllocator .EXPECT ().FreeList (make ([]uint32 , 12 ))
112+ require .Equal (t , []uint32 {5 }, freedSectors )
104113 require .NoError (t , f .Close ())
105114 })
106115
107116 t .Run ("WritesAndReadOnSingleSector" , func (t * testing.T ) {
117+ freedSectors = freedSectors [:0 ]
108118 f , err := pool .NewFile ()
109119 require .NoError (t , err )
110120
@@ -137,11 +147,12 @@ func TestBlockDeviceBackedFilePool(t *testing.T) {
137147 require .Equal (t , io .EOF , err )
138148 require .Equal (t , []byte ("\x00 \x00 Hello\x00 world" ), buf [:n ])
139149
140- sectorAllocator .EXPECT ().FreeList ([]uint32 {12 })
141150 require .NoError (t , f .Close ())
151+ require .Equal (t , []uint32 {12 }, freedSectors )
142152 })
143153
144154 t .Run ("WriteFragmentation" , func (t * testing.T ) {
155+ freedSectors = freedSectors [:0 ]
145156 f , err := pool .NewFile ()
146157 require .NoError (t , err )
147158
@@ -170,11 +181,12 @@ func TestBlockDeviceBackedFilePool(t *testing.T) {
170181 require .Equal (t , 137 , n )
171182 require .NoError (t , err )
172183
173- sectorAllocator .EXPECT ().FreeList ([]uint32 {0 , 0 , 75 , 76 , 77 , 21 , 22 , 23 , 24 , 105 , 106 , 40 })
174184 require .NoError (t , f .Close ())
185+ require .Equal (t , []uint32 {75 , 76 , 77 , 21 , 22 , 23 , 24 , 105 , 106 , 40 }, freedSectors )
175186 })
176187
177188 t .Run ("WriteSectorAllocatorFailure" , func (t * testing.T ) {
189+ freedSectors = freedSectors [:0 ]
178190 f , err := pool .NewFile ()
179191 require .NoError (t , err )
180192
@@ -190,11 +202,12 @@ func TestBlockDeviceBackedFilePool(t *testing.T) {
190202 require .Equal (t , 6 , n )
191203 require .Equal (t , status .Error (codes .ResourceExhausted , "Out of storage space" ), err )
192204
193- sectorAllocator .EXPECT ().FreeList ([]uint32 {0 , 0 , 75 })
194205 require .NoError (t , f .Close ())
206+ require .Equal (t , []uint32 {75 }, freedSectors )
195207 })
196208
197209 t .Run ("WriteIOFailure" , func (t * testing.T ) {
210+ freedSectors = freedSectors [:0 ]
198211 f , err := pool .NewFile ()
199212 require .NoError (t , err )
200213
@@ -212,12 +225,13 @@ func TestBlockDeviceBackedFilePool(t *testing.T) {
212225 require .Equal (t , 6 , n )
213226 require .Equal (t , status .Error (codes .Internal , "Disk failure" ), err )
214227
215- sectorAllocator .EXPECT ().FreeList ([]uint32 {0 , 0 , 75 })
216228 require .NoError (t , f .Close ())
229+ require .Equal (t , []uint32 {75 }, freedSectors )
217230 })
218231
219232 t .Run ("GetNextRegionOffset" , func (t * testing.T ) {
220233 // Test the behavior on empty files.
234+ freedSectors = freedSectors [:0 ]
221235 f , err := pool .NewFile ()
222236 require .NoError (t , err )
223237
@@ -311,8 +325,8 @@ func TestBlockDeviceBackedFilePool(t *testing.T) {
311325 _ , err = f .GetNextRegionOffset (384 , filesystem .Hole )
312326 require .Equal (t , io .EOF , err )
313327
314- sectorAllocator .EXPECT ().FreeList ([]uint32 {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 5 })
315328 require .NoError (t , f .Close ())
329+ require .Equal (t , []uint32 {5 }, freedSectors )
316330 })
317331
318332 t .Run ("WriteAt" , func (t * testing.T ) {
0 commit comments