runtime: Move mockfs control global into mockfs.go

virtcontainers/persist/fs/mockfs.go defines a mock filesystem type for
testing.  A global variable in virtcontainers/persist/manager.go is used to
force use of the mock fs rather than a normal one.

This patch moves the global, and the EnableMockTesting() function which
sets it into mockfs.go.  This is slightly cleaner to begin with, and will
allow some further enhancements.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
David Gibson 2022-04-06 14:46:44 +10:00
parent 963d03ea8a
commit 5d8438e939
5 changed files with 51 additions and 23 deletions

View File

@ -13,11 +13,17 @@ import (
persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api" persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api"
) )
var mockTesting = false
type MockFS struct { type MockFS struct {
// inherit from FS. Overwrite if needed. // inherit from FS. Overwrite if needed.
*FS *FS
} }
func EnableMockTesting() {
mockTesting = true
}
func MockStorageRootPath() string { func MockStorageRootPath() string {
return filepath.Join(os.TempDir(), "vc", "mockfs") return filepath.Join(os.TempDir(), "vc", "mockfs")
} }
@ -46,3 +52,10 @@ func MockFSInit() (persistapi.PersistDriver, error) {
return &MockFS{fsDriver}, nil return &MockFS{fsDriver}, nil
} }
func MockAutoInit() (persistapi.PersistDriver, error) {
if mockTesting {
return MockFSInit()
}
return nil, nil
}

View File

@ -0,0 +1,34 @@
// Copyright Red Hat.
//
// SPDX-License-Identifier: Apache-2.0
//
package fs
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestMockAutoInit(t *testing.T) {
assert := assert.New(t)
orgMockTesting := mockTesting
defer func() {
mockTesting = orgMockTesting
}()
mockTesting = false
fsd, err := MockAutoInit()
assert.Nil(fsd)
assert.NoError(err)
// Testing mock driver
mockTesting = true
fsd, err = MockAutoInit()
assert.NoError(err)
expectedFS, err := MockFSInit()
assert.NoError(err)
assert.Equal(expectedFS, fsd)
}

View File

@ -28,13 +28,8 @@ var (
RootFSName: fs.Init, RootFSName: fs.Init,
RootlessFSName: fs.RootlessInit, RootlessFSName: fs.RootlessInit,
} }
mockTesting = false
) )
func EnableMockTesting() {
mockTesting = true
}
// GetDriver returns new PersistDriver according to driver name // GetDriver returns new PersistDriver according to driver name
func GetDriverByName(name string) (persistapi.PersistDriver, error) { func GetDriverByName(name string) (persistapi.PersistDriver, error) {
if expErr != nil { if expErr != nil {
@ -56,8 +51,9 @@ func GetDriver() (persistapi.PersistDriver, error) {
return nil, expErr return nil, expErr
} }
if mockTesting { mock, err := fs.MockAutoInit()
return fs.MockFSInit() if mock != nil || err != nil {
return mock, err
} }
if rootless.IsRootless() { if rootless.IsRootless() {

View File

@ -27,12 +27,6 @@ func TestGetDriverByName(t *testing.T) {
func TestGetDriver(t *testing.T) { func TestGetDriver(t *testing.T) {
assert := assert.New(t) assert := assert.New(t)
orgMockTesting := mockTesting
defer func() {
mockTesting = orgMockTesting
}()
mockTesting = false
fsd, err := GetDriver() fsd, err := GetDriver()
assert.NoError(err) assert.NoError(err)
@ -46,12 +40,4 @@ func TestGetDriver(t *testing.T) {
assert.NoError(err) assert.NoError(err)
assert.Equal(expectedFS, fsd) assert.Equal(expectedFS, fsd)
// Testing mock driver
mockTesting = true
fsd, err = GetDriver()
assert.NoError(err)
expectedFS, err = fs.MockFSInit()
assert.NoError(err)
assert.Equal(expectedFS, fsd)
} }

View File

@ -15,7 +15,6 @@ import (
"syscall" "syscall"
"testing" "testing"
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist"
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/fs" "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/fs"
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils" "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@ -108,7 +107,7 @@ func setupClh() {
func TestMain(m *testing.M) { func TestMain(m *testing.M) {
var err error var err error
persist.EnableMockTesting() fs.EnableMockTesting()
flag.Parse() flag.Parse()