Skip to content
This repository has been archived by the owner on May 12, 2021. It is now read-only.

Commit

Permalink
kata-env: Fix amd64 VM container capable check
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
jodh-intel committed Sep 13, 2018
1 parent d52f426 commit f70db71
Show file tree
Hide file tree
Showing 9 changed files with 191 additions and 0 deletions.
29 changes: 29 additions & 0 deletions cli/kata-check_amd64_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -492,3 +492,32 @@ func TestKvmIsUsable(t *testing.T) {
func TestGetCPUDetails(t *testing.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)
}
4 changes: 4 additions & 0 deletions cli/kata-check_arm64_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -199,3 +199,7 @@ foo : bar
}
}
}

func TestSetCPUtype(t *testing.T) {
testSetCPUTypeGeneric(t)
}
38 changes: 38 additions & 0 deletions cli/kata-check_generic_test.go
Original file line number Diff line number Diff line change
@@ -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)
}
4 changes: 4 additions & 0 deletions cli/kata-check_ppc64le_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,3 +211,7 @@ func TestKvmIsUsable(t *testing.T) {
func TestGetCPUDetails(t *testing.T) {
genericTestGetCPUDetails(t)
}

func TestSetCPUtype(t *testing.T) {
testSetCPUTypeGeneric(t)
}
2 changes: 2 additions & 0 deletions cli/kata-env.go
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,8 @@ func getHypervisorInfo(config oci.RuntimeConfig) HypervisorInfo {
}

func getEnvInfo(configFile string, config oci.RuntimeConfig) (env EnvInfo, err error) {
setCPUtype()

meta := getMetaInfo()

runtime := getRuntimeInfo(configFile, config)
Expand Down
50 changes: 50 additions & 0 deletions cli/kata-env_amd64_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,56 @@

package main

import (
"io/ioutil"
"os"
"testing"

"github.com/stretchr/testify/assert"
)

func getExpectedHostDetails(tmpdir string) (HostInfo, error) {
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)
}
5 changes: 5 additions & 0 deletions cli/kata-env_arm64_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"fmt"
"path/filepath"
goruntime "runtime"
"testing"
)

func getExpectedHostDetails(tmpdir string) (HostInfo, error) {
Expand Down Expand Up @@ -92,3 +93,7 @@ VERSION_ID="%s"

return expectedHostDetails, nil
}

func TestEnvGetEnvInfoSetsCPUType(t *testing.T) {
testEnvGetEnvInfoSetsCPUTypeGeneric(t)
}
53 changes: 53 additions & 0 deletions cli/kata-env_generic_test.go
Original file line number Diff line number Diff line change
@@ -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)
}
6 changes: 6 additions & 0 deletions cli/kata-env_ppc64le_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@

package main

import "testing"

func getExpectedHostDetails(tmpdir string) (HostInfo, error) {
return genericGetExpectedHostDetails(tmpdir)
}

func TestEnvGetEnvInfoSetsCPUType(t *testing.T) {
testEnvGetEnvInfoSetsCPUTypeGeneric(t)
}

0 comments on commit f70db71

Please sign in to comment.