From 202872d88d743c5626ed95301743205eaabfdd0a Mon Sep 17 00:00:00 2001 From: chrislusf Date: Wed, 10 Dec 2025 22:42:28 -0800 Subject: [PATCH] test: improve helper robustness - Make assertNoFlagError case-insensitive for pattern matching - Use defer in captureCommandOutput to restore stdout/stderr and close pipe ends to avoid FD leaks even if cmd.Do panics --- test/erasure_coding/ec_integration_test.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/test/erasure_coding/ec_integration_test.go b/test/erasure_coding/ec_integration_test.go index 1fef0c165..bb0983f06 100644 --- a/test/erasure_coding/ec_integration_test.go +++ b/test/erasure_coding/ec_integration_test.go @@ -627,7 +627,7 @@ func contains(s, substr string) bool { func assertNoFlagError(t *testing.T, err error, output string, context string) { t.Helper() - // Check for common flag parsing error patterns + // Check for common flag parsing error patterns (case-insensitive) flagErrorPatterns := []string{ "flag provided but not defined", "unknown flag", @@ -635,11 +635,12 @@ func assertNoFlagError(t *testing.T, err error, output string, context string) { "bad flag syntax", } + outputLower := strings.ToLower(output) for _, pattern := range flagErrorPatterns { - if contains(output, pattern) { + if strings.Contains(outputLower, pattern) { t.Fatalf("%s: flag parsing error detected in output: %s", context, pattern) } - if err != nil && contains(err.Error(), pattern) { + if err != nil && strings.Contains(strings.ToLower(err.Error()), pattern) { t.Fatalf("%s: flag parsing error in error: %v", context, err) } } @@ -656,21 +657,23 @@ func captureCommandOutput(t *testing.T, cmd commandRunner, args []string, comman t.Helper() var outBuf bytes.Buffer - oldStdout := os.Stdout - oldStderr := os.Stderr + oldStdout, oldStderr := os.Stdout, os.Stderr r, w, pipeErr := os.Pipe() require.NoError(t, pipeErr) + defer func() { + _ = w.Close() + os.Stdout = oldStdout + os.Stderr = oldStderr + }() + os.Stdout = w os.Stderr = w cmdErr := cmd.Do(args, commandEnv, &outBuf) - w.Close() - os.Stdout = oldStdout - os.Stderr = oldStderr - capturedOutput, readErr := io.ReadAll(r) + _ = r.Close() require.NoError(t, readErr) return string(capturedOutput) + outBuf.String(), cmdErr