talos/internal/pkg/kernel/kernel_test.go
Andrew Rynhard 636bdf4439
test: add another test case for setting kernel params (#649)
Signed-off-by: Andrew Rynhard <andrew@andrewrynhard.com>
2019-05-13 11:49:23 -07:00

234 lines
5.0 KiB
Go

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package kernel
import (
"testing"
"github.com/stretchr/testify/suite"
)
type KernelSuite struct {
suite.Suite
}
func (suite *KernelSuite) TestNewCmdline() {
for _, t := range []struct {
params string
expected Parameters
}{
{"", Parameters{}},
{
"boot=xyz root=/dev/abc nogui console=tty0 console=ttyS0,9600",
Parameters{
&Parameter{key: "boot", values: []string{"xyz"}},
&Parameter{key: "root", values: []string{"/dev/abc"}},
&Parameter{key: "nogui", values: []string{""}},
&Parameter{key: "console", values: []string{"tty0", "ttyS0,9600"}},
},
},
{
" root=/dev/abc=1 nogui \n",
Parameters{
&Parameter{key: "root", values: []string{"/dev/abc=1"}},
&Parameter{key: "nogui", values: []string{""}},
},
},
{
"root=/dev/sda root=/dev/sdb",
Parameters{
&Parameter{key: "root", values: []string{"/dev/sda", "/dev/sdb"}},
},
},
} {
cmdline := NewCmdline(t.params)
suite.Assert().Equal(t.expected, cmdline.Parameters)
}
}
func (suite *KernelSuite) TestCmdlineGet() {
for _, t := range []struct {
params string
arg string
expected *Parameter
}{
{
"root=/dev/sda root=/dev/sdb",
"root",
&Parameter{key: "root", values: []string{"/dev/sda", "/dev/sdb"}},
},
{
" root=/dev/sda talos.root=ROOT-B nogui \n",
"talos.root",
&Parameter{key: "talos.root", values: []string{"ROOT-B"}},
},
} {
cmdline := NewCmdline(t.params)
suite.Assert().Equal(t.expected, cmdline.Get(t.arg))
}
}
func (suite *KernelSuite) TestCmdlineSet() {
for _, t := range []struct {
params string
k string
v *Parameter
expected *Parameter
}{
{
"root=/dev/sda root=/dev/sdb",
"root",
&Parameter{key: "root", values: []string{"/dev/sdc"}},
&Parameter{key: "root", values: []string{"/dev/sdc"}},
},
{
"boot=xyz root=/dev/abc nogui console=tty0 console=ttyS0,9600",
"console",
&Parameter{key: "console", values: nil},
&Parameter{key: "console", values: nil},
},
{
"initrd=initramfs.xz",
"initrd",
&Parameter{key: "initrd", values: []string{"/ROOT-A/initramfs.xz"}},
&Parameter{key: "initrd", values: []string{"/ROOT-A/initramfs.xz"}},
},
} {
cmdline := NewCmdline(t.params)
cmdline.Set(t.k, t.v)
suite.Assert().Equal(t.expected, cmdline.Get(t.k))
}
}
func (suite *KernelSuite) TestCmdlineAppend() {
for _, t := range []struct {
params string
k string
v string
expected *Parameter
}{
{
"root=/dev/sda root=/dev/sdb",
"root",
"/dev/sdc",
&Parameter{key: "root", values: []string{"/dev/sda", "/dev/sdb", "/dev/sdc"}},
},
{
"boot=xyz root=/dev/abc nogui",
"console",
"tty0",
&Parameter{key: "console", values: []string{"tty0"}},
},
} {
cmdline := NewCmdline(t.params)
cmdline.Append(t.k, t.v)
suite.Assert().Equal(t.expected, cmdline.Get(t.k))
}
}
func (suite *KernelSuite) TestCmdlineString() {
for _, t := range []struct {
params string
expected string
}{
{
"boot=xyz root=/dev/abc nogui console=tty0 console=ttyS0,9600",
"boot=xyz root=/dev/abc nogui console=tty0 console=ttyS0,9600",
},
} {
cmdline := NewCmdline(t.params)
suite.Assert().Equal(t.expected, cmdline.String())
}
}
func (suite *KernelSuite) TestParameterFirst() {
for _, t := range []struct {
value *Parameter
expected *string
}{
{&Parameter{values: []string{""}}, pointer("")},
{&Parameter{values: []string{}}, nil},
{&Parameter{values: []string{"a", "b", "c=d"}}, pointer("a")},
{nil, nil},
} {
suite.Assert().Equal(t.expected, t.value.First())
}
}
func (suite *KernelSuite) TestParameterGet() {
for _, t := range []struct {
value *Parameter
idx int
expected *string
}{
{&Parameter{values: []string{"", "x", "/dev/sda"}}, 2, pointer("/dev/sda")},
{&Parameter{values: []string{}}, 2, nil},
} {
suite.Assert().Equal(t.expected, t.value.Get(t.idx))
}
}
func (suite *KernelSuite) TestParameterAppend() {
for _, t := range []struct {
value *Parameter
app string
expected *Parameter
}{
{
&Parameter{
values: []string{"", "x", "/dev/sda"},
},
"ttyS0",
&Parameter{
values: []string{"", "x", "/dev/sda", "ttyS0"},
},
},
{
&Parameter{
values: []string{},
},
"nogui",
&Parameter{
values: []string{"nogui"},
},
},
} {
suite.Assert().Equal(t.expected, t.value.Append(t.app))
}
}
func (suite *KernelSuite) TestParameterContains() {
for _, t := range []struct {
value *Parameter
s string
expected bool
}{
{
&Parameter{
values: []string{"", "x", "/dev/sda"},
},
"x",
true,
},
{
&Parameter{
values: []string{},
},
"x",
false,
},
} {
suite.Assert().Equal(t.expected, t.value.Contains(t.s))
}
}
func pointer(s string) *string {
return &s
}
func TestKernelSuite(t *testing.T) {
suite.Run(t, new(KernelSuite))
}