blob: 9bc08190d12000fc0cf8742c41a090f66e1f7b05 [file] [edit]
package fscommon
import (
"os"
"path/filepath"
"testing"
"github.com/opencontainers/runc/libcontainer/configs"
)
/* Roadmap for future */
// (Low-priority) TODO: Check if it is possible to virtually mimic an actual RDMA device.
// TODO: Think of more edge-cases to add.
// TestRdmaSet performs an E2E test of RdmaSet(), parseRdmaKV() using dummy device and a dummy cgroup file-system.
// Note: Following test does not guarantees that your host supports RDMA since this mocks underlying infrastructure.
func TestRdmaSet(t *testing.T) {
testCgroupPath := filepath.Join(t.TempDir(), "rdma")
// Ensure the full mock cgroup path exists.
err := os.Mkdir(testCgroupPath, 0o755)
if err != nil {
t.Fatal(err)
}
rdmaDevice := "mlx5_1"
maxHandles := uint32(100)
maxObjects := uint32(300)
rdmaStubResource := &configs.Resources{
Rdma: map[string]configs.LinuxRdma{
rdmaDevice: {
HcaHandles: &maxHandles,
HcaObjects: &maxObjects,
},
},
}
if err := RdmaSet(testCgroupPath, rdmaStubResource); err != nil {
t.Fatal(err)
}
// The default rdma.max must be written.
rdmaEntries, err := readRdmaEntries(testCgroupPath, "rdma.max")
if err != nil {
t.Fatal(err)
}
if len(rdmaEntries) != 1 {
t.Fatal("rdma_test: Got the wrong values while parsing entries from rdma.max")
}
if rdmaEntries[0].HcaHandles != maxHandles {
t.Fatalf("rdma_test: Got the wrong value for hca_handles")
}
if rdmaEntries[0].HcaObjects != maxObjects {
t.Fatalf("rdma_test: Got the wrong value for hca_Objects")
}
}