@@ -602,37 +602,58 @@ fn test_symlinkat() {
602
602
603
603
604
604
#[ test]
605
- fn test_unlinkat ( ) {
605
+ #[ should_panic]
606
+ fn test_unlinkat_dir_noremovedir ( ) {
606
607
let tempdir = tempfile:: tempdir ( ) . unwrap ( ) ;
607
- let filename = "foo.txt" ;
608
608
let dirname = "foo_dir" ;
609
- let filepath = tempdir. path ( ) . join ( filename) ;
610
609
let dirpath = tempdir. path ( ) . join ( dirname) ;
611
610
612
- // Create file
613
- File :: create ( & filepath) . unwrap ( ) ;
614
-
615
611
// Create dir
616
612
DirBuilder :: new ( ) . recursive ( true ) . create ( & dirpath) . unwrap ( ) ;
617
613
618
614
// Get file descriptor for base directory
619
615
let dirfd = fcntl:: open ( tempdir. path ( ) , fcntl:: OFlag :: empty ( ) , stat:: Mode :: empty ( ) ) . unwrap ( ) ;
620
616
621
617
// Attempt unlink dir at relative path without proper flag
622
- panic:: set_hook ( Box :: new ( |_info| { } ) ) ;
623
- let result = std:: panic:: catch_unwind ( || unlinkat ( Some ( dirfd) , dirname, UnlinkatFlags :: NoRemoveDir ) . unwrap ( ) ) ;
624
- assert ! ( result. is_err( ) ) ;
618
+ unlinkat ( Some ( dirfd) , dirname, UnlinkatFlags :: NoRemoveDir ) . unwrap ( ) ;
625
619
assert ! ( dirpath. exists( ) ) ;
620
+ }
621
+
622
+ #[ test]
623
+ fn test_unlinkat_dir_removedir ( ) {
624
+ let tempdir = tempfile:: tempdir ( ) . unwrap ( ) ;
625
+ let dirname = "foo_dir" ;
626
+ let dirpath = tempdir. path ( ) . join ( dirname) ;
627
+
628
+ // Create dir
629
+ DirBuilder :: new ( ) . recursive ( true ) . create ( & dirpath) . unwrap ( ) ;
630
+
631
+ // Get file descriptor for base directory
632
+ let dirfd = fcntl:: open ( tempdir. path ( ) , fcntl:: OFlag :: empty ( ) , stat:: Mode :: empty ( ) ) . unwrap ( ) ;
626
633
627
634
// Attempt unlink dir at relative path with proper flag
628
635
unlinkat ( Some ( dirfd) , dirname, UnlinkatFlags :: RemoveDir ) . unwrap ( ) ;
629
636
assert ! ( !dirpath. exists( ) ) ;
637
+ }
638
+
639
+ #[ test]
640
+ fn test_unlinkat_file ( ) {
641
+ let tempdir = tempfile:: tempdir ( ) . unwrap ( ) ;
642
+ let filename = "foo.txt" ;
643
+ let filepath = tempdir. path ( ) . join ( filename) ;
644
+
645
+ // Create file
646
+ File :: create ( & filepath) . unwrap ( ) ;
647
+
648
+ // Get file descriptor for base directory
649
+ let dirfd = fcntl:: open ( tempdir. path ( ) , fcntl:: OFlag :: empty ( ) , stat:: Mode :: empty ( ) ) . unwrap ( ) ;
630
650
631
651
// Attempt unlink file at relative path
632
652
unlinkat ( Some ( dirfd) , filename, UnlinkatFlags :: NoRemoveDir ) . unwrap ( ) ;
633
653
assert ! ( !filepath. exists( ) ) ;
634
654
}
635
655
656
+
636
657
#[ test]
637
658
fn test_access_not_existing ( ) {
638
659
let tempdir = tempfile:: tempdir ( ) . unwrap ( ) ;
0 commit comments