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  }