github.com/opencontainers/runc@v1.2.0-rc.1.0.20240520010911-492dc558cdd6/libcontainer/intelrdt/intelrdt_test.go (about) 1 package intelrdt 2 3 import ( 4 "os" 5 "path/filepath" 6 "strings" 7 "testing" 8 ) 9 10 func TestIntelRdtSetL3CacheSchema(t *testing.T) { 11 helper := NewIntelRdtTestUtil(t) 12 13 const ( 14 l3CacheSchemaBefore = "L3:0=f;1=f0" 15 l3CacheSchemeAfter = "L3:0=f0;1=f" 16 ) 17 18 helper.writeFileContents(map[string]string{ 19 "schemata": l3CacheSchemaBefore + "\n", 20 }) 21 22 helper.config.IntelRdt.L3CacheSchema = l3CacheSchemeAfter 23 intelrdt := newManager(helper.config, "", helper.IntelRdtPath) 24 if err := intelrdt.Set(helper.config); err != nil { 25 t.Fatal(err) 26 } 27 28 tmpStrings, err := getIntelRdtParamString(helper.IntelRdtPath, "schemata") 29 if err != nil { 30 t.Fatalf("Failed to parse file 'schemata' - %s", err) 31 } 32 values := strings.Split(tmpStrings, "\n") 33 value := values[0] 34 35 if value != l3CacheSchemeAfter { 36 t.Fatal("Got the wrong value, set 'schemata' failed.") 37 } 38 } 39 40 func TestIntelRdtSetMemBwSchema(t *testing.T) { 41 helper := NewIntelRdtTestUtil(t) 42 43 const ( 44 memBwSchemaBefore = "MB:0=20;1=70" 45 memBwSchemeAfter = "MB:0=70;1=20" 46 ) 47 48 helper.writeFileContents(map[string]string{ 49 "schemata": memBwSchemaBefore + "\n", 50 }) 51 52 helper.config.IntelRdt.MemBwSchema = memBwSchemeAfter 53 intelrdt := newManager(helper.config, "", helper.IntelRdtPath) 54 if err := intelrdt.Set(helper.config); err != nil { 55 t.Fatal(err) 56 } 57 58 tmpStrings, err := getIntelRdtParamString(helper.IntelRdtPath, "schemata") 59 if err != nil { 60 t.Fatalf("Failed to parse file 'schemata' - %s", err) 61 } 62 values := strings.Split(tmpStrings, "\n") 63 value := values[0] 64 65 if value != memBwSchemeAfter { 66 t.Fatal("Got the wrong value, set 'schemata' failed.") 67 } 68 } 69 70 func TestIntelRdtSetMemBwScSchema(t *testing.T) { 71 helper := NewIntelRdtTestUtil(t) 72 73 const ( 74 memBwScSchemaBefore = "MB:0=5000;1=7000" 75 memBwScSchemeAfter = "MB:0=9000;1=4000" 76 ) 77 78 helper.writeFileContents(map[string]string{ 79 "schemata": memBwScSchemaBefore + "\n", 80 }) 81 82 helper.config.IntelRdt.MemBwSchema = memBwScSchemeAfter 83 intelrdt := newManager(helper.config, "", helper.IntelRdtPath) 84 if err := intelrdt.Set(helper.config); err != nil { 85 t.Fatal(err) 86 } 87 88 tmpStrings, err := getIntelRdtParamString(helper.IntelRdtPath, "schemata") 89 if err != nil { 90 t.Fatalf("Failed to parse file 'schemata' - %s", err) 91 } 92 values := strings.Split(tmpStrings, "\n") 93 value := values[0] 94 95 if value != memBwScSchemeAfter { 96 t.Fatal("Got the wrong value, set 'schemata' failed.") 97 } 98 } 99 100 func TestApply(t *testing.T) { 101 helper := NewIntelRdtTestUtil(t) 102 103 const closID = "test-clos" 104 105 helper.config.IntelRdt.ClosID = closID 106 intelrdt := newManager(helper.config, "", helper.IntelRdtPath) 107 if err := intelrdt.Apply(1234); err == nil { 108 t.Fatal("unexpected success when applying pid") 109 } 110 if _, err := os.Stat(filepath.Join(helper.IntelRdtPath, closID)); err == nil { 111 t.Fatal("closid dir should not exist") 112 } 113 114 // Dir should be created if some schema has been specified 115 intelrdt.config.IntelRdt.L3CacheSchema = "L3:0=f" 116 if err := intelrdt.Apply(1235); err != nil { 117 t.Fatalf("Apply() failed: %v", err) 118 } 119 120 pids, err := getIntelRdtParamString(intelrdt.GetPath(), "tasks") 121 if err != nil { 122 t.Fatalf("failed to read tasks file: %v", err) 123 } 124 if pids != "1235" { 125 t.Fatalf("unexpected tasks file, expected '1235', got %q", pids) 126 } 127 }