From 2f0caddf918bedf602b2cb3de3a237595d9941e1 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 13 Mar 2025 21:21:28 +0100 Subject: [PATCH] testutil: add testutil.Chdir() helper A tiny helper to run a specific function inside a different dir, useful in our testsuite. --- internal/testutil/testutil.go | 16 ++++++++++++++++ internal/testutil/testutil_test.go | 12 ++++++++++++ 2 files changed, 28 insertions(+) diff --git a/internal/testutil/testutil.go b/internal/testutil/testutil.go index 92147d5..efa27d3 100644 --- a/internal/testutil/testutil.go +++ b/internal/testutil/testutil.go @@ -110,3 +110,19 @@ func CaptureStdio(t *testing.T, f func()) (string, string) { wg.Wait() return stdout.String(), stderr.String() } + +func Chdir(t *testing.T, dir string, f func()) { + cwd, err := os.Getwd() + if err != nil { + t.Errorf("%s", err.Error()) + } + defer func() { + os.Chdir(cwd) + }() + + err = os.Chdir(dir) + if err != nil { + t.Errorf("%s", err.Error()) + } + f() +} diff --git a/internal/testutil/testutil_test.go b/internal/testutil/testutil_test.go index 0162281..3067946 100644 --- a/internal/testutil/testutil_test.go +++ b/internal/testutil/testutil_test.go @@ -34,3 +34,15 @@ func TestCaptureStdout(t *testing.T) { assert.Equal(t, "output on stdout", stdout) assert.Equal(t, "output on stderr", stderr) } + +func TestChroot(t *testing.T) { + tmpdir := t.TempDir() + testutil.Chdir(t, tmpdir, func() { + cwd, err := os.Getwd() + assert.NoError(t, err) + assert.Equal(t, tmpdir, cwd) + }) + cwd, err := os.Getwd() + assert.NoError(t, err) + assert.NotEqual(t, tmpdir, cwd) +}