//nolint:testpackage // white-box test of unexported internals package cli import ( "io" "os" "path/filepath" "testing" "github.com/spf13/afero" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) // TestAddVersionWarnsWhenVersionDirUnreadable asserts that a version // directory that cannot be listed, so that its files are left out of the // total size, gets a warning naming it and the error, and that its // timestamp is still tracked. // //nolint:paralleltest // replaces os.Stderr, where secret.Warn writes func TestAddVersionWarnsWhenVersionDirUnreadable(t *testing.T) { versionDir := filepath.Join(testVaultDir(listTestVaultName), unreadableTestSecretsDirName, unreadableTestSecretName, "versions", "20260809.001") base := afero.NewMemMapFs() require.NoError(t, base.MkdirAll(versionDir, listTestDirPerm)) stderrReader, stderrWriter, err := os.Pipe() require.NoError(t, err) defer func() { _ = stderrReader.Close() }() realStderr := os.Stderr os.Stderr = stderrWriter var stats vaultStats stats.addVersion(&openFailFs{Fs: base, path: versionDir}, versionDir) os.Stderr = realStderr require.NoError(t, stderrWriter.Close()) warning, err := io.ReadAll(stderrReader) require.NoError(t, err) assert.Contains(t, string(warning), versionDir) assert.Contains(t, string(warning), errOpenFailed.Error()) assert.False(t, stats.latestTime.IsZero(), "the timestamp must still be tracked") }