github.com/andrewsun2898/u-root@v6.0.1-0.20200616011413-4b2895c1b815+incompatible/pkg/mount/mount_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 mount_test 6 7 import ( 8 "io/ioutil" 9 "os" 10 "path/filepath" 11 "reflect" 12 "strings" 13 "testing" 14 15 "github.com/u-root/u-root/pkg/mount" 16 "github.com/u-root/u-root/pkg/scuzz" 17 "github.com/u-root/u-root/pkg/storage" 18 "github.com/u-root/u-root/pkg/testutil" 19 ) 20 21 // Assumptions: 22 // 23 // /dev/sda is ./testdata/1MB.ext4_vfat 24 // /dev/sda1 is ext4 25 // /dev/sda2 is vfat 26 // 27 // /dev/sdb is ./testdata/12Kzeros 28 // /dev/sdb1 exists, but is not formatted. 29 30 func TestIdentify(t *testing.T) { 31 testutil.SkipIfNotRoot(t) 32 33 disk, err := scuzz.NewSGDisk("/dev/sda") 34 if err != nil { 35 t.Fatal(err) 36 } 37 defer disk.Close() 38 39 info, err := disk.Identify() 40 if err != nil { 41 t.Fatal(err) 42 } 43 t.Logf("Identify(/dev/sda): %v", info) 44 45 device, err := storage.Device("/dev/sda") 46 if err != nil { 47 t.Fatal(err) 48 } 49 size, err := device.Size() 50 if err != nil { 51 t.Fatal(err) 52 } 53 54 if info.NumberSectors != size/512 { 55 t.Errorf("Identify(/dev/sda).NumberSectors = %d, want %d", info.NumberSectors, size/512) 56 } 57 } 58 59 func TestTryMount(t *testing.T) { 60 testutil.SkipIfNotRoot(t) 61 62 d, err := ioutil.TempDir("", "test-") 63 if err != nil { 64 t.Fatal(err) 65 } 66 defer os.RemoveAll(d) 67 68 sda1 := filepath.Join(d, "sda1") 69 if mp, err := mount.TryMount("/dev/sda1", sda1, mount.ReadOnly); err != nil { 70 t.Errorf("TryMount(/dev/sda1) = %v, want nil", err) 71 } else { 72 want := &mount.MountPoint{ 73 Path: sda1, 74 Device: "/dev/sda1", 75 FSType: "ext4", 76 Flags: mount.ReadOnly, 77 } 78 if !reflect.DeepEqual(mp, want) { 79 t.Errorf("TryMount(/dev/sda1) = %v, want %v", mp, want) 80 } 81 82 if err := mp.Unmount(0); err != nil { 83 t.Errorf("Unmount(%q) = %v, want nil", sda1, err) 84 } 85 } 86 87 sda2 := filepath.Join(d, "sda2") 88 if mp, err := mount.TryMount("/dev/sda2", sda2, mount.ReadOnly); err != nil { 89 t.Errorf("TryMount(/dev/sda2) = %v, want nil", err) 90 } else { 91 want := &mount.MountPoint{ 92 Path: sda2, 93 Device: "/dev/sda2", 94 FSType: "vfat", 95 Flags: mount.ReadOnly, 96 } 97 if !reflect.DeepEqual(mp, want) { 98 t.Errorf("TryMount(/dev/sda2) = %v, want %v", mp, want) 99 } 100 101 if err := mp.Unmount(0); err != nil { 102 t.Errorf("Unmount(%q) = %v, want nil", sda1, err) 103 } 104 } 105 106 sdb1 := filepath.Join(d, "sdb1") 107 if _, err := mount.TryMount("/dev/sdb1", sdb1, mount.ReadOnly); !strings.Contains(err.Error(), "no suitable filesystem") { 108 t.Errorf("TryMount(/dev/sdb1) = %v, want an error containing 'no suitable filesystem'", err) 109 } 110 111 sdc1 := filepath.Join(d, "sdc1") 112 if _, err := mount.TryMount("/dev/sdc1", sdc1, mount.ReadOnly); !os.IsNotExist(err) { 113 t.Errorf("TryMount(/dev/sdc1) = %v, want an error equivalent to Does Not Exist", err) 114 } 115 }