@@ -313,6 +313,42 @@ func TestReaderSetDeadline(t *testing.T) {
313
313
}
314
314
}
315
315
316
+ func TestReadAfterClose (t * testing.T ) {
317
+ testutils .SkipOnOldKernel (t , "5.8" , "BPF ring buffer" )
318
+
319
+ prog , events := mustOutputSamplesProg (t ,
320
+ sampleMessage {size : 5 , flags : 0 },
321
+ sampleMessage {size : 5 , flags : 0 },
322
+ )
323
+ ret , _ , err := prog .Test (internal .EmptyBPFContext )
324
+ testutils .SkipIfNotSupported (t , err )
325
+ if err != nil {
326
+ t .Fatal (err )
327
+ }
328
+ if errno := syscall .Errno (- int32 (ret )); errno != 0 {
329
+ t .Fatal ("Expected 0 as return value, got" , errno )
330
+ }
331
+ rd , err := NewReader (events )
332
+ if err != nil {
333
+ t .Fatal (err )
334
+ }
335
+
336
+ _ , err = rd .Read ()
337
+ if err != nil {
338
+ t .Error ("Expected no error after first Read, got:" , err )
339
+ }
340
+
341
+ err = rd .Close ()
342
+ if err != nil {
343
+ t .Error ("Expected no error from Close, got: " , err )
344
+ }
345
+
346
+ _ , err = rd .Read ()
347
+ if err == nil || ! errors .Is (err , ErrClosed ) {
348
+ t .Error ("Expected ErrClosed but got: " , err )
349
+ }
350
+ }
351
+
316
352
func BenchmarkReader (b * testing.B ) {
317
353
testutils .SkipOnOldKernel (b , "5.8" , "BPF ring buffer" )
318
354
0 commit comments