Files
go-mxl-player/internal/adapter/mxlfabrics/interface_integration_test.go
Dmitry Sergeev 3ecca24fe9 MXL Fabrics tests
2026-09-06 16:35:54 +03:00

90 lines
2.0 KiB
Go

//go:build mxl_integration
package mxlfabrics_test
import (
"os"
"testing"
"github.com/qvest-digital/go-mxl/fabrics"
"github.com/qvest-digital/go-mxl/mxl"
)
func requireSHMInterface(
t *testing.T,
instance *fabrics.Instance,
) fabrics.InterfaceConfig {
t.Helper()
interfaces, err := instance.Interfaces(&fabrics.InterfaceConfig{
Provider: fabrics.ProviderSHM,
})
if err != nil {
t.Fatalf("enumerate SHM interfaces: %v", err)
}
for _, iface := range interfaces {
if iface.Provider != fabrics.ProviderSHM {
continue
}
if iface.Caps.Flags&fabrics.InterfaceCapRemoteWrite == 0 {
continue
}
// Allow libfabric to assign a unique local SHM endpoint during
// Target.Setup or Initiator.Setup. The enumerated service is
// descriptive and should not be reused by both endpoints.
iface.Address.Service = ""
return iface
}
t.Fatal("no remote-write-capable SHM Fabrics interface found")
return fabrics.InterfaceConfig{}
}
func TestInterfacesIncludesSHM(t *testing.T) {
if _, err := os.Stat("/dev/shm"); err != nil {
t.Skipf("/dev/shm is unavailable: %v", err)
}
domain, err := os.MkdirTemp("/dev/shm", "mxl-player-fabrics-*")
if err != nil {
t.Fatalf("create temporary MXL domain: %v", err)
}
t.Cleanup(func() {
if err := os.RemoveAll(domain); err != nil {
t.Errorf("remove temporary MXL domain: %v", err)
}
})
instance, err := mxl.NewInstance(domain, "")
if err != nil {
t.Fatalf("create MXL instance: %v", err)
}
t.Cleanup(func() {
if err := instance.Close(); err != nil {
t.Errorf("close MXL instance: %v", err)
}
})
fabricInstance, err := fabrics.NewInstance(instance)
if err != nil {
t.Fatalf("create Fabrics instance: %v", err)
}
t.Cleanup(func() {
if err := fabricInstance.Close(); err != nil {
t.Errorf("close Fabrics instance: %v", err)
}
})
iface := requireSHMInterface(t, fabricInstance)
t.Logf(
"SHM interface: node=%q flags=%#x max-message-size=%d attr=%q",
iface.Address.Node,
iface.Caps.Flags,
iface.Caps.MaxMessageSize,
iface.Attr,
)
}