@@ -29,3 +29,33 @@ fn test_fcntl_setpipe_size() {
2929 assert_eq ! ( reader_size, new_size) ;
3030 assert_eq ! ( reader_size, writer_size) ;
3131}
32+
33+ /// Test that we can write up to the pipe buffer size without blocking.
34+ #[ cfg( linux_kernel) ]
35+ #[ test]
36+ fn test_fcntl_pipe_sized_writes ( ) {
37+ use rustix:: io:: { read, write} ;
38+ use rustix:: pipe:: { fcntl_getpipe_size, fcntl_setpipe_size} ;
39+
40+ let ( reader, writer) = rustix:: pipe:: pipe ( ) . unwrap ( ) ;
41+
42+ let size = fcntl_getpipe_size ( & reader) . unwrap ( ) ;
43+
44+ let ones = vec ! [ 1 ; size] ;
45+ assert_eq ! ( write( & writer, & ones) , Ok ( size) ) ;
46+ let mut buf = vec ! [ 2 ; size] ;
47+ assert_eq ! ( read( & reader, & mut buf) , Ok ( size) ) ;
48+ assert_eq ! ( buf, ones) ;
49+
50+ let size = size * 2 ;
51+ let set_size = fcntl_setpipe_size ( & reader, size) . unwrap ( ) ;
52+ let get_size = fcntl_getpipe_size ( & reader) . unwrap ( ) ;
53+ assert_eq ! ( size, set_size) ;
54+ assert_eq ! ( size, get_size) ;
55+
56+ let ones = vec ! [ 1 ; size] ;
57+ assert_eq ! ( write( & writer, & ones) , Ok ( size) ) ;
58+ let mut buf = vec ! [ 2 ; size] ;
59+ assert_eq ! ( read( & reader, & mut buf) , Ok ( size) ) ;
60+ assert_eq ! ( buf, ones) ;
61+ }
0 commit comments