func (s *SquashfsTestSuite) TestInstallKernelRebootRequired(c *C) { snapYaml, err := makeInstalledMockSnap(packageKernel, 40) c.Assert(err, IsNil) snap, err := NewInstalledSnap(snapYaml) c.Assert(err, IsNil) c.Assert(snap.NeedsReboot(), Equals, false) snap.isActive = false s.bootloader.bootvars["snappy_kernel"] = "ubuntu-kernel_40.snap" c.Assert(snap.NeedsReboot(), Equals, true) // simulate we booted the kernel successfully s.bootloader.bootvars["snappy_good_kernel"] = "ubuntu-kernel_40.snap" c.Assert(snap.NeedsReboot(), Equals, false) }
func (s *SquashfsTestSuite) TestInstallOsRebootRequired(c *C) { snapYaml, err := makeInstalledMockSnap(packageOS, 160) c.Assert(err, IsNil) snap, err := NewInstalledSnap(snapYaml) c.Assert(err, IsNil) snap.isActive = false s.bootloader.bootvars["snappy_os"] = "ubuntu-core_160.snap" c.Assert(snap.NeedsReboot(), Equals, true) }
// GarbageCollect removes all versions two older than the current active // version, as long as NeedsReboot() is false on all the versions found, and // DoInstallGC is set. func GarbageCollect(name string, flags InstallFlags, pb progress.Meter) error { var snaps BySnapVersion if (flags & DoInstallGC) == 0 { return nil } installed, err := (&Overlord{}).Installed() if err != nil { return err } snaps = FindSnapsByName(name, installed) if len(snaps) < 3 { // not enough things installed to do gc return nil } // FIXME: sort by revision sequence sort.Sort(snaps) active := -1 // active is the index of the active snap in snaps (-1 if no active snap) for i, snap := range snaps { if snap.IsActive() { if active > -1 { return ErrGarbageCollectImpossible("more than one active (should not happen).") } active = i } if snap.NeedsReboot() { return nil // don't do gc on snaps that need reboot. } } if active < 1 { // how was this an install? return nil } for _, snap := range snaps[:active-1] { if err := (&Overlord{}).Uninstall(snap, pb); err != nil { return ErrGarbageCollectImpossible(err.Error()) } } return nil }