mirror of
https://github.com/siderolabs/talos.git
synced 2025-08-18 12:37:05 +02:00
I wish there were less of them :) Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
120 lines
1.9 KiB
Go
120 lines
1.9 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 cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/suite"
|
|
|
|
"github.com/talos-systems/talos/pkg/proc/reaper"
|
|
)
|
|
|
|
type CmdSuite struct {
|
|
suite.Suite
|
|
|
|
runReaper bool
|
|
}
|
|
|
|
func (suite *CmdSuite) SetupSuite() {
|
|
if suite.runReaper {
|
|
reaper.Run()
|
|
}
|
|
}
|
|
|
|
func (suite *CmdSuite) TearDownSuite() {
|
|
if suite.runReaper {
|
|
reaper.Shutdown()
|
|
}
|
|
}
|
|
|
|
func (suite *CmdSuite) TestRun() {
|
|
type args struct {
|
|
name string
|
|
args []string
|
|
}
|
|
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
wantErr bool
|
|
errString string
|
|
}{
|
|
{
|
|
"true",
|
|
args{
|
|
"true",
|
|
[]string{},
|
|
},
|
|
false,
|
|
"",
|
|
},
|
|
{
|
|
"false",
|
|
args{
|
|
"false",
|
|
[]string{},
|
|
},
|
|
true,
|
|
"exit status 1: ",
|
|
},
|
|
{
|
|
"false with output",
|
|
args{
|
|
"/bin/sh",
|
|
[]string{
|
|
"-c",
|
|
"ls /not/found",
|
|
},
|
|
},
|
|
true,
|
|
"exit status 2: ls: cannot access '/not/found': No such file or directory\n",
|
|
},
|
|
{
|
|
"signal crash",
|
|
args{
|
|
"/bin/sh",
|
|
[]string{
|
|
"-c",
|
|
"kill -2 $$",
|
|
},
|
|
},
|
|
true,
|
|
"signal: interrupt: ",
|
|
},
|
|
{
|
|
"badexec",
|
|
args{
|
|
"badcommand",
|
|
[]string{},
|
|
},
|
|
true,
|
|
"exec: \"badcommand\": executable file not found in $PATH: ",
|
|
},
|
|
}
|
|
|
|
for _, t := range tests {
|
|
println(t.name)
|
|
|
|
err := Run(t.args.name, t.args.args...)
|
|
|
|
if t.wantErr {
|
|
suite.Assert().Error(err)
|
|
suite.Assert().Equal(t.errString, err.Error())
|
|
} else {
|
|
suite.Assert().NoError(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestCmdSuite(t *testing.T) {
|
|
for _, runReaper := range []bool{true, false} {
|
|
func(runReaper bool) {
|
|
t.Run(fmt.Sprintf("runReaper=%v", runReaper), func(t *testing.T) { suite.Run(t, &CmdSuite{runReaper: runReaper}) })
|
|
}(runReaper)
|
|
}
|
|
}
|