func (s *snapmgrTestSuite) TestRemoveConflict(c *C) { s.state.Lock() defer s.state.Unlock() snapstate.Set(s.state, "some-snap", &snapstate.SnapState{ Active: true, Sequence: []*snap.SideInfo{{OfficialName: "some-snap"}}, }) _, err := snapstate.Remove(s.state, "some-snap", 0) c.Assert(err, IsNil) _, err = snapstate.Remove(s.state, "some-snap", 0) c.Assert(err, ErrorMatches, `snap "some-snap" has changes in progress`) }
func (s *snapmgrTestSuite) TestRemoveLast(c *C) { s.state.Lock() defer s.state.Unlock() snapstate.Set(s.state, "foo", &snapstate.SnapState{ Active: true, Sequence: []*snap.SideInfo{{OfficialName: "foo"}}, }) ts, err := snapstate.Remove(s.state, "foo", 0) c.Assert(err, IsNil) i := 0 c.Assert(ts.Tasks(), HasLen, 5) // all tasks are accounted c.Assert(s.state.Tasks(), HasLen, 5) c.Assert(ts.Tasks()[i].Kind(), Equals, "unlink-snap") i++ c.Assert(ts.Tasks()[i].Kind(), Equals, "remove-profiles") i++ c.Assert(ts.Tasks()[i].Kind(), Equals, "clear-snap") i++ c.Assert(ts.Tasks()[i].Kind(), Equals, "discard-snap") i++ c.Assert(ts.Tasks()[i].Kind(), Equals, "discard-conns") }
func (inst *snapInstruction) remove() (*state.Change, error) { flags := snappy.DoRemoveGC if inst.LeaveOld { flags = 0 } state := inst.overlord.State() state.Lock() msg := fmt.Sprintf(i18n.G("Remove %q snap"), inst.pkg) chg := state.NewChange("remove-snap", msg) ts, err := snapstate.Remove(state, inst.pkg, flags) if err == nil { chg.AddAll(ts) } state.Unlock() if err != nil { return nil, err } state.EnsureBefore(0) return chg, nil }
func (s *snapmgrTestSuite) TestRemoveIntegration(c *C) { si := snap.SideInfo{ OfficialName: "some-snap", Revision: 7, } s.state.Lock() defer s.state.Unlock() snapstate.Set(s.state, "some-snap", &snapstate.SnapState{ Active: true, Sequence: []*snap.SideInfo{&si}, }) chg := s.state.NewChange("remove", "remove a snap") ts, err := snapstate.Remove(s.state, "some-snap", 0) c.Assert(err, IsNil) chg.AddAll(ts) s.state.Unlock() defer s.snapmgr.Stop() s.settle() s.state.Lock() c.Assert(s.fakeBackend.ops, HasLen, 4) expected := []fakeOp{ fakeOp{ op: "can-remove", name: "/snap/some-snap/7", active: true, }, fakeOp{ op: "unlink-snap", name: "/snap/some-snap/7", }, fakeOp{ op: "remove-snap-data", name: "/snap/some-snap/7", }, fakeOp{ op: "remove-snap-files", name: "/snap/some-snap/7", }, } c.Assert(s.fakeBackend.ops, DeepEquals, expected) // verify snapSetup info tasks := ts.Tasks() // snap-setup is in discard-snap above discard-conns. task := tasks[len(tasks)-2] var ss snapstate.SnapSetup err = task.Get("snap-setup", &ss) c.Assert(err, IsNil) c.Assert(ss, DeepEquals, snapstate.SnapSetup{ Name: "some-snap", Revision: 7, }) // verify snaps in the system state var snapst snapstate.SnapState err = snapstate.Get(s.state, "some-snap", &snapst) c.Assert(err, Equals, state.ErrNoState) }