Skip to content

Commit f873e57

Browse files
committed
add ut for psi
Signed-off-by: zouyee <zouyee1989@gmail.com>
1 parent 2686038 commit f873e57

File tree

2 files changed

+51
-15
lines changed

2 files changed

+51
-15
lines changed

cgroup2/utils.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -482,43 +482,43 @@ func getHugePageSizeFromFilenames(fileNames []string) ([]string, error) {
482482
func getStatPSIFromFile(path string) *stats.PSIStats {
483483
f, err := os.Open(path)
484484
if err != nil {
485-
return &stats.PSIStats{}
485+
return nil
486486
}
487487
defer f.Close()
488488

489-
var psistats stats.PSIStats
489+
psistats := &stats.PSIStats{}
490490
sc := bufio.NewScanner(f)
491491
for sc.Scan() {
492492
parts := strings.Fields(sc.Text())
493493
var pv *stats.PSIData
494494
switch parts[0] {
495495
case "some":
496-
psistats.Some = pv
496+
psistats.Some = &stats.PSIData{}
497497
pv = psistats.Some
498498
case "full":
499-
psistats.Full = pv
499+
psistats.Full = &stats.PSIData{}
500500
pv = psistats.Full
501501
}
502502
if pv != nil {
503-
pv, err = parsePSIData(parts[1:])
503+
err = parsePSIData(parts[1:], pv)
504504
if err != nil {
505505
logrus.Errorf("unable to parse psi data: %v", err)
506-
return &stats.PSIStats{}
506+
return nil
507507
}
508508
}
509509
}
510+
510511
if err := sc.Err(); err != nil {
511-
return &stats.PSIStats{}
512+
return nil
512513
}
513-
return &psistats
514+
return psistats
514515
}
515516

516-
func parsePSIData(psi []string) (*stats.PSIData, error) {
517-
data := &stats.PSIData{}
517+
func parsePSIData(psi []string, data *stats.PSIData) error {
518518
for _, f := range psi {
519519
kv := strings.SplitN(f, "=", 2)
520520
if len(kv) != 2 {
521-
return data, fmt.Errorf("invalid psi data: %q", f)
521+
return fmt.Errorf("invalid psi data: %q", f)
522522
}
523523
var pv *float64
524524
switch kv[0] {
@@ -531,19 +531,19 @@ func parsePSIData(psi []string) (*stats.PSIData, error) {
531531
case "total":
532532
v, err := strconv.ParseUint(kv[1], 10, 64)
533533
if err != nil {
534-
return data, fmt.Errorf("invalid %s PSI value: %w", kv[0], err)
534+
return fmt.Errorf("invalid %s PSI value: %w", kv[0], err)
535535
}
536536
data.Total = v
537537
}
538538
if pv != nil {
539539
v, err := strconv.ParseFloat(kv[1], 64)
540540
if err != nil {
541-
return data, fmt.Errorf("invalid %s PSI value: %w", kv[0], err)
541+
return fmt.Errorf("invalid %s PSI value: %w", kv[0], err)
542542
}
543543
*pv = v
544544
}
545545
}
546-
return data, nil
546+
return nil
547547
}
548548

549549
func getSubreaper() (int, error) {

cgroup2/utils_test.go

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,17 @@
1717
package cgroup2
1818

1919
import (
20+
"os"
21+
"path/filepath"
2022
"strings"
2123
"testing"
2224

25+
"github.com/containerd/cgroups/v3/cgroup2/stats"
26+
27+
"github.com/google/go-cmp/cmp"
2328
"github.com/opencontainers/runtime-spec/specs-go"
2429
"github.com/stretchr/testify/assert"
30+
"google.golang.org/protobuf/testing/protocmp"
2531
)
2632

2733
func TestParseCgroupFromReader(t *testing.T) {
@@ -41,6 +47,36 @@ func TestParseCgroupFromReader(t *testing.T) {
4147
}
4248
}
4349

50+
func TestParseStatCPUPSI(t *testing.T) {
51+
const examplePSIData = `some avg10=1.71 avg60=2.36 avg300=2.57 total=230548833
52+
full avg10=1.00 avg60=1.01 avg300=1.00 total=157622356`
53+
54+
fakeCgroupDir := t.TempDir()
55+
statPath := filepath.Join(fakeCgroupDir, "cpu.pressure")
56+
57+
if err := os.WriteFile(statPath, []byte(examplePSIData), 0o644); err != nil {
58+
t.Fatal(err)
59+
}
60+
61+
st := getStatPSIFromFile(filepath.Join(fakeCgroupDir, "cpu.pressure"))
62+
if diff := cmp.Diff(st, stats.PSIStats{
63+
Some: &stats.PSIData{
64+
Avg10: 1.71,
65+
Avg60: 2.36,
66+
Avg300: 2.57,
67+
Total: 230548833,
68+
},
69+
Full: &stats.PSIData{
70+
Avg10: 1.00,
71+
Avg60: 1.01,
72+
Avg300: 1.00,
73+
Total: 157622356,
74+
},
75+
}, protocmp.Transform()); diff != "" {
76+
t.Errorf("unexpected PSI result: %+v", diff)
77+
}
78+
}
79+
4480
func TestToResources(t *testing.T) {
4581
var (
4682
quota int64 = 8000
@@ -63,6 +99,6 @@ func BenchmarkGetStatFileContentUint64(b *testing.B) {
6399
b.ReportAllocs()
64100

65101
for i := 0; i < b.N; i++ {
66-
_ = getStatFileContentUint64("/proc/self/loginuid")
102+
_ = getStatFileContentUint64("/proc/self/2loginuid")
67103
}
68104
}

0 commit comments

Comments
 (0)