From 9970cbfdb6e3af99a8d02fa394fbed8b612822b0 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Wed, 8 Apr 2026 15:46:27 -0700 Subject: [PATCH] libct/int: switch from bytes.Buffer to strings.Builder The latter is simpler and provides just enough functionality to be used here. Signed-off-by: Kir Kolyshkin --- libcontainer/integration/bench_test.go | 5 ++-- libcontainer/integration/checkpoint_test.go | 5 ++-- libcontainer/integration/exec_test.go | 29 ++++++++++----------- libcontainer/integration/execin_test.go | 7 +++-- libcontainer/integration/update_test.go | 3 +-- libcontainer/integration/utils_test.go | 9 +++---- 6 files changed, 26 insertions(+), 32 deletions(-) diff --git a/libcontainer/integration/bench_test.go b/libcontainer/integration/bench_test.go index 5499ee215..c185276cf 100644 --- a/libcontainer/integration/bench_test.go +++ b/libcontainer/integration/bench_test.go @@ -1,7 +1,6 @@ package integration import ( - "bytes" "math/rand" "os" "strings" @@ -95,7 +94,7 @@ func BenchmarkExecInBigEnv(b *testing.B) { const numEnv = 5000 env := append(standardEnvironment, genBigEnv(numEnv)...) // Construct the expected output. - var wantOut bytes.Buffer + var wantOut strings.Builder for _, e := range env { wantOut.WriteString(e + "\n") } @@ -112,7 +111,7 @@ func BenchmarkExecInBigEnv(b *testing.B) { err = container.Run(exec) ok(b, err) waitProcess(exec, b) - if !bytes.Equal(buffers.Stdout.Bytes(), wantOut.Bytes()) { + if buffers.Stdout.String() != wantOut.String() { b.Fatalf("unexpected output: %s (stderr: %s)", buffers.Stdout, buffers.Stderr) } } diff --git a/libcontainer/integration/checkpoint_test.go b/libcontainer/integration/checkpoint_test.go index fa4a4975c..21da101d8 100644 --- a/libcontainer/integration/checkpoint_test.go +++ b/libcontainer/integration/checkpoint_test.go @@ -1,7 +1,6 @@ package integration import ( - "bytes" "os" "os/exec" "path/filepath" @@ -54,7 +53,7 @@ func testCheckpoint(t *testing.T, userns bool) { stdinR, stdinW, err := os.Pipe() ok(t, err) - var stdout bytes.Buffer + var stdout strings.Builder pconfig := libcontainer.Process{ Cwd: "/", @@ -131,7 +130,7 @@ func testCheckpoint(t *testing.T, userns bool) { restoreStdinR, restoreStdinW, err := os.Pipe() ok(t, err) - var restoreStdout bytes.Buffer + var restoreStdout strings.Builder restoreProcessConfig := &libcontainer.Process{ Cwd: "/", Stdin: restoreStdinR, diff --git a/libcontainer/integration/exec_test.go b/libcontainer/integration/exec_test.go index 0586dd0e8..e0e49990d 100644 --- a/libcontainer/integration/exec_test.go +++ b/libcontainer/integration/exec_test.go @@ -1,7 +1,6 @@ package integration import ( - "bytes" "encoding/json" "errors" "fmt" @@ -163,7 +162,7 @@ func TestEnter(t *testing.T) { stdinR, stdinW, err := os.Pipe() ok(t, err) - var stdout, stdout2 bytes.Buffer + var stdout, stdout2 strings.Builder pconfig := libcontainer.Process{ Cwd: "/", @@ -242,7 +241,7 @@ func TestProcessEnv(t *testing.T) { ok(t, err) defer destroyContainer(container) - var stdout bytes.Buffer + var stdout strings.Builder pconfig := libcontainer.Process{ Cwd: "/", Args: []string{"sh", "-c", "env"}, @@ -288,7 +287,7 @@ func TestProcessEmptyCaps(t *testing.T) { ok(t, err) defer destroyContainer(container) - var stdout bytes.Buffer + var stdout strings.Builder pconfig := libcontainer.Process{ Cwd: "/", Args: []string{"sh", "-c", "cat /proc/self/status"}, @@ -332,7 +331,7 @@ func TestProcessCaps(t *testing.T) { ok(t, err) defer destroyContainer(container) - var stdout bytes.Buffer + var stdout strings.Builder pconfig := libcontainer.Process{ Cwd: "/", Args: []string{"sh", "-c", "cat /proc/self/status"}, @@ -393,7 +392,7 @@ func TestAdditionalGroups(t *testing.T) { ok(t, err) defer destroyContainer(container) - var stdout bytes.Buffer + var stdout strings.Builder pconfig := libcontainer.Process{ Cwd: "/", Args: []string{"sh", "-c", "id", "-Gn"}, @@ -772,7 +771,7 @@ func TestPassExtraFiles(t *testing.T) { ok(t, err) defer destroyContainer(container) - var stdout bytes.Buffer + var stdout strings.Builder pipeout1, pipein1, err := os.Pipe() ok(t, err) pipeout2, pipein2, err := os.Pipe() @@ -831,7 +830,7 @@ func TestSysctl(t *testing.T) { ok(t, err) defer destroyContainer(container) - var stdout bytes.Buffer + var stdout strings.Builder pconfig := libcontainer.Process{ Cwd: "/proc/sys/kernel", Args: []string{"sh", "-c", cmd}, @@ -941,7 +940,7 @@ func TestOomScoreAdj(t *testing.T) { ok(t, err) defer destroyContainer(container) - var stdout bytes.Buffer + var stdout strings.Builder pconfig := libcontainer.Process{ Cwd: "/", Args: []string{"sh", "-c", "cat /proc/self/oom_score_adj"}, @@ -1081,7 +1080,7 @@ func TestHook(t *testing.T) { cmd.WriteString("/" + hook + " ") } - var stdout bytes.Buffer + var stdout strings.Builder pconfig := libcontainer.Process{ Cwd: "/", Args: []string{"sh", "-c", cmd.String()}, @@ -1193,7 +1192,7 @@ func TestRootfsPropagationSlaveMount(t *testing.T) { ok(t, err) // Run "cat /proc/self/mountinfo" in container and look at mount points. - var stdout2 bytes.Buffer + var stdout2 strings.Builder stdinR2, stdinW2, err := os.Pipe() ok(t, err) @@ -1305,7 +1304,7 @@ func TestRootfsPropagationSharedMount(t *testing.T) { dir2cont = filepath.Join(dir1cont, filepath.Base(dir2host)) // Mount something in container and see if it is visible on host. - var stdout2 bytes.Buffer + var stdout2 strings.Builder stdinR2, stdinW2, err := os.Pipe() ok(t, err) @@ -1340,7 +1339,7 @@ func TestRootfsPropagationSharedMount(t *testing.T) { // Check if mount is visible on host or not. out, err := exec.Command("findmnt", "-n", "-f", "-oTARGET", dir2host).CombinedOutput() - outtrim := string(bytes.TrimSpace(out)) + outtrim := strings.TrimSpace(string(out)) if err != nil { t.Logf("findmnt error %q: %q", err, outtrim) } @@ -1627,7 +1626,7 @@ func TestTmpfsCopyUp(t *testing.T) { ok(t, err) defer destroyContainer(container) - var stdout bytes.Buffer + var stdout strings.Builder pconfig := libcontainer.Process{ Args: []string{"ls", "/etc/passwd"}, Env: standardEnvironment, @@ -1818,7 +1817,7 @@ func TestBindMountAndUser(t *testing.T) { ok(t, err) defer destroyContainer(container) - var stdout bytes.Buffer + var stdout strings.Builder pconfig := libcontainer.Process{ Cwd: "/", diff --git a/libcontainer/integration/execin_test.go b/libcontainer/integration/execin_test.go index d28166292..707d842c1 100644 --- a/libcontainer/integration/execin_test.go +++ b/libcontainer/integration/execin_test.go @@ -1,7 +1,6 @@ package integration import ( - "bytes" "fmt" "io" "os" @@ -151,7 +150,7 @@ func TestExecInAdditionalGroups(t *testing.T) { defer stdinW.Close() ok(t, err) - var stdout bytes.Buffer + var stdout strings.Builder pconfig := libcontainer.Process{ Cwd: "/", Args: []string{"sh", "-c", "id", "-Gn"}, @@ -264,7 +263,7 @@ func TestExecInTTY(t *testing.T) { // Repeat to increase chances to catch a race; see // https://github.com/opencontainers/runc/issues/2425. for range 300 { - var stdout bytes.Buffer + var stdout strings.Builder parent, child, err := utils.NewSockPair("console") ok(t, err) @@ -410,7 +409,7 @@ func TestExecinPassExtraFiles(t *testing.T) { defer stdinW.Close() ok(t, err) - var stdout bytes.Buffer + var stdout strings.Builder pipeout1, pipein1, err := os.Pipe() ok(t, err) pipeout2, pipein2, err := os.Pipe() diff --git a/libcontainer/integration/update_test.go b/libcontainer/integration/update_test.go index 3c0fa4b52..ef204a040 100644 --- a/libcontainer/integration/update_test.go +++ b/libcontainer/integration/update_test.go @@ -1,7 +1,6 @@ package integration import ( - "bytes" "os" "strings" "testing" @@ -40,7 +39,7 @@ func testUpdateDevices(t *testing.T, systemd bool) { }() ok(t, err) - var buf bytes.Buffer + var buf strings.Builder devCheck := &libcontainer.Process{ Cwd: "/", Args: []string{"/bin/sh", "-c", "echo > /dev/full; cat /dev/null; true"}, diff --git a/libcontainer/integration/utils_test.go b/libcontainer/integration/utils_test.go index 346b5b733..a9cf4aa09 100644 --- a/libcontainer/integration/utils_test.go +++ b/libcontainer/integration/utils_test.go @@ -1,7 +1,6 @@ package integration import ( - "bytes" "errors" "fmt" "os" @@ -55,14 +54,14 @@ func ptrInt(v int) *int { func newStdBuffers() *stdBuffers { return &stdBuffers{ - Stdout: bytes.NewBuffer(nil), - Stderr: bytes.NewBuffer(nil), + Stdout: new(strings.Builder), + Stderr: new(strings.Builder), } } type stdBuffers struct { - Stdout *bytes.Buffer - Stderr *bytes.Buffer + Stdout *strings.Builder + Stderr *strings.Builder } func (b *stdBuffers) String() string {