@@ -23,43 +23,31 @@ fn test_fanotify_notifications() {
23
23
Fanotify :: init ( InitFlags :: FAN_CLASS_NOTIF , EventFFlags :: O_RDONLY )
24
24
. unwrap ( ) ;
25
25
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 ( ) ;
26
32
27
33
group
28
34
. mark (
29
- MarkFlags :: FAN_MARK_ADD | MarkFlags :: FAN_MARK_MOUNT ,
35
+ MarkFlags :: FAN_MARK_ADD ,
30
36
MaskFlags :: FAN_OPEN | MaskFlags :: FAN_MODIFY | MaskFlags :: FAN_CLOSE ,
31
37
None ,
32
- Some ( tempdir . path ( ) ) ,
38
+ Some ( & tempfile ) ,
33
39
)
34
40
. unwrap ( ) ;
35
41
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
-
54
42
// modify test file
55
43
{
56
44
let mut f = OpenOptions :: new ( ) . write ( true ) . open ( & tempfile) . unwrap ( ) ;
57
45
f. write_all ( b"hello" ) . unwrap ( ) ;
58
46
}
59
47
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 ( ) ;
63
51
assert ! ( event. check_version( ) ) ;
64
52
assert_eq ! (
65
53
event. mask( ) ,
@@ -79,9 +67,9 @@ fn test_fanotify_notifications() {
79
67
f. read_to_string ( & mut s) . unwrap ( ) ;
80
68
}
81
69
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 ( ) ;
85
73
assert ! ( event. check_version( ) ) ;
86
74
assert_eq ! (
87
75
event. mask( ) ,
@@ -98,54 +86,61 @@ fn test_fanotify_responses() {
98
86
Fanotify :: init ( InitFlags :: FAN_CLASS_CONTENT , EventFFlags :: O_RDONLY )
99
87
. unwrap ( ) ;
100
88
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 ( ) ;
101
95
102
96
group
103
97
. mark (
104
- MarkFlags :: FAN_MARK_ADD | MarkFlags :: FAN_MARK_MOUNT ,
98
+ MarkFlags :: FAN_MARK_ADD ,
105
99
MaskFlags :: FAN_OPEN_PERM ,
106
100
None ,
107
- Some ( tempdir . path ( ) ) ,
101
+ Some ( & tempfile ) ,
108
102
)
109
103
. unwrap ( ) ;
110
104
111
- let tempfile = tempdir . path ( ) . join ( "test" ) ;
112
- let tempfname = tempfile. clone ( ) ;
105
+ let file_thread = thread :: spawn ( {
106
+ let tempfile = tempfile. clone ( ) ;
113
107
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 ) ;
120
114
121
- // second try, should succeed
122
- File :: create ( & tempfile) . unwrap ( ) ;
115
+ // second open, should succeed
116
+ File :: open ( & tempfile) . unwrap ( ) ;
117
+ }
123
118
} ) ;
124
119
125
120
// 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 ( ) ;
129
124
assert ! ( event. check_version( ) ) ;
130
125
assert_eq ! ( event. mask( ) , MaskFlags :: FAN_OPEN_PERM ) ;
131
126
let fd_opt = event. fd ( ) ;
132
127
let fd = fd_opt. as_ref ( ) . unwrap ( ) ;
133
128
let path = read_link ( format ! ( "/proc/self/fd/{}" , fd. as_raw_fd( ) ) ) . unwrap ( ) ;
134
- assert_eq ! ( path, tempfname ) ;
129
+ assert_eq ! ( path, tempfile ) ;
135
130
group
136
131
. write_response ( FanotifyResponse :: new ( * fd, Response :: FAN_DENY ) )
137
132
. unwrap ( ) ;
138
133
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 ( ) ;
143
138
assert ! ( event. check_version( ) ) ;
144
139
assert_eq ! ( event. mask( ) , MaskFlags :: FAN_OPEN_PERM ) ;
145
140
let fd_opt = event. fd ( ) ;
146
141
let fd = fd_opt. as_ref ( ) . unwrap ( ) ;
147
142
let path = read_link ( format ! ( "/proc/self/fd/{}" , fd. as_raw_fd( ) ) ) . unwrap ( ) ;
148
- assert_eq ! ( path, tempfname ) ;
143
+ assert_eq ! ( path, tempfile ) ;
149
144
group
150
145
. write_response ( FanotifyResponse :: new ( * fd, Response :: FAN_ALLOW ) )
151
146
. unwrap ( ) ;
0 commit comments