diff options
| author | Jakob Unterwurzacher | 2025-08-03 16:02:35 +0200 | 
|---|---|---|
| committer | Jakob Unterwurzacher | 2025-08-03 21:25:24 +0200 | 
| commit | 2a5862ade9efe849ea1486b37ab672ec9a0a7e8d (patch) | |
| tree | 7e41d6517f5f72b7ad1cefbff50432fe9fe4f9b7 /tests/root_test/btrfs_test.go | |
| parent | ae23a04951780377a7d7ede6af476eaee9efa49e (diff) | |
tests: root_test: move btrfs test to new file
Diffstat (limited to 'tests/root_test/btrfs_test.go')
| -rw-r--r-- | tests/root_test/btrfs_test.go | 65 | 
1 files changed, 65 insertions, 0 deletions
| diff --git a/tests/root_test/btrfs_test.go b/tests/root_test/btrfs_test.go new file mode 100644 index 0000000..4f2527a --- /dev/null +++ b/tests/root_test/btrfs_test.go @@ -0,0 +1,65 @@ +package root_test + +import ( +	"os" +	"os/exec" +	"path/filepath" +	"syscall" +	"testing" + +	"github.com/rfjakob/gocryptfs/v2/internal/syscallcompat" + +	"github.com/rfjakob/gocryptfs/v2/tests/test_helpers" +) + +// TestBtrfsQuirks needs root permissions because it creates a loop disk +func TestBtrfsQuirks(t *testing.T) { +	if os.Getuid() != 0 { +		t.Skip("must run as root") +	} + +	img := filepath.Join(test_helpers.TmpDir, t.Name()+".img") +	f, err := os.Create(img) +	if err != nil { +		t.Fatal(err) +	} +	defer f.Close() +	// minimum size for each btrfs device is 114294784 +	err = f.Truncate(200 * 1024 * 1024) +	if err != nil { +		t.Fatal(err) +	} + +	// Format as Btrfs +	_, err = exec.LookPath("mkfs.btrfs") +	if err != nil { +		t.Skip("mkfs.btrfs not found, skipping test") +	} +	cmd := exec.Command("mkfs.btrfs", img) +	out, err := cmd.CombinedOutput() +	if err != nil { +		t.Logf("%q", cmd.Args) +		t.Log(string(out)) +		t.Fatal(err) +	} + +	// Mount +	mnt := img + ".mnt" +	err = os.Mkdir(mnt, 0600) +	if err != nil { +		t.Fatal(err) +	} +	cmd = exec.Command("mount", img, mnt) +	out, err = cmd.CombinedOutput() +	if err != nil { +		t.Log(string(out)) +		t.Fatal(err) +	} +	defer syscall.Unlink(img) +	defer syscall.Unmount(mnt, 0) + +	quirk := syscallcompat.DetectQuirks(mnt) +	if quirk != syscallcompat.QuirkBrokenFalloc { +		t.Errorf("wrong quirk: %v", quirk) +	} +} | 
