From b4b944eab6e6c1e376966ff5e142d1723bdeda35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20BIDON?= Date: Sat, 9 Aug 2025 19:09:41 +0200 Subject: [PATCH] test: removed special case for handling testing dirs on windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://github.com/golang/go/issues/71544 is still officially open. However a fix has been committed to go codebase. This issue is not really blocking: the problem lies on windows not reliaby cleaning up the temporary directory. Signed-off-by: Frédéric BIDON --- internal/antest/helpers_test.go | 21 +++++------------- internal/debug/debug.go | 6 ++---- internal/debug/debug_test.go | 38 ++++++++++++++++++--------------- 3 files changed, 28 insertions(+), 37 deletions(-) diff --git a/internal/antest/helpers_test.go b/internal/antest/helpers_test.go index cfe1ca3..5452212 100644 --- a/internal/antest/helpers_test.go +++ b/internal/antest/helpers_test.go @@ -5,7 +5,6 @@ package antest import ( "os" - "runtime" "testing" "github.com/go-openapi/testify/v2/require" @@ -50,6 +49,7 @@ func TestLoadSpecErrorCases(t *testing.T) { func prepareBadDoc(t testing.TB, kind string, invalidFormat bool) (string, func()) { t.Helper() + folder := t.TempDir() var ( file string @@ -58,9 +58,10 @@ func prepareBadDoc(t testing.TB, kind string, invalidFormat bool) (string, func( switch kind { case "yaml", "yml": - f, err := os.CreateTemp(workaroundTempDir(t)(), "*.yaml") + f, err := os.CreateTemp(folder, "*.yaml") require.NoError(t, err) file = f.Name() + f.Close() if invalidFormat { data = []byte(`-- @@ -76,9 +77,10 @@ info: } case "json": - f, err := os.CreateTemp(workaroundTempDir(t)(), "*.json") + f, err := os.CreateTemp(folder, "*.json") require.NoError(t, err) file = f.Name() + f.Close() if invalidFormat { data = []byte(`{ @@ -104,16 +106,3 @@ info: return file, func() {} } - -func workaroundTempDir(t testing.TB) func() string { - // Workaround for go testing bug on Windows: https://github.com/golang/go/issues/71544 - // On windows, t.TempDir() doesn't properly release file handles yet, - // se we just leave it unchecked (no cleanup would take place). - if runtime.GOOS == "windows" { - return func() string { - return "" - } - } - - return t.TempDir -} diff --git a/internal/debug/debug.go b/internal/debug/debug.go index 03e0d32..d3fa08d 100644 --- a/internal/debug/debug.go +++ b/internal/debug/debug.go @@ -11,11 +11,9 @@ import ( "runtime" ) -var ( - output = os.Stdout -) +var output = os.Stdout //nolint:gochecknoglobals // this is on purpose to be overridable during tests -// GetLogger provides a prefix debug logger +// GetLogger provides a prefix debug logger. func GetLogger(prefix string, debug bool) func(string, ...any) { if debug { logger := log.New(output, prefix+":", log.LstdFlags) diff --git a/internal/debug/debug_test.go b/internal/debug/debug_test.go index ded2944..680e117 100644 --- a/internal/debug/debug_test.go +++ b/internal/debug/debug_test.go @@ -5,7 +5,6 @@ package debug import ( "os" - "runtime" "testing" "github.com/go-openapi/testify/v2/assert" @@ -13,8 +12,17 @@ import ( ) func TestDebug(t *testing.T) { - tmpFile, err := os.CreateTemp(workaroundTempDir(t)(), "debug-test") + folder := t.TempDir() + + tmpFile, err := os.CreateTemp(folder, "debug-test") require.NoError(t, err) + tmpFileClosed := false + defer func() { + if tmpFileClosed { + return + } + _ = tmpFile.Close() + }() output = tmpFile tmpName := tmpFile.Name() @@ -22,35 +30,31 @@ func TestDebug(t *testing.T) { testLogger("A debug: %s", "a string") tmpFile.Close() + tmpFileClosed = true flushed, err := os.ReadFile(tmpName) require.NoError(t, err) assert.Contains(t, string(flushed), "A debug: a string") - tmpEmptyFile, err := os.CreateTemp(workaroundTempDir(t)(), "debug-test") + tmpEmptyFile, err := os.CreateTemp(folder, "debug-empty-test") require.NoError(t, err) + tmpEmptyFileClosed := false + defer func() { + if tmpEmptyFileClosed { + return + } + _ = tmpEmptyFile.Close() + }() tmpEmpty := tmpEmptyFile.Name() testLogger = GetLogger("test", false) testLogger("A debug: %s", "a string") - tmpFile.Close() + tmpEmptyFile.Close() + tmpEmptyFileClosed = true flushed, err = os.ReadFile(tmpEmpty) require.NoError(t, err) assert.Empty(t, flushed) } - -func workaroundTempDir(t testing.TB) func() string { - // Workaround for go testing bug on Windows: https://github.com/golang/go/issues/71544 - // On windows, t.TempDir() doesn't properly release file handles yet, - // se we just leave it unchecked (no cleanup would take place). - if runtime.GOOS == "windows" { - return func() string { - return "" - } - } - - return t.TempDir -}