mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-07-04 02:56:18 +00:00
kata-env: Fix amd64 VM container capable check
Fix nasty bug which resulted in `kata-env` showing `VMContainerCapable = true` even on amd64 systems without virtualisation support (thankfully `kata-check` still showed the correct results). Added arch-specific tests to avoid any possibility of regression. Fixes #660. Signed-off-by: James O. D. Hunt <james.o.hunt@intel.com>
This commit is contained in:
parent
f14660f82c
commit
35d7672d73
@ -491,3 +491,32 @@ func TestKvmIsUsable(t *testing.T) {
|
|||||||
func TestGetCPUDetails(t *testing.T) {
|
func TestGetCPUDetails(t *testing.T) {
|
||||||
genericTestGetCPUDetails(t)
|
genericTestGetCPUDetails(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSetCPUtype(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
savedArchRequiredCPUFlags := archRequiredCPUFlags
|
||||||
|
savedArchRequiredCPUAttribs := archRequiredCPUAttribs
|
||||||
|
savedArchRequiredKernelModules := archRequiredKernelModules
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
archRequiredCPUFlags = savedArchRequiredCPUFlags
|
||||||
|
archRequiredCPUAttribs = savedArchRequiredCPUAttribs
|
||||||
|
archRequiredKernelModules = savedArchRequiredKernelModules
|
||||||
|
}()
|
||||||
|
|
||||||
|
archRequiredCPUFlags = map[string]string{}
|
||||||
|
archRequiredCPUAttribs = map[string]string{}
|
||||||
|
archRequiredKernelModules = map[string]kernelModule{}
|
||||||
|
|
||||||
|
setCPUtype()
|
||||||
|
|
||||||
|
assert.NotEmpty(archRequiredCPUFlags)
|
||||||
|
assert.NotEmpty(archRequiredCPUAttribs)
|
||||||
|
assert.NotEmpty(archRequiredKernelModules)
|
||||||
|
|
||||||
|
assert.Equal(archRequiredCPUFlags["vmx"], "Virtualization support")
|
||||||
|
|
||||||
|
_, ok := archRequiredKernelModules["kvm"]
|
||||||
|
assert.True(ok)
|
||||||
|
}
|
||||||
|
@ -198,3 +198,7 @@ foo : bar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSetCPUtype(t *testing.T) {
|
||||||
|
testSetCPUTypeGeneric(t)
|
||||||
|
}
|
||||||
|
38
cli/kata-check_generic_test.go
Normal file
38
cli/kata-check_generic_test.go
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
// Copyright (c) 2018 Intel Corporation
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
//
|
||||||
|
|
||||||
|
// +build arm64 ppc64le
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func testSetCPUTypeGeneric(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
savedArchRequiredCPUFlags := archRequiredCPUFlags
|
||||||
|
savedArchRequiredCPUAttribs := archRequiredCPUAttribs
|
||||||
|
savedArchRequiredKernelModules := archRequiredKernelModules
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
archRequiredCPUFlags = savedArchRequiredCPUFlags
|
||||||
|
archRequiredCPUAttribs = savedArchRequiredCPUAttribs
|
||||||
|
archRequiredKernelModules = savedArchRequiredKernelModules
|
||||||
|
}()
|
||||||
|
|
||||||
|
assert.Empty(archRequiredCPUFlags)
|
||||||
|
assert.Empty(archRequiredCPUAttribs)
|
||||||
|
assert.NotEmpty(archRequiredKernelModules)
|
||||||
|
|
||||||
|
setCPUtype()
|
||||||
|
|
||||||
|
assert.Equal(archRequiredCPUFlags, savedArchRequiredCPUFlags)
|
||||||
|
assert.Equal(archRequiredCPUAttribs, savedArchRequiredCPUAttribs)
|
||||||
|
assert.Equal(archRequiredKernelModules, savedArchRequiredKernelModules)
|
||||||
|
}
|
@ -210,3 +210,7 @@ func TestKvmIsUsable(t *testing.T) {
|
|||||||
func TestGetCPUDetails(t *testing.T) {
|
func TestGetCPUDetails(t *testing.T) {
|
||||||
genericTestGetCPUDetails(t)
|
genericTestGetCPUDetails(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSetCPUtype(t *testing.T) {
|
||||||
|
testSetCPUTypeGeneric(t)
|
||||||
|
}
|
||||||
|
@ -294,6 +294,8 @@ func getHypervisorInfo(config oci.RuntimeConfig) HypervisorInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getEnvInfo(configFile string, config oci.RuntimeConfig) (env EnvInfo, err error) {
|
func getEnvInfo(configFile string, config oci.RuntimeConfig) (env EnvInfo, err error) {
|
||||||
|
setCPUtype()
|
||||||
|
|
||||||
meta := getMetaInfo()
|
meta := getMetaInfo()
|
||||||
|
|
||||||
runtime := getRuntimeInfo(configFile, config)
|
runtime := getRuntimeInfo(configFile, config)
|
||||||
|
@ -5,6 +5,56 @@
|
|||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
func getExpectedHostDetails(tmpdir string) (HostInfo, error) {
|
func getExpectedHostDetails(tmpdir string) (HostInfo, error) {
|
||||||
return genericGetExpectedHostDetails(tmpdir)
|
return genericGetExpectedHostDetails(tmpdir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEnvGetEnvInfoSetsCPUType(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
tmpdir, err := ioutil.TempDir("", "")
|
||||||
|
assert.NoError(err)
|
||||||
|
defer os.RemoveAll(tmpdir)
|
||||||
|
|
||||||
|
savedArchRequiredCPUFlags := archRequiredCPUFlags
|
||||||
|
savedArchRequiredCPUAttribs := archRequiredCPUAttribs
|
||||||
|
savedArchRequiredKernelModules := archRequiredKernelModules
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
archRequiredCPUFlags = savedArchRequiredCPUFlags
|
||||||
|
archRequiredCPUAttribs = savedArchRequiredCPUAttribs
|
||||||
|
archRequiredKernelModules = savedArchRequiredKernelModules
|
||||||
|
}()
|
||||||
|
|
||||||
|
archRequiredCPUFlags = map[string]string{}
|
||||||
|
archRequiredCPUAttribs = map[string]string{}
|
||||||
|
archRequiredKernelModules = map[string]kernelModule{}
|
||||||
|
|
||||||
|
configFile, config, err := makeRuntimeConfig(tmpdir)
|
||||||
|
assert.NoError(err)
|
||||||
|
|
||||||
|
expectedEnv, err := getExpectedSettings(config, tmpdir, configFile)
|
||||||
|
assert.NoError(err)
|
||||||
|
|
||||||
|
env, err := getEnvInfo(configFile, config)
|
||||||
|
assert.NoError(err)
|
||||||
|
|
||||||
|
assert.Equal(expectedEnv, env)
|
||||||
|
|
||||||
|
assert.NotEmpty(archRequiredCPUFlags)
|
||||||
|
assert.NotEmpty(archRequiredCPUAttribs)
|
||||||
|
assert.NotEmpty(archRequiredKernelModules)
|
||||||
|
|
||||||
|
assert.Equal(archRequiredCPUFlags["vmx"], "Virtualization support")
|
||||||
|
|
||||||
|
_, ok := archRequiredKernelModules["kvm"]
|
||||||
|
assert.True(ok)
|
||||||
|
}
|
||||||
|
@ -9,6 +9,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
goruntime "runtime"
|
goruntime "runtime"
|
||||||
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getExpectedHostDetails(tmpdir string) (HostInfo, error) {
|
func getExpectedHostDetails(tmpdir string) (HostInfo, error) {
|
||||||
@ -92,3 +93,7 @@ VERSION_ID="%s"
|
|||||||
|
|
||||||
return expectedHostDetails, nil
|
return expectedHostDetails, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEnvGetEnvInfoSetsCPUType(t *testing.T) {
|
||||||
|
testEnvGetEnvInfoSetsCPUTypeGeneric(t)
|
||||||
|
}
|
||||||
|
53
cli/kata-env_generic_test.go
Normal file
53
cli/kata-env_generic_test.go
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
// Copyright (c) 2018 Intel Corporation
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
//
|
||||||
|
|
||||||
|
// +build arm64 ppc64le
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func testEnvGetEnvInfoSetsCPUTypeGeneric(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
tmpdir, err := ioutil.TempDir("", "")
|
||||||
|
assert.NoError(err)
|
||||||
|
defer os.RemoveAll(tmpdir)
|
||||||
|
|
||||||
|
savedArchRequiredCPUFlags := archRequiredCPUFlags
|
||||||
|
savedArchRequiredCPUAttribs := archRequiredCPUAttribs
|
||||||
|
savedArchRequiredKernelModules := archRequiredKernelModules
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
archRequiredCPUFlags = savedArchRequiredCPUFlags
|
||||||
|
archRequiredCPUAttribs = savedArchRequiredCPUAttribs
|
||||||
|
archRequiredKernelModules = savedArchRequiredKernelModules
|
||||||
|
}()
|
||||||
|
|
||||||
|
assert.Empty(archRequiredCPUFlags)
|
||||||
|
assert.Empty(archRequiredCPUAttribs)
|
||||||
|
assert.NotEmpty(archRequiredKernelModules)
|
||||||
|
|
||||||
|
configFile, config, err := makeRuntimeConfig(tmpdir)
|
||||||
|
assert.NoError(err)
|
||||||
|
|
||||||
|
expectedEnv, err := getExpectedSettings(config, tmpdir, configFile)
|
||||||
|
assert.NoError(err)
|
||||||
|
|
||||||
|
env, err := getEnvInfo(configFile, config)
|
||||||
|
assert.NoError(err)
|
||||||
|
|
||||||
|
assert.Equal(expectedEnv, env)
|
||||||
|
|
||||||
|
assert.Equal(archRequiredCPUFlags, savedArchRequiredCPUFlags)
|
||||||
|
assert.Equal(archRequiredCPUAttribs, savedArchRequiredCPUAttribs)
|
||||||
|
assert.Equal(archRequiredKernelModules, savedArchRequiredKernelModules)
|
||||||
|
}
|
@ -5,6 +5,12 @@
|
|||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
func getExpectedHostDetails(tmpdir string) (HostInfo, error) {
|
func getExpectedHostDetails(tmpdir string) (HostInfo, error) {
|
||||||
return genericGetExpectedHostDetails(tmpdir)
|
return genericGetExpectedHostDetails(tmpdir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEnvGetEnvInfoSetsCPUType(t *testing.T) {
|
||||||
|
testEnvGetEnvInfoSetsCPUTypeGeneric(t)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user