@@ -23,43 +23,31 @@ fn test_fanotify_notifications() {
2323 Fanotify :: init ( InitFlags :: FAN_CLASS_NOTIF , EventFFlags :: O_RDONLY )
2424 . unwrap ( ) ;
2525 let tempdir = tempfile:: tempdir ( ) . unwrap ( ) ;
26+ let tempfile = tempdir. path ( ) . join ( "test" ) ;
27+ OpenOptions :: new ( )
28+ . write ( true )
29+ . create_new ( true )
30+ . open ( & tempfile)
31+ . unwrap ( ) ;
2632
2733 group
2834 . mark (
29- MarkFlags :: FAN_MARK_ADD | MarkFlags :: FAN_MARK_MOUNT ,
35+ MarkFlags :: FAN_MARK_ADD ,
3036 MaskFlags :: FAN_OPEN | MaskFlags :: FAN_MODIFY | MaskFlags :: FAN_CLOSE ,
3137 None ,
32- Some ( tempdir . path ( ) ) ,
38+ Some ( & tempfile ) ,
3339 )
3440 . unwrap ( ) ;
3541
36- let tempfile = tempdir. path ( ) . join ( "test" ) ;
37-
38- // create test file
39- File :: create ( & tempfile) . unwrap ( ) ;
40-
41- let [ event] = & group. read_events ( ) . unwrap ( ) [ ..] else {
42- panic ! ( "should have read exactly one event" ) ;
43- } ;
44- assert ! ( event. check_version( ) ) ;
45- assert_eq ! (
46- event. mask( ) ,
47- MaskFlags :: FAN_OPEN | MaskFlags :: FAN_CLOSE_WRITE
48- ) ;
49- let fd_opt = event. fd ( ) ;
50- let fd = fd_opt. as_ref ( ) . unwrap ( ) ;
51- let path = read_link ( format ! ( "/proc/self/fd/{}" , fd. as_raw_fd( ) ) ) . unwrap ( ) ;
52- assert_eq ! ( path, tempfile) ;
53-
5442 // modify test file
5543 {
5644 let mut f = OpenOptions :: new ( ) . write ( true ) . open ( & tempfile) . unwrap ( ) ;
5745 f. write_all ( b"hello" ) . unwrap ( ) ;
5846 }
5947
60- let [ event ] = & group. read_events ( ) . unwrap ( ) [ .. ] else {
61- panic ! ( "should have read exactly one event" ) ;
62- } ;
48+ let mut events = group. read_events ( ) . unwrap ( ) ;
49+ assert_eq ! ( events . len ( ) , 1 , "should have read exactly one event" ) ;
50+ let event = events . pop ( ) . unwrap ( ) ;
6351 assert ! ( event. check_version( ) ) ;
6452 assert_eq ! (
6553 event. mask( ) ,
@@ -79,9 +67,9 @@ fn test_fanotify_notifications() {
7967 f. read_to_string ( & mut s) . unwrap ( ) ;
8068 }
8169
82- let [ event ] = & group. read_events ( ) . unwrap ( ) [ .. ] else {
83- panic ! ( "should have read exactly one event" ) ;
84- } ;
70+ let mut events = group. read_events ( ) . unwrap ( ) ;
71+ assert_eq ! ( events . len ( ) , 1 , "should have read exactly one event" ) ;
72+ let event = events . pop ( ) . unwrap ( ) ;
8573 assert ! ( event. check_version( ) ) ;
8674 assert_eq ! (
8775 event. mask( ) ,
@@ -98,54 +86,61 @@ fn test_fanotify_responses() {
9886 Fanotify :: init ( InitFlags :: FAN_CLASS_CONTENT , EventFFlags :: O_RDONLY )
9987 . unwrap ( ) ;
10088 let tempdir = tempfile:: tempdir ( ) . unwrap ( ) ;
89+ let tempfile = tempdir. path ( ) . join ( "test" ) ;
90+ OpenOptions :: new ( )
91+ . write ( true )
92+ . create_new ( true )
93+ . open ( & tempfile)
94+ . unwrap ( ) ;
10195
10296 group
10397 . mark (
104- MarkFlags :: FAN_MARK_ADD | MarkFlags :: FAN_MARK_MOUNT ,
98+ MarkFlags :: FAN_MARK_ADD ,
10599 MaskFlags :: FAN_OPEN_PERM ,
106100 None ,
107- Some ( tempdir . path ( ) ) ,
101+ Some ( & tempfile ) ,
108102 )
109103 . unwrap ( ) ;
110104
111- let tempfile = tempdir . path ( ) . join ( "test" ) ;
112- let tempfname = tempfile. clone ( ) ;
105+ let file_thread = thread :: spawn ( {
106+ let tempfile = tempfile. clone ( ) ;
113107
114- let file_thread = thread :: spawn ( move || {
115- // first try , should fail
116- let Err ( err ) = File :: create ( & tempfile) else {
117- panic ! ( "first open is denied, should return error " ) ;
118- } ;
119- assert_eq ! ( err . kind( ) , ErrorKind :: PermissionDenied ) ;
108+ move || {
109+ // first open , should fail
110+ let Err ( e ) = File :: open ( & tempfile) else {
111+ panic ! ( "The first open should fail " ) ;
112+ } ;
113+ assert_eq ! ( e . kind( ) , ErrorKind :: PermissionDenied ) ;
120114
121- // second try, should succeed
122- File :: create ( & tempfile) . unwrap ( ) ;
115+ // second open, should succeed
116+ File :: open ( & tempfile) . unwrap ( ) ;
117+ }
123118 } ) ;
124119
125120 // Deny the first open try
126- let [ event ] = & group. read_events ( ) . unwrap ( ) [ .. ] else {
127- panic ! ( "should have read exactly one event" ) ;
128- } ;
121+ let mut events = group. read_events ( ) . unwrap ( ) ;
122+ assert_eq ! ( events . len ( ) , 1 , "should have read exactly one event" ) ;
123+ let event = events . pop ( ) . unwrap ( ) ;
129124 assert ! ( event. check_version( ) ) ;
130125 assert_eq ! ( event. mask( ) , MaskFlags :: FAN_OPEN_PERM ) ;
131126 let fd_opt = event. fd ( ) ;
132127 let fd = fd_opt. as_ref ( ) . unwrap ( ) ;
133128 let path = read_link ( format ! ( "/proc/self/fd/{}" , fd. as_raw_fd( ) ) ) . unwrap ( ) ;
134- assert_eq ! ( path, tempfname ) ;
129+ assert_eq ! ( path, tempfile ) ;
135130 group
136131 . write_response ( FanotifyResponse :: new ( * fd, Response :: FAN_DENY ) )
137132 . unwrap ( ) ;
138133
139- //// Allow the second open try
140- let [ event ] = & group. read_events ( ) . unwrap ( ) [ .. ] else {
141- panic ! ( "should have read exactly one event" ) ;
142- } ;
134+ // Allow the second open try
135+ let mut events = group. read_events ( ) . unwrap ( ) ;
136+ assert_eq ! ( events . len ( ) , 1 , "should have read exactly one event" ) ;
137+ let event = events . pop ( ) . unwrap ( ) ;
143138 assert ! ( event. check_version( ) ) ;
144139 assert_eq ! ( event. mask( ) , MaskFlags :: FAN_OPEN_PERM ) ;
145140 let fd_opt = event. fd ( ) ;
146141 let fd = fd_opt. as_ref ( ) . unwrap ( ) ;
147142 let path = read_link ( format ! ( "/proc/self/fd/{}" , fd. as_raw_fd( ) ) ) . unwrap ( ) ;
148- assert_eq ! ( path, tempfname ) ;
143+ assert_eq ! ( path, tempfile ) ;
149144 group
150145 . write_response ( FanotifyResponse :: new ( * fd, Response :: FAN_ALLOW ) )
151146 . unwrap ( ) ;
0 commit comments