mirror of
https://github.com/opencontainers/runc.git
synced 2025-10-09 01:10:15 +08:00

In case resctrl filesystem can not be found in /proc/self/mountinfo (which is pretty common on non-server or non-x86 hardware), subsequent calls to Root() will result in parsing it again and again. Use sync.Once to avoid it. Make unit tests call it so that Root() won't actually parse mountinfo in tests. Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
/*
|
|
* 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 (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/opencontainers/runc/libcontainer/configs"
|
|
)
|
|
|
|
type intelRdtTestUtil struct {
|
|
config *configs.Config
|
|
|
|
// Path to the mock Intel RDT "resource control" filesystem directory
|
|
IntelRdtPath string
|
|
|
|
t *testing.T
|
|
}
|
|
|
|
// Creates a new test util
|
|
func NewIntelRdtTestUtil(t *testing.T) *intelRdtTestUtil {
|
|
config := &configs.Config{
|
|
IntelRdt: &configs.IntelRdt{},
|
|
}
|
|
|
|
// Assign fake intelRtdRoot value, returned by Root().
|
|
intelRdtRoot = t.TempDir()
|
|
// Make sure Root() won't even try to parse mountinfo.
|
|
rootOnce.Do(func() {})
|
|
|
|
testIntelRdtPath := filepath.Join(intelRdtRoot, "resctrl")
|
|
|
|
// Ensure the full mock Intel RDT "resource control" filesystem path exists
|
|
if err := os.MkdirAll(testIntelRdtPath, 0o755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return &intelRdtTestUtil{config: config, IntelRdtPath: testIntelRdtPath, t: t}
|
|
}
|
|
|
|
// 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)
|
|
}
|
|
}
|
|
}
|