@@ -155,6 +155,47 @@ let test_expose_backend () =
155155 let backend = Eio.Stdenv. backend_id env in
156156 assert (backend = " linux" )
157157
158+ let kind_t = Alcotest. of_pp Uring.Statx. pp_kind
159+
160+ let test_statx () =
161+ let module X = Uring. Statx in
162+ Eio_linux. run ~queue_depth: 4 @@ fun env ->
163+ let ( / ) = Eio.Path. ( / ) in
164+ let path = env#cwd / " test2.data" in
165+ let msg = " hello" in
166+ Eio.Path. save path (" !" ^ msg) ~create: (`Exclusive 0o600 );
167+ let buf = Uring.Statx. create () in
168+ let test ~flags ?fd path =
169+ Eio_linux.Low_level. statx ~mask: X.Mask. (type ' + size) ?fd path buf flags;
170+ Alcotest. check kind_t " kind" `Regular_file (Uring.Statx. kind buf);
171+ Alcotest. (check int64 ) " size" 6L (Uring.Statx. size buf)
172+ in
173+ (* Lookup via cwd *)
174+ test ~flags: X.Flags. empty ?fd:None " test.data" ;
175+ (* Lookup via file FD *)
176+ Switch. run (fun sw ->
177+ let fd = Eio_linux.Low_level. openat2 ~sw
178+ ~access: `R
179+ ~flags: Uring.Open_flags. empty
180+ ~perm: 0
181+ ~resolve: Uring.Resolve. empty
182+ " test.data"
183+ in
184+ test ~flags: X.Flags. empty_path ~fd " "
185+ );
186+ (* Lookup via directory FD *)
187+ Switch. run (fun sw ->
188+ let fd = Eio_linux.Low_level. openat2 ~sw
189+ ~access: `R
190+ ~flags: Uring.Open_flags. path
191+ ~perm: 0
192+ ~resolve: Uring.Resolve. empty
193+ " ."
194+ in
195+ test ~flags: X.Flags. empty_path ~fd " test.data"
196+ );
197+ ()
198+
158199let () =
159200 let open Alcotest in
160201 run " eio_linux" [
@@ -167,5 +208,6 @@ let () =
167208 test_case " no_sqe" `Quick test_no_sqe;
168209 test_case " read_exact" `Quick test_read_exact;
169210 test_case " expose_backend" `Quick test_expose_backend;
211+ test_case " statx" `Quick test_statx;
170212 ];
171213 ]
0 commit comments