func (s *mountSuite) TestIsMountedHappyish(c *C) { mockMountInfoFn := filepath.Join(c.MkDir(), "mountinfo") restore := osutil.MockMountInfoPath(mockMountInfoFn) defer restore() // note the different optinal fields content := []byte(` 44 24 7:1 / /snap/ubuntu-core/855 rw,relatime shared:27 - squashfs /dev/loop1 ro 44 24 7:1 / /snap/something/123 rw,relatime - squashfs /dev/loop2 ro 44 24 7:1 / /snap/random/456 rw,relatime opt:1 shared:27 - squashfs /dev/loop1 ro `) err := ioutil.WriteFile(mockMountInfoFn, content, 0644) c.Assert(err, IsNil) mounted, err := osutil.IsMounted("/snap/ubuntu-core/855") c.Check(err, IsNil) c.Check(mounted, Equals, true) mounted, err = osutil.IsMounted("/snap/something/123") c.Check(err, IsNil) c.Check(mounted, Equals, true) mounted, err = osutil.IsMounted("/snap/random/456") c.Check(err, IsNil) c.Check(mounted, Equals, true) mounted, err = osutil.IsMounted("/random/made/up/name") c.Check(err, IsNil) c.Check(mounted, Equals, false) }
func removeMountUnit(baseDir string, meter progress.Meter) error { sysd := systemd.New(dirs.GlobalRootDir, meter) unit := systemd.MountUnitPath(dirs.StripRootDir(baseDir)) if osutil.FileExists(unit) { // use umount -l (lazy) to ensure that even busy mount points // can be unmounted. // note that the long option --lazy is not supported on trusty. isMounted, err := osutil.IsMounted(baseDir) if err != nil { return err } if isMounted { if output, err := exec.Command("umount", "-l", baseDir).CombinedOutput(); err != nil { return osutil.OutputErr(output, err) } if err := sysd.Stop(filepath.Base(unit), time.Duration(1*time.Second)); err != nil { return err } } if err := sysd.Disable(filepath.Base(unit)); err != nil { return err } if err := os.Remove(unit); err != nil { return err } // daemon-reload to ensure that systemd actually really // forgets about this mount unit if err := sysd.DaemonReload(); err != nil { return err } } return nil }
func (s *mountSuite) TestIsMountedNotThereErr(c *C) { restore := osutil.MockMountInfoPath("/no/such/file") defer restore() _, err := osutil.IsMounted("/snap/ubuntu-core/855") c.Check(err, ErrorMatches, "open /no/such/file: no such file or directory") }
func (s *mountSuite) TestIsMountedIncorrectLines(c *C) { mockMountInfoFn := filepath.Join(c.MkDir(), "mountinfo") restore := osutil.MockMountInfoPath(mockMountInfoFn) defer restore() content := []byte(` invalid line `) err := ioutil.WriteFile(mockMountInfoFn, content, 0644) c.Assert(err, IsNil) _, err = osutil.IsMounted("/snap/ubuntu-core/855") c.Check(err, ErrorMatches, `unexpected mountinfo line: "invalid line"`) }