68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
|
// +build linux
|
||
|
|
||
|
/*
|
||
|
* Utility for testing Intel RDT operations.
|
||
|
* Creates a mock of the Intel RDT "resource control" filesystem for the duration of the test.
|
||
|
*/
|
||
|
package intelrdt
|
||
|
|
||
|
import (
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/opencontainers/runc/libcontainer/configs"
|
||
|
)
|
||
|
|
||
|
type intelRdtTestUtil struct {
|
||
|
// intelRdt data to use in tests
|
||
|
IntelRdtData *intelRdtData
|
||
|
|
||
|
// Path to the mock Intel RDT "resource control" filesystem directory
|
||
|
IntelRdtPath string
|
||
|
|
||
|
// Temporary directory to store mock Intel RDT "resource control" filesystem
|
||
|
tempDir string
|
||
|
t *testing.T
|
||
|
}
|
||
|
|
||
|
// Creates a new test util
|
||
|
func NewIntelRdtTestUtil(t *testing.T) *intelRdtTestUtil {
|
||
|
d := &intelRdtData{
|
||
|
config: &configs.Config{
|
||
|
IntelRdt: &configs.IntelRdt{},
|
||
|
},
|
||
|
}
|
||
|
tempDir, err := ioutil.TempDir("", "intelrdt_test")
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
d.root = tempDir
|
||
|
testIntelRdtPath := filepath.Join(d.root, "resctrl")
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
// Ensure the full mock Intel RDT "resource control" filesystem path exists
|
||
|
err = os.MkdirAll(testIntelRdtPath, 0755)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
return &intelRdtTestUtil{IntelRdtData: d, IntelRdtPath: testIntelRdtPath, tempDir: tempDir, t: t}
|
||
|
}
|
||
|
|
||
|
func (c *intelRdtTestUtil) cleanup() {
|
||
|
os.RemoveAll(c.tempDir)
|
||
|
}
|
||
|
|
||
|
// Write the specified contents on the mock of the specified Intel RDT "resource control" files
|
||
|
func (c *intelRdtTestUtil) writeFileContents(fileContents map[string]string) {
|
||
|
for file, contents := range fileContents {
|
||
|
err := writeFile(c.IntelRdtPath, file, contents)
|
||
|
if err != nil {
|
||
|
c.t.Fatal(err)
|
||
|
}
|
||
|
}
|
||
|
}
|