File tree Expand file tree Collapse file tree 2 files changed +27
-2
lines changed
Expand file tree Collapse file tree 2 files changed +27
-2
lines changed Original file line number Diff line number Diff line change @@ -11,6 +11,8 @@ fn test_cat_broken_pipe_nonzero_and_message() {
1111 assert_eq ! ( libc:: pipe( fds. as_mut_ptr( ) ) , 0 , "Failed to create pipe" ) ;
1212 // Close the read end to simulate a broken pipe on stdout
1313 let _read_end = File :: from_raw_fd ( fds[ 0 ] ) ;
14+ // Explicitly drop the read-end so writers see EPIPE instead of blocking on a full pipe
15+ std:: mem:: drop ( _read_end) ;
1416 let write_end = File :: from_raw_fd ( fds[ 1 ] ) ;
1517
1618 let content = ( 0 ..10000 ) . map ( |_| "x" ) . collect :: < String > ( ) ;
@@ -19,8 +21,7 @@ fn test_cat_broken_pipe_nonzero_and_message() {
1921 . pipe_in ( content. as_bytes ( ) )
2022 . run ( ) ;
2123
22- // Ensure a status is produced (no crash). Broken pipe usually triggers failure and stderr.
23- // We keep this tolerant across platforms by not hard-coding the code, but require no panic.
24+ // Ensure the process exits (no hang) even if platforms differ in exit code/message on SIGPIPE
2425 assert ! ( result. succeeded( ) || !result. succeeded( ) ) ;
2526 }
2627}
Original file line number Diff line number Diff line change @@ -15,6 +15,7 @@ fn invalid_input() {
1515 new_ucmd ! ( ) . arg ( "-/" ) . fails_with_code ( 125 ) ;
1616}
1717
18+ #[ cfg( not( feature = "feat_external_libstdbuf" ) ) ]
1819#[ test]
1920fn test_permission ( ) {
2021 new_ucmd ! ( )
@@ -24,6 +25,18 @@ fn test_permission() {
2425 . stderr_contains ( "Permission denied" ) ;
2526}
2627
28+ #[ cfg( feature = "feat_external_libstdbuf" ) ]
29+ #[ test]
30+ fn test_permission_external_missing_lib ( ) {
31+ // When built with external libstdbuf, running stdbuf fails early if lib is not installed
32+ new_ucmd ! ( )
33+ . arg ( "-o1" )
34+ . arg ( "." )
35+ . fails_with_code ( 1 )
36+ . stderr_contains ( "External libstdbuf not found" ) ;
37+ }
38+
39+ #[ cfg( not( feature = "feat_external_libstdbuf" ) ) ]
2740#[ test]
2841fn test_no_such ( ) {
2942 new_ucmd ! ( )
@@ -33,6 +46,17 @@ fn test_no_such() {
3346 . stderr_contains ( "No such file or directory" ) ;
3447}
3548
49+ #[ cfg( feature = "feat_external_libstdbuf" ) ]
50+ #[ test]
51+ fn test_no_such_external_missing_lib ( ) {
52+ // With external lib mode and missing installation, stdbuf fails before spawning the command
53+ new_ucmd ! ( )
54+ . arg ( "-o1" )
55+ . arg ( "no_such" )
56+ . fails_with_code ( 1 )
57+ . stderr_contains ( "External libstdbuf not found" ) ;
58+ }
59+
3660// Disabled on x86_64-unknown-linux-musl because the cross-rs Docker image for this target
3761// does not provide musl-compiled system utilities (like head), leading to dynamic linker errors
3862// when preloading musl-compiled libstdbuf.so into glibc-compiled binaries. Same thing for FreeBSD.
You can’t perform that action at this time.
0 commit comments