func (bs *bootedSuite) TestUpdateBootRevisionsOSErrorsLate(c *C) { st := bs.state st.Lock() defer st.Unlock() // put core into the state but add no files on disk // will break in the tasks snapstate.Set(st, "core", &snapstate.SnapState{ SnapType: "os", Active: true, Sequence: []*snap.SideInfo{osSI1, osSI2}, Current: snap.R(2), }) bs.fakeBackend.linkSnapFailTrigger = filepath.Join(dirs.SnapMountDir, "/core/1") bs.bootloader.BootVars["snap_kernel"] = "core_1.snap" err := snapstate.UpdateBootRevisions(st) c.Assert(err, IsNil) st.Unlock() bs.settle() st.Lock() c.Assert(st.Changes(), HasLen, 1) chg := st.Changes()[0] c.Assert(chg.Kind(), Equals, "update-revisions") c.Assert(chg.IsReady(), Equals, true) c.Assert(chg.Err(), ErrorMatches, `(?ms).*Make snap "core" \(1\) available to the system \(fail\).*`) }
func (bs *bootedSuite) TestUpdateBootRevisionsKernelSimple(c *C) { st := bs.state st.Lock() defer st.Unlock() bs.makeInstalledKernelOS(c, st) bs.bootloader.BootVars["snap_kernel"] = "canonical-pc-linux_1.snap" err := snapstate.UpdateBootRevisions(st) c.Assert(err, IsNil) st.Unlock() bs.settle() st.Lock() c.Assert(st.Changes(), HasLen, 1) chg := st.Changes()[0] c.Assert(chg.Err(), IsNil) c.Assert(chg.Kind(), Equals, "update-revisions") c.Assert(chg.IsReady(), Equals, true) // canonical-pc-linux "current" got reverted but core did not var snapst snapstate.SnapState err = snapstate.Get(st, "canonical-pc-linux", &snapst) c.Assert(err, IsNil) c.Assert(snapst.Current, Equals, snap.R(1)) c.Assert(snapst.Active, Equals, true) err = snapstate.Get(st, "core", &snapst) c.Assert(err, IsNil) c.Assert(snapst.Current, Equals, snap.R(2)) c.Assert(snapst.Active, Equals, true) }
func (bs *bootedSuite) TestUpdateBootRevisionsOSErrorsEarly(c *C) { st := bs.state st.Lock() defer st.Unlock() bs.makeInstalledKernelOS(c, st) bs.bootloader.BootVars["snap_core"] = "core_99.snap" err := snapstate.UpdateBootRevisions(st) c.Assert(err, ErrorMatches, `cannot find revision 99 for snap "core"`) }
func (m *DeviceManager) ensureBootOk() error { m.state.Lock() defer m.state.Unlock() if release.OnClassic { return nil } if !m.bootOkRan { bootloader, err := partition.FindBootloader() if err != nil { return fmt.Errorf(i18n.G("cannot mark boot successful: %s"), err) } if err := partition.MarkBootSuccessful(bootloader); err != nil { return err } m.bootOkRan = true } return snapstate.UpdateBootRevisions(m.state) }