github.com/mvdan/u-root-coreutils@v0.0.0-20230122170626-c2eef2898555/pkg/mount/loop/losetup_linux_test.go (about) 1 // Copyright 2019 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package loop 6 7 import ( 8 "os" 9 "path/filepath" 10 "syscall" 11 "testing" 12 13 "github.com/mvdan/u-root-coreutils/pkg/cp" 14 "golang.org/x/sys/unix" 15 ) 16 17 const ( 18 _LOOP_MAJOR = 7 19 ) 20 21 func skipIfNotRoot(t *testing.T) { 22 if os.Getuid() != 0 { 23 t.Skipf("Skipping test since we are not root") 24 } 25 } 26 27 func TestFindDevice(t *testing.T) { 28 skipIfNotRoot(t) 29 30 loopdev, err := FindDevice() 31 if err != nil { 32 t.Fatalf("Failed to find loop device: %v", err) 33 } 34 35 s, err := os.Stat(loopdev) 36 if err != nil { 37 t.Fatalf("Could not stat loop device: %v", err) 38 } 39 40 st := s.Sys().(*syscall.Stat_t) 41 if m := unix.Major(st.Rdev); m != _LOOP_MAJOR { 42 t.Fatalf("Device %s is not a loop device: got major no %d, want %d", loopdev, m, _LOOP_MAJOR) 43 } 44 } 45 46 func TestSetFile(t *testing.T) { 47 skipIfNotRoot(t) 48 49 tmpDir := t.TempDir() 50 testdisk := filepath.Join(tmpDir, "testdisk") 51 if err := cp.Copy("./testdata/pristine-vfat-disk", testdisk); err != nil { 52 t.Fatal(err) 53 } 54 55 loopdev, err := New(testdisk, "vfat", "") 56 if err != nil { 57 t.Fatal(err) 58 } 59 60 if err := os.MkdirAll("/tmp/disk", 0o755); err != nil && !os.IsExist(err) { 61 t.Fatalf("Could not create /tmp/disk: %v", err) 62 } 63 64 mp, err := loopdev.Mount("/tmp/disk", 0) 65 if err != nil { 66 t.Fatalf("Failed to mount /tmp/disk: %v", err) 67 } 68 defer mp.Unmount(0) //nolint:errcheck 69 70 if err := os.WriteFile("/tmp/disk/foobar", []byte("Are you feeling it now Mr Krabs"), 0o755); err != nil { 71 t.Fatal(err) 72 } 73 }