Files
snapd/kernel/kernel_test.go
Miguel Pires 29c9752d66 many: s/ioutil.WriteFile/os.WriteFile (#13217)
Replace ioutil.WriteFile with os.WriteFile since the former has been
deprecated since go1.16 and simply calls the latter.

Signed-off-by: Miguel Pires <miguel.pires@canonical.com>
2023-09-26 11:38:46 +01:00

139 lines
3.8 KiB
Go

// -*- Mode: Go; indent-tabs-mode: t -*-
/*
* Copyright (C) 2020 Canonical Ltd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package kernel_test
import (
"os"
"path/filepath"
"testing"
. "gopkg.in/check.v1"
"github.com/snapcore/snapd/kernel"
)
func makeMockKernel(c *C, kernelYaml string, filesWithContent map[string]string) string {
kernelRootDir := c.MkDir()
err := os.MkdirAll(filepath.Join(kernelRootDir, "meta"), 0755)
c.Assert(err, IsNil)
err = os.WriteFile(filepath.Join(kernelRootDir, "meta/kernel.yaml"), []byte(kernelYaml), 0644)
c.Assert(err, IsNil)
for fname, content := range filesWithContent {
p := filepath.Join(kernelRootDir, fname)
err = os.MkdirAll(filepath.Dir(p), 0755)
c.Assert(err, IsNil)
err = os.WriteFile(p, []byte(content), 0644)
c.Assert(err, IsNil)
}
return kernelRootDir
}
type kernelYamlTestSuite struct{}
var _ = Suite(&kernelYamlTestSuite{})
func TestCommand(t *testing.T) { TestingT(t) }
var mockKernelYaml = []byte(`
assets:
dtbs:
update: true
content:
- dtbs/bcm2711-rpi-4-b.dtb
- dtbs/bcm2836-rpi-2-b.dtb
`)
var mockInvalidKernelYaml = []byte(`
assets:
non-#alphanumeric:
`)
func (s *kernelYamlTestSuite) TestInfoFromKernelYamlSad(c *C) {
ki, err := kernel.InfoFromKernelYaml([]byte("foo"))
c.Check(err, ErrorMatches, "(?m)cannot parse kernel metadata: .*")
c.Check(ki, IsNil)
}
func (s *kernelYamlTestSuite) TestInfoFromKernelYamlBadName(c *C) {
ki, err := kernel.InfoFromKernelYaml(mockInvalidKernelYaml)
c.Check(err, ErrorMatches, `invalid asset name "non-#alphanumeric", please use only alphanumeric characters and dashes`)
c.Check(ki, IsNil)
}
func (s *kernelYamlTestSuite) TestInfoFromKernelYamlHappy(c *C) {
ki, err := kernel.InfoFromKernelYaml(mockKernelYaml)
c.Check(err, IsNil)
c.Check(ki, DeepEquals, &kernel.Info{
Assets: map[string]*kernel.Asset{
"dtbs": {
Update: true,
Content: []string{
"dtbs/bcm2711-rpi-4-b.dtb",
"dtbs/bcm2836-rpi-2-b.dtb",
},
},
},
})
}
func (s *kernelYamlTestSuite) TestReadKernelYamlOptional(c *C) {
ki, err := kernel.ReadInfo("this-path-does-not-exist")
c.Check(err, IsNil)
c.Check(ki, DeepEquals, &kernel.Info{})
}
func (s *kernelYamlTestSuite) TestReadKernelYamlSad(c *C) {
mockKernelSnapRoot := c.MkDir()
kernelYamlPath := filepath.Join(mockKernelSnapRoot, "meta/kernel.yaml")
err := os.MkdirAll(filepath.Dir(kernelYamlPath), 0755)
c.Assert(err, IsNil)
err = os.WriteFile(kernelYamlPath, []byte(`invalid-kernel-yaml`), 0644)
c.Assert(err, IsNil)
ki, err := kernel.ReadInfo(mockKernelSnapRoot)
c.Check(err, ErrorMatches, `(?m)cannot parse kernel metadata: yaml: unmarshal errors:.*`)
c.Check(ki, IsNil)
}
func (s *kernelYamlTestSuite) TestReadKernelYamlHappy(c *C) {
mockKernelSnapRoot := c.MkDir()
kernelYamlPath := filepath.Join(mockKernelSnapRoot, "meta/kernel.yaml")
err := os.MkdirAll(filepath.Dir(kernelYamlPath), 0755)
c.Assert(err, IsNil)
err = os.WriteFile(kernelYamlPath, mockKernelYaml, 0644)
c.Assert(err, IsNil)
ki, err := kernel.ReadInfo(mockKernelSnapRoot)
c.Assert(err, IsNil)
c.Check(ki, DeepEquals, &kernel.Info{
Assets: map[string]*kernel.Asset{
"dtbs": {
Update: true,
Content: []string{
"dtbs/bcm2711-rpi-4-b.dtb",
"dtbs/bcm2836-rpi-2-b.dtb",
},
},
},
})
}