func (s *SquashfsTestSuite) TestInstallFailUnmountsSnap(c *C) { snapPkg := makeTestSnapPackage(c, `name: hello version: 1.10 apps: some-binary: command: some-binary uses: [some-binary] uses: some-binary: type: migration-skill security-template: not-there `) // install but our missing security-template will break the install _, err := (&Overlord{}).Install(snapPkg, "origin", 0, &MockProgressMeter{}) c.Assert(err, ErrorMatches, "could not find specified template: not-there.*") // ensure the mount unit is not there mup := systemd.MountUnitPath("/snaps/hello.origin/1.10", "mount") c.Assert(helpers.FileExists(mup), Equals, false) // ensure that the mount gets unmounted and stopped c.Assert(s.systemdCmds, DeepEquals, [][]string{ {"start", "snaps-hello.origin-1.10.mount"}, {"--root", dirs.GlobalRootDir, "disable", "snaps-hello.origin-1.10.mount"}, {"stop", "snaps-hello.origin-1.10.mount"}, {"show", "--property=ActiveState", "snaps-hello.origin-1.10.mount"}, }) }
func (s *SquashfsTestSuite) TestInstallFailUnmountsSnap(c *C) { c.Skip("no easy path to this kind of late verification failure now!") snapPkg := makeTestSnapPackage(c, `name: hello version: 1.10 apps: some-binary: command: some-binary plugs: [some-binary] plugs: some-binary: interface: old-security security-template: not-there `) // install but our missing security-template will break the install // revision will be 0 _, err := (&Overlord{}).Install(snapPkg, 0, &MockProgressMeter{}) c.Assert(err, ErrorMatches, "could not find specified template: not-there.*") // ensure the mount unit is not there mup := systemd.MountUnitPath("/snap/hello/1.10", "mount") c.Assert(osutil.FileExists(mup), Equals, false) // ensure that the mount gets unmounted and stopped c.Assert(s.systemdCmds, DeepEquals, [][]string{ {"start", "snap-hello-0.mount"}, {"--root", dirs.GlobalRootDir, "disable", "snap-hello-0.mount"}, {"stop", "snap-hello-0.mount"}, {"show", "--property=ActiveState", "snap-hello-0.mount"}, }) }
func (s *SquashfsTestSuite) TestInstallViaSquashfsWorks(c *C) { snapPkg := makeTestSnapPackage(c, packageHello) _, err := (&Overlord{}).Install(snapPkg, "origin", 0, &MockProgressMeter{}) c.Assert(err, IsNil) // after install the blob is in the right dir c.Assert(helpers.FileExists(filepath.Join(dirs.SnapBlobDir, "hello-app.origin_1.10.snap")), Equals, true) // ensure the right unit is created mup := systemd.MountUnitPath("/snaps/hello-app.origin/1.10", "mount") content, err := ioutil.ReadFile(mup) c.Assert(err, IsNil) c.Assert(string(content), Matches, "(?ms).*^Where=/snaps/hello-app.origin/1.10") c.Assert(string(content), Matches, "(?ms).*^What=/var/lib/snappy/snaps/hello-app.origin_1.10.snap") }
func (m *packageYaml) removeSquashfsMount(baseDir string, inter interacter) error { sysd := systemd.New(dirs.GlobalRootDir, inter) unit := systemd.MountUnitPath(stripGlobalRootDir(baseDir), "mount") if helpers.FileExists(unit) { // we ignore errors, nothing should stop removals if err := sysd.Disable(filepath.Base(unit)); err != nil { logger.Noticef("Failed to disable %q: %s, but continuing anyway.", unit, err) } if err := sysd.Stop(filepath.Base(unit), time.Duration(1*time.Second)); err != nil { logger.Noticef("Failed to stop %q: %s, but continuing anyway.", unit, err) } if err := os.Remove(unit); err != nil { return err } } return nil }
func (s *SquashfsTestSuite) TestInstallViaSquashfsWorks(c *C) { snapPkg := makeTestSnapPackage(c, packageHello) si := &snap.SideInfo{ OfficialName: "hello-snap", Revision: 16, } _, err := (&Overlord{}).InstallWithSideInfo(snapPkg, si, 0, &MockProgressMeter{}) c.Assert(err, IsNil) // after install the blob is in the right dir c.Assert(osutil.FileExists(filepath.Join(dirs.SnapBlobDir, "hello-snap_16.snap")), Equals, true) // ensure the right unit is created mup := systemd.MountUnitPath("/snap/hello-snap/16", "mount") content, err := ioutil.ReadFile(mup) c.Assert(err, IsNil) c.Assert(string(content), Matches, "(?ms).*^Where=/snap/hello-snap/16") c.Assert(string(content), Matches, "(?ms).*^What=/var/lib/snapd/snaps/hello-snap_16.snap") }