Merge pull request 'Fix NumSecrets() always returning 0 (closes #4)' (#9) from clawbot/secret:fix/issue-4 into main

Reviewed-on: #9
This commit is contained in:
Jeffrey Paul 2026-02-09 02:39:30 +01:00
commit b06d7fa3f4
2 changed files with 24 additions and 10 deletions

View File

@ -227,27 +227,23 @@ func (v *Vault) NumSecrets() (int, error) {
return 0, fmt.Errorf("failed to read secrets directory: %w", err) return 0, fmt.Errorf("failed to read secrets directory: %w", err)
} }
// Count only directories that contain at least one version file // Count only directories that have a "current" version pointer file
count := 0 count := 0
for _, entry := range entries { for _, entry := range entries {
if !entry.IsDir() { if !entry.IsDir() {
continue continue
} }
// Check if this secret directory contains any version files // A valid secret has a "current" file pointing to the active version
secretDir := filepath.Join(secretsDir, entry.Name()) secretDir := filepath.Join(secretsDir, entry.Name())
versionFiles, err := afero.ReadDir(v.fs, secretDir) currentFile := filepath.Join(secretDir, "current")
exists, err := afero.Exists(v.fs, currentFile)
if err != nil { if err != nil {
continue // Skip directories we can't read continue // Skip directories we can't read
} }
// Look for at least one version file (excluding "current" symlink) if exists {
for _, vFile := range versionFiles {
if !vFile.IsDir() && vFile.Name() != "current" {
count++ count++
break // Found at least one version, count this secret
}
} }
} }

View File

@ -162,6 +162,24 @@ func TestVaultOperations(t *testing.T) {
} }
}) })
// Test NumSecrets
t.Run("NumSecrets", func(t *testing.T) {
vlt, err := GetCurrentVault(fs, stateDir)
if err != nil {
t.Fatalf("Failed to get current vault: %v", err)
}
numSecrets, err := vlt.NumSecrets()
if err != nil {
t.Fatalf("Failed to count secrets: %v", err)
}
// We added one secret in SecretOperations
if numSecrets != 1 {
t.Errorf("Expected 1 secret, got %d", numSecrets)
}
})
// Test unlocker operations // Test unlocker operations
t.Run("UnlockerOperations", func(t *testing.T) { t.Run("UnlockerOperations", func(t *testing.T) {
vlt, err := GetCurrentVault(fs, stateDir) vlt, err := GetCurrentVault(fs, stateDir)