diff --git a/cli/kata-check_amd64_test.go b/cli/kata-check_amd64_test.go index 2fcba9ae29..23f4aa028f 100644 --- a/cli/kata-check_amd64_test.go +++ b/cli/kata-check_amd64_test.go @@ -10,15 +10,12 @@ import ( "fmt" "io/ioutil" "os" - "path" "path/filepath" "regexp" - "strings" "testing" "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" - "github.com/urfave/cli" ) func setupCheckHostIsVMContainerCapable(assert *assert.Assertions, cpuInfoFile string, cpuData []testCPUData, moduleData []testModuleData) { @@ -47,36 +44,6 @@ func setupCheckHostIsVMContainerCapable(assert *assert.Assertions, cpuInfoFile s } func TestCCCheckCLIFunction(t *testing.T) { - assert := assert.New(t) - - dir, err := ioutil.TempDir("", "") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - _, config, err := makeRuntimeConfig(dir) - assert.NoError(err) - - savedSysModuleDir := sysModuleDir - savedProcCPUInfo := procCPUInfo - - cpuInfoFile := filepath.Join(dir, "cpuinfo") - - // XXX: override - sysModuleDir = filepath.Join(dir, "sys/module") - procCPUInfo = cpuInfoFile - - defer func() { - sysModuleDir = savedSysModuleDir - procCPUInfo = savedProcCPUInfo - }() - - err = os.MkdirAll(sysModuleDir, testDirMode) - if err != nil { - t.Fatal(err) - } - var cpuData []testCPUData var moduleData []testModuleData @@ -94,50 +61,7 @@ func TestCCCheckCLIFunction(t *testing.T) { moduleData = []testModuleData{} } - devNull, err := os.OpenFile(os.DevNull, os.O_WRONLY, 0666) - assert.NoError(err) - defer devNull.Close() - - savedLogOutput := kataLog.Logger.Out - - // discard normal output - kataLog.Logger.Out = devNull - - defer func() { - kataLog.Logger.Out = savedLogOutput - }() - - setupCheckHostIsVMContainerCapable(assert, cpuInfoFile, cpuData, moduleData) - - ctx := createCLIContext(nil) - ctx.App.Name = "foo" - ctx.App.Metadata["runtimeConfig"] = config - - // create buffer to save logger output - buf := &bytes.Buffer{} - - // capture output this time - kataLog.Logger.Out = buf - - fn, ok := kataCheckCLICommand.Action.(func(context *cli.Context) error) - assert.True(ok) - - err = fn(ctx) - assert.NoError(err) - - output := buf.String() - - for _, c := range cpuData { - assert.True(findAnchoredString(output, c.vendorID)) - for _, flag := range strings.Fields(c.flags) { - assert.True(findAnchoredString(output, flag)) - } - } - - for _, m := range moduleData { - name := path.Base(m.path) - assert.True(findAnchoredString(output, name)) - } + genericCheckCLIFunction(t, cpuData, moduleData) } func TestCheckCheckKernelModulesNoNesting(t *testing.T) { diff --git a/cli/kata-check_arm64_test.go b/cli/kata-check_arm64_test.go index 3c0588f29e..681c251289 100644 --- a/cli/kata-check_arm64_test.go +++ b/cli/kata-check_arm64_test.go @@ -6,128 +6,34 @@ package main import ( - "bytes" "fmt" "io/ioutil" "os" - "path" "path/filepath" "testing" "github.com/stretchr/testify/assert" - "github.com/urfave/cli" ) -func setupCheckHostIsVMContainerCapable(assert *assert.Assertions, cpuInfoFile string, moduleData []testModuleData) { +func setupCheckHostIsVMContainerCapable(assert *assert.Assertions, cpuInfoFile string, cpuData []testCPUData, moduleData []testModuleData) { //For now, Arm64 only deal with module check + _ = cpuData + createModules(assert, cpuInfoFile, moduleData) err := makeCPUInfoFile(cpuInfoFile, "", "") assert.NoError(err) - } func TestCCCheckCLIFunction(t *testing.T) { - assert := assert.New(t) - - dir, err := ioutil.TempDir("", "") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - _, config, err := makeRuntimeConfig(dir) - assert.NoError(err) - - savedSysModuleDir := sysModuleDir - savedProcCPUInfo := procCPUInfo - - cpuInfoFile := filepath.Join(dir, "cpuinfo") - - // XXX: override - sysModuleDir = filepath.Join(dir, "sys/module") - procCPUInfo = cpuInfoFile - - defer func() { - sysModuleDir = savedSysModuleDir - procCPUInfo = savedProcCPUInfo - }() - - err = os.MkdirAll(sysModuleDir, testDirMode) - if err != nil { - t.Fatal(err) - } - + var cpuData []testCPUData moduleData := []testModuleData{ {filepath.Join(sysModuleDir, "kvm"), true, ""}, {filepath.Join(sysModuleDir, "vhost"), true, ""}, {filepath.Join(sysModuleDir, "vhost_net"), true, ""}, } - devNull, err := os.OpenFile(os.DevNull, os.O_WRONLY, 0666) - assert.NoError(err) - defer devNull.Close() - - savedLogOutput := kataLog.Logger.Out - - // discard normal output - kataLog.Logger.Out = devNull - - defer func() { - kataLog.Logger.Out = savedLogOutput - }() - - setupCheckHostIsVMContainerCapable(assert, cpuInfoFile, moduleData) - - ctx := createCLIContext(nil) - ctx.App.Name = "foo" - ctx.App.Metadata["runtimeConfig"] = config - - // create buffer to save logger output - buf := &bytes.Buffer{} - - // capture output this time - kataLog.Logger.Out = buf - - fn, ok := kataCheckCLICommand.Action.(func(context *cli.Context) error) - assert.True(ok) - - err = fn(ctx) - assert.NoError(err) - - output := buf.String() - - for _, m := range moduleData { - name := path.Base(m.path) - assert.True(findAnchoredString(output, name)) - } -} - -func TestKvmIsUsable(t *testing.T) { - assert := assert.New(t) - - dir, err := ioutil.TempDir("", "") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - savedKvmDevice := kvmDevice - fakeKVMDevice := filepath.Join(dir, "kvm") - kvmDevice = fakeKVMDevice - - defer func() { - kvmDevice = savedKvmDevice - }() - - err = kvmIsUsable() - assert.Error(err) - - err = createEmptyFile(fakeKVMDevice) - assert.NoError(err) - - err = kvmIsUsable() - assert.Error(err) + genericCheckCLIFunction(t, cpuData, moduleData) } func TestGetCPUDetails(t *testing.T) { diff --git a/cli/kata-check_ppc64le_test.go b/cli/kata-check_ppc64le_test.go index d49ec445f5..3553a3f841 100644 --- a/cli/kata-check_ppc64le_test.go +++ b/cli/kata-check_ppc64le_test.go @@ -6,17 +6,14 @@ package main import ( - "bytes" "fmt" "io/ioutil" "os" - "path" "path/filepath" "testing" "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" - "github.com/urfave/cli" ) func setupCheckHostIsVMContainerCapable(assert *assert.Assertions, cpuInfoFile string, cpuData []testCPUData, moduleData []testModuleData) { @@ -45,38 +42,8 @@ func setupCheckHostIsVMContainerCapable(assert *assert.Assertions, cpuInfoFile s } func TestCCCheckCLIFunction(t *testing.T) { - assert := assert.New(t) - - dir, err := ioutil.TempDir("", "") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - _, config, err := makeRuntimeConfig(dir) - assert.NoError(err) - - savedSysModuleDir := sysModuleDir - savedProcCPUInfo := procCPUInfo - - cpuInfoFile := filepath.Join(dir, "cpuinfo") - - // XXX: override - sysModuleDir = filepath.Join(dir, "sys/module") - procCPUInfo = cpuInfoFile - - defer func() { - sysModuleDir = savedSysModuleDir - procCPUInfo = savedProcCPUInfo - }() - - err = os.MkdirAll(sysModuleDir, testDirMode) - if err != nil { - t.Fatal(err) - } - cpuData := []testCPUData{ - {"", "", false}, + fakeCPUData, } moduleData := []testModuleData{ @@ -84,43 +51,7 @@ func TestCCCheckCLIFunction(t *testing.T) { {filepath.Join(sysModuleDir, "kvm_hv"), false, "Y"}, } - devNull, err := os.OpenFile(os.DevNull, os.O_WRONLY, 0666) - assert.NoError(err) - defer devNull.Close() - - savedLogOutput := kataLog.Logger.Out - - // discard normal output - kataLog.Logger.Out = devNull - - defer func() { - kataLog.Logger.Out = savedLogOutput - }() - - setupCheckHostIsVMContainerCapable(assert, cpuInfoFile, cpuData, moduleData) - - ctx := createCLIContext(nil) - ctx.App.Name = "foo" - ctx.App.Metadata["runtimeConfig"] = config - - // create buffer to save logger output - buf := &bytes.Buffer{} - - // capture output this time - kataLog.Logger.Out = buf - - fn, ok := kataCheckCLICommand.Action.(func(context *cli.Context) error) - assert.True(ok) - - err = fn(ctx) - assert.NoError(err) - - output := buf.String() - - for _, m := range moduleData { - name := path.Base(m.path) - assert.True(findAnchoredString(output, name)) - } + genericCheckCLIFunction(t, cpuData, moduleData) } func TestArchKernelParamHandler(t *testing.T) { diff --git a/cli/kata-check_s390x_test.go b/cli/kata-check_s390x_test.go index 108d6e1e8e..1bcffd7e69 100644 --- a/cli/kata-check_s390x_test.go +++ b/cli/kata-check_s390x_test.go @@ -6,17 +6,14 @@ package main import ( - "bytes" "fmt" "io/ioutil" "os" - "path" "path/filepath" "testing" "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" - "github.com/urfave/cli" ) func setupCheckHostIsVMContainerCapable(assert *assert.Assertions, cpuInfoFile string, cpuData []testCPUData, moduleData []testModuleData) { @@ -45,81 +42,15 @@ func setupCheckHostIsVMContainerCapable(assert *assert.Assertions, cpuInfoFile s } func TestCCCheckCLIFunction(t *testing.T) { - assert := assert.New(t) - - dir, err := ioutil.TempDir("", "") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - _, config, err := makeRuntimeConfig(dir) - assert.NoError(err) - - savedSysModuleDir := sysModuleDir - savedProcCPUInfo := procCPUInfo - - cpuInfoFile := filepath.Join(dir, "cpuinfo") - - // XXX: override - sysModuleDir = filepath.Join(dir, "sys/module") - procCPUInfo = cpuInfoFile - - defer func() { - sysModuleDir = savedSysModuleDir - procCPUInfo = savedProcCPUInfo - }() - - err = os.MkdirAll(sysModuleDir, testDirMode) - if err != nil { - t.Fatal(err) - } - cpuData := []testCPUData{ - {"", "", false}, + fakeCPUData, } moduleData := []testModuleData{ {filepath.Join(sysModuleDir, "kvm"), false, "Y"}, } - devNull, err := os.OpenFile(os.DevNull, os.O_WRONLY, 0666) - assert.NoError(err) - defer devNull.Close() - - savedLogOutput := kataLog.Logger.Out - - // discard normal output - kataLog.Logger.Out = devNull - - defer func() { - kataLog.Logger.Out = savedLogOutput - }() - - setupCheckHostIsVMContainerCapable(assert, cpuInfoFile, cpuData, moduleData) - - ctx := createCLIContext(nil) - ctx.App.Name = "foo" - ctx.App.Metadata["runtimeConfig"] = config - - // create buffer to save logger output - buf := &bytes.Buffer{} - - // capture output this time - kataLog.Logger.Out = buf - - fn, ok := kataCheckCLICommand.Action.(func(context *cli.Context) error) - assert.True(ok) - - err = fn(ctx) - assert.NoError(err) - - output := buf.String() - - for _, m := range moduleData { - name := path.Base(m.path) - assert.True(findAnchoredString(output, name)) - } + genericCheckCLIFunction(t, cpuData, moduleData) } func TestArchKernelParamHandler(t *testing.T) { diff --git a/cli/kata-check_test.go b/cli/kata-check_test.go index 87605ef123..ad91c94ecc 100644 --- a/cli/kata-check_test.go +++ b/cli/kata-check_test.go @@ -7,12 +7,14 @@ package main import ( "bytes" + "flag" "fmt" "html/template" "io/ioutil" "os" "path" "path/filepath" + "strings" "testing" ktu "github.com/kata-containers/runtime/pkg/katatestutils" @@ -43,6 +45,8 @@ type testCPUDetail struct { expectError bool } +var fakeCPUData = testCPUData{"", "", false} + func createFile(file, contents string) error { return ioutil.WriteFile(file, []byte(contents), testFileMode) } @@ -189,6 +193,92 @@ func genericTestGetCPUDetails(t *testing.T, validVendor string, validModel strin } } +func genericCheckCLIFunction(t *testing.T, cpuData []testCPUData, moduleData []testModuleData) { + assert := assert.New(t) + + dir, err := ioutil.TempDir("", "") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + _, config, err := makeRuntimeConfig(dir) + assert.NoError(err) + + savedSysModuleDir := sysModuleDir + savedProcCPUInfo := procCPUInfo + + cpuInfoFile := filepath.Join(dir, "cpuinfo") + + // XXX: override + sysModuleDir = filepath.Join(dir, "sys/module") + procCPUInfo = cpuInfoFile + + defer func() { + sysModuleDir = savedSysModuleDir + procCPUInfo = savedProcCPUInfo + }() + + // Replace sysModuleDir in moduleData with the test temp path + for i := range moduleData { + moduleData[i].path = strings.Replace(moduleData[i].path, savedSysModuleDir, sysModuleDir, 1) + } + + err = os.MkdirAll(sysModuleDir, testDirMode) + if err != nil { + t.Fatal(err) + } + + devNull, err := os.OpenFile(os.DevNull, os.O_WRONLY, 0666) + assert.NoError(err) + defer devNull.Close() + + savedLogOutput := kataLog.Logger.Out + + // discard normal output + kataLog.Logger.Out = devNull + + defer func() { + kataLog.Logger.Out = savedLogOutput + }() + + setupCheckHostIsVMContainerCapable(assert, cpuInfoFile, cpuData, moduleData) + + flagSet := &flag.FlagSet{} + ctx := createCLIContext(flagSet) + ctx.App.Name = "foo" + ctx.App.Metadata["runtimeConfig"] = config + + // create buffer to save logger output + buf := &bytes.Buffer{} + + // capture output this time + kataLog.Logger.Out = buf + + fn, ok := kataCheckCLICommand.Action.(func(context *cli.Context) error) + assert.True(ok) + + err = fn(ctx) + assert.NoError(err) + + output := buf.String() + + for _, c := range cpuData { + if c == fakeCPUData { + continue + } + + assert.True(findAnchoredString(output, c.vendorID)) + for _, flag := range strings.Fields(c.flags) { + assert.True(findAnchoredString(output, flag)) + } + } + + for _, m := range moduleData { + name := path.Base(m.path) + assert.True(findAnchoredString(output, name)) + } +} func TestCheckGetCPUInfo(t *testing.T) { assert := assert.New(t) @@ -671,7 +761,8 @@ func TestCheckCLIFunctionFail(t *testing.T) { procCPUInfo = oldProcCPUInfo }() - ctx := createCLIContext(nil) + flagSet := &flag.FlagSet{} + ctx := createCLIContext(flagSet) ctx.App.Name = "foo" ctx.App.Metadata["runtimeConfig"] = config