check / check (push) Waiting to run
Total Size added up each version's data.age and metadata.age, but a version keeps its value in value.age, so no secret's value was counted. It now adds up every file in each version directory: the value, the metadata and the version's two keys, as the plan on the issue decided. A version directory that cannot be read adds nothing and gets a warning naming it. The new tests add a 10000-byte secret and check that the total grows by at least that much, and check the warning for a version directory that cannot be read. Model: opus-5-5
52 lines
1.4 KiB
Go
52 lines
1.4 KiB
Go
//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")
|
|
}
|