// allLocalSnapInfos returns the information about the all current snaps and their SnapStates. func allLocalSnapInfos(st *state.State) ([]aboutSnap, error) { st.Lock() defer st.Unlock() snapStates, err := snapstate.All(st) if err != nil { return nil, err } about := make([]aboutSnap, 0, len(snapStates)) var firstErr error for name, snapState := range snapStates { info, err := snap.ReadInfo(name, snapState.Current()) if err != nil { // XXX: aggregate instead? if firstErr == nil { firstErr = err } continue } about = append(about, aboutSnap{info, snapState}) } return about, firstErr }
func (s *snapmgrQuerySuite) TestAllEmptyAndEmptyNormalisation(c *C) { st := state.New(nil) st.Lock() defer st.Unlock() snapStates, err := snapstate.All(st) c.Assert(err, IsNil) c.Check(snapStates, HasLen, 0) snapstate.Set(st, "foo", nil) snapStates, err = snapstate.All(st) c.Assert(err, IsNil) c.Check(snapStates, HasLen, 0) snapstate.Set(st, "foo", &snapstate.SnapState{}) snapStates, err = snapstate.All(st) c.Assert(err, IsNil) c.Check(snapStates, HasLen, 0) }
func (s *snapmgrQuerySuite) TestAll(c *C) { st := s.st st.Lock() defer st.Unlock() snapStates, err := snapstate.All(st) c.Assert(err, IsNil) c.Check(snapStates, HasLen, 1) var snapst *snapstate.SnapState for name, sst := range snapStates { c.Assert(name, Equals, "name1") snapst = sst } c.Check(snapst.Active, Equals, true) c.Check(snapst.Current(), NotNil) info12, err := snap.ReadInfo("name1", snapst.Current()) c.Assert(err, IsNil) c.Check(info12.Name(), Equals, "name1") c.Check(info12.Revision, Equals, 12) c.Check(info12.Summary(), Equals, "s12") c.Check(info12.Version, Equals, "1.2") c.Check(info12.Description(), Equals, "Lots of text") info11, err := snap.ReadInfo("name1", snapst.Sequence[0]) c.Assert(err, IsNil) c.Check(info11.Name(), Equals, "name1") c.Check(info11.Revision, Equals, 11) c.Check(info11.Version, Equals, "1.1") }