github.com/rigado/snapd@v2.42.5-go-mod+incompatible/overlord/snapstate/handlers_prepare_test.go (about) 1 // -*- Mode: Go; indent-tabs-mode: t -*- 2 3 /* 4 * Copyright (C) 2016 Canonical Ltd 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 3 as 8 * published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 * 18 */ 19 20 package snapstate_test 21 22 import ( 23 "time" 24 25 . "gopkg.in/check.v1" 26 27 "github.com/snapcore/snapd/dirs" 28 "github.com/snapcore/snapd/overlord" 29 "github.com/snapcore/snapd/overlord/snapstate" 30 "github.com/snapcore/snapd/overlord/snapstate/snapstatetest" 31 "github.com/snapcore/snapd/overlord/state" 32 "github.com/snapcore/snapd/snap" 33 "github.com/snapcore/snapd/testutil" 34 ) 35 36 type baseHandlerSuite struct { 37 testutil.BaseTest 38 39 state *state.State 40 runner *state.TaskRunner 41 se *overlord.StateEngine 42 snapmgr *snapstate.SnapManager 43 44 fakeBackend *fakeSnappyBackend 45 } 46 47 func (s *baseHandlerSuite) setup(c *C, b state.Backend) { 48 s.BaseTest.SetUpTest(c) 49 50 dirs.SetRootDir(c.MkDir()) 51 52 s.fakeBackend = &fakeSnappyBackend{} 53 s.state = state.New(b) 54 s.runner = state.NewTaskRunner(s.state) 55 56 var err error 57 s.snapmgr, err = snapstate.Manager(s.state, s.runner) 58 c.Assert(err, IsNil) 59 60 s.se = overlord.NewStateEngine(s.state) 61 s.se.AddManager(s.snapmgr) 62 s.se.AddManager(s.runner) 63 c.Assert(s.se.StartUp(), IsNil) 64 65 AddForeignTaskHandlers(s.runner, s.fakeBackend) 66 67 snapstate.SetSnapManagerBackend(s.snapmgr, s.fakeBackend) 68 69 reset1 := snapstate.MockSnapReadInfo(s.fakeBackend.ReadInfo) 70 reset2 := snapstate.MockReRefreshRetryTimeout(time.Second / 200) 71 72 s.AddCleanup(func() { dirs.SetRootDir("/") }) 73 s.AddCleanup(reset1) 74 s.AddCleanup(reset2) 75 s.AddCleanup(snapstatetest.MockDeviceModel(nil)) 76 } 77 78 func (s *baseHandlerSuite) SetUpTest(c *C) { 79 s.setup(c, nil) 80 } 81 82 type prepareSnapSuite struct { 83 baseHandlerSuite 84 } 85 86 var _ = Suite(&prepareSnapSuite{}) 87 88 func (s *prepareSnapSuite) TestDoPrepareSnapSimple(c *C) { 89 s.state.Lock() 90 t := s.state.NewTask("prepare-snap", "test") 91 t.Set("snap-setup", &snapstate.SnapSetup{ 92 SideInfo: &snap.SideInfo{ 93 RealName: "foo", 94 }, 95 }) 96 s.state.NewChange("dummy", "...").AddTask(t) 97 98 s.state.Unlock() 99 100 s.se.Ensure() 101 s.se.Wait() 102 103 s.state.Lock() 104 defer s.state.Unlock() 105 106 var snapsup snapstate.SnapSetup 107 t.Get("snap-setup", &snapsup) 108 c.Check(snapsup.SideInfo, DeepEquals, &snap.SideInfo{ 109 RealName: "foo", 110 Revision: snap.R(-1), 111 }) 112 c.Check(t.Status(), Equals, state.DoneStatus) 113 }