github.com/rumpl/bof@v23.0.0-rc.2+incompatible/pkg/containerfs/rm_test.go (about)

     1  //go:build !darwin && !windows
     2  // +build !darwin,!windows
     3  
     4  package containerfs // import "github.com/docker/docker/pkg/containerfs"
     5  
     6  import (
     7  	"os"
     8  	"path/filepath"
     9  	"testing"
    10  	"time"
    11  
    12  	"github.com/moby/sys/mount"
    13  )
    14  
    15  func TestEnsureRemoveAllWithMount(t *testing.T) {
    16  	if os.Getuid() != 0 {
    17  		t.Skip("skipping test that requires root")
    18  	}
    19  
    20  	dir1, err := os.MkdirTemp("", "test-ensure-removeall-with-dir1")
    21  	if err != nil {
    22  		t.Fatal(err)
    23  	}
    24  	dir2, err := os.MkdirTemp("", "test-ensure-removeall-with-dir2")
    25  	if err != nil {
    26  		t.Fatal(err)
    27  	}
    28  	defer os.RemoveAll(dir2)
    29  
    30  	bindDir := filepath.Join(dir1, "bind")
    31  	if err := os.MkdirAll(bindDir, 0755); err != nil {
    32  		t.Fatal(err)
    33  	}
    34  
    35  	if err := mount.Mount(dir2, bindDir, "none", "bind"); err != nil {
    36  		t.Fatal(err)
    37  	}
    38  
    39  	done := make(chan struct{}, 1)
    40  	go func() {
    41  		err = EnsureRemoveAll(dir1)
    42  		close(done)
    43  	}()
    44  
    45  	select {
    46  	case <-done:
    47  		if err != nil {
    48  			t.Fatal(err)
    49  		}
    50  	case <-time.After(5 * time.Second):
    51  		t.Fatal("timeout waiting for EnsureRemoveAll to finish")
    52  	}
    53  
    54  	if _, err := os.Stat(dir1); !os.IsNotExist(err) {
    55  		t.Fatalf("expected %q to not exist", dir1)
    56  	}
    57  }