github.com/bugraaydogar/snapd@v0.0.0-20210315170335-8c70bb858939/boot/boottest/device_test.go (about) 1 // -*- Mode: Go; indent-tabs-mode: t -*- 2 3 /* 4 * Copyright (C) 2019 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 boottest_test 21 22 import ( 23 "testing" 24 25 . "gopkg.in/check.v1" 26 27 "github.com/snapcore/snapd/boot/boottest" 28 ) 29 30 func TestBoottest(t *testing.T) { TestingT(t) } 31 32 type boottestSuite struct{} 33 34 var _ = Suite(&boottestSuite{}) 35 36 func (s *boottestSuite) TestMockDeviceClassic(c *C) { 37 dev := boottest.MockDevice("") 38 c.Check(dev.Classic(), Equals, true) 39 c.Check(dev.Kernel(), Equals, "") 40 c.Check(dev.Base(), Equals, "") 41 c.Check(dev.RunMode(), Equals, true) 42 c.Check(dev.HasModeenv(), Equals, false) 43 44 c.Check(func() { dev.Model() }, PanicMatches, "Device.Model called.*") 45 46 c.Check(func() { boottest.MockDevice("@run") }, Panics, "MockDevice with no snap name and @mode is unsupported") 47 } 48 49 func (s *boottestSuite) TestMockDeviceBaseOrKernel(c *C) { 50 dev := boottest.MockDevice("boot-snap") 51 c.Check(dev.Classic(), Equals, false) 52 c.Check(dev.Kernel(), Equals, "boot-snap") 53 c.Check(dev.Base(), Equals, "boot-snap") 54 c.Check(dev.RunMode(), Equals, true) 55 c.Check(dev.HasModeenv(), Equals, false) 56 c.Check(func() { dev.Model() }, Panics, "Device.Model called but MockUC20Device not used") 57 58 dev = boottest.MockDevice("boot-snap@run") 59 c.Check(dev.Classic(), Equals, false) 60 c.Check(dev.Kernel(), Equals, "boot-snap") 61 c.Check(dev.Base(), Equals, "boot-snap") 62 c.Check(dev.RunMode(), Equals, true) 63 c.Check(dev.HasModeenv(), Equals, true) 64 c.Check(func() { dev.Model() }, PanicMatches, "Device.Model called.*") 65 66 dev = boottest.MockDevice("boot-snap@recover") 67 c.Check(dev.Classic(), Equals, false) 68 c.Check(dev.Kernel(), Equals, "boot-snap") 69 c.Check(dev.Base(), Equals, "boot-snap") 70 c.Check(dev.RunMode(), Equals, false) 71 c.Check(dev.HasModeenv(), Equals, true) 72 c.Check(func() { dev.Model() }, PanicMatches, "Device.Model called.*") 73 } 74 75 func (s *boottestSuite) TestMockUC20Device(c *C) { 76 dev := boottest.MockUC20Device("", nil) 77 c.Check(dev.HasModeenv(), Equals, true) 78 c.Check(dev.Classic(), Equals, false) 79 c.Check(dev.RunMode(), Equals, true) 80 c.Check(dev.Kernel(), Equals, "pc-kernel") 81 c.Check(dev.Base(), Equals, "core20") 82 83 c.Check(dev.Model().Model(), Equals, "my-model-uc20") 84 85 dev = boottest.MockUC20Device("run", nil) 86 c.Check(dev.RunMode(), Equals, true) 87 88 dev = boottest.MockUC20Device("recover", nil) 89 c.Check(dev.RunMode(), Equals, false) 90 91 model := boottest.MakeMockUC20Model(map[string]interface{}{ 92 "model": "other-model-uc20", 93 "snaps": []interface{}{ 94 map[string]interface{}{ 95 "name": "pc-linux", 96 "id": "pclinuxdidididididididididididid", 97 "type": "kernel", 98 }, 99 map[string]interface{}{ 100 "name": "pc", 101 "id": "pcididididididididididididididid", 102 "type": "gadget", 103 }, 104 }, 105 }) 106 dev = boottest.MockUC20Device("recover", model) 107 c.Check(dev.RunMode(), Equals, false) 108 c.Check(dev.Kernel(), Equals, "pc-linux") 109 c.Check(dev.Model().Model(), Equals, "other-model-uc20") 110 c.Check(dev.Model(), Equals, model) 111 }