func (s *patch1Suite) TestPatch1(c *C) { restore := patch.MockReadInfo(s.readInfo) defer restore() r, err := os.Open(dirs.SnapStateFile) c.Assert(err, IsNil) defer r.Close() st, err := state.ReadState(nil, r) c.Assert(err, IsNil) // go from patch-level 0 to patch-level 1 restorer := patch.MockLevel(1) defer restorer() err = patch.Apply(st) c.Assert(err, IsNil) st.Lock() defer st.Unlock() expected := []struct { name string typ snap.Type cur snap.Revision }{ {"foo", snap.TypeApp, snap.R(22)}, {"core", snap.TypeOS, snap.R(111)}, {"borken", snap.TypeApp, snap.R(-2)}, {"wip", "", snap.R(0)}, } for _, exp := range expected { var snapst snapstate.SnapState err := snapstate.Get(st, exp.name, &snapst) c.Assert(err, IsNil) c.Check(snap.Type(snapst.SnapType), Equals, exp.typ) c.Check(snapst.Current, Equals, exp.cur) } // ensure we only moved forward to patch-level 1 var patchLevel int err = st.Get("patch-level", &patchLevel) c.Assert(err, IsNil) c.Assert(patchLevel, Equals, 1) }
// Type returns the type of the snap or an error. // Should never error if Current is not nil. func (snapst *SnapState) Type() (snap.Type, error) { if snapst.SnapType == "" { return snap.Type(""), fmt.Errorf("snap type unset") } return snap.Type(snapst.SnapType), nil }