github.com/rish1988/moby@v25.0.2+incompatible/pkg/containerfs/rm_test.go (about)

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