mirror of
https://github.com/siderolabs/talos.git
synced 2025-08-19 13:41:13 +02:00
234 lines
5.0 KiB
Go
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))
|
|
}
|