- `l` goes to the details of what is selected; `enter` still drills in - vaults, scopes and files show their details (vault settings from the listing, no extra requests) - with nothing to show, the right pane says how to get started - a list from the cache says how old it is while it reloads - what is expiring, in the status pane and `lazysecrets expiring` - when access is refused, what to check, for Azure and Databricks - no group list in an account's details, and no Microsoft Graph call for it Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
49 lines
1.7 KiB
Go
49 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"git.kebcloud.no/keb/lazysecrets/internal/provider"
|
|
"git.kebcloud.no/keb/lazysecrets/internal/provider/fake"
|
|
)
|
|
|
|
func TestExpiring(t *testing.T) {
|
|
providers := []provider.Provider{fake.Azure(0), fake.Databricks(0)}
|
|
now := time.Date(2026, 10, 1, 0, 0, 0, 0, time.UTC)
|
|
var out, errs bytes.Buffer
|
|
err := expiring(providers, expiringOpts{days: 30, timeout: time.Minute, now: now}, &out, &errs)
|
|
if !errors.Is(err, errExpiring) {
|
|
t.Fatalf("err %v (want errExpiring: something listed)", err)
|
|
}
|
|
lines := strings.Split(strings.TrimSpace(out.String()), "\n")
|
|
if len(lines) != 2 || !strings.HasPrefix(lines[1], "expired 2026-03-01 certificate kv-app-prod old-tls") ||
|
|
!strings.Contains(lines[1], "lazysecrets://azure/kv-app-prod.vault.azure.net/certificates/old-tls") {
|
|
t.Errorf("out:\n%s", out.String())
|
|
}
|
|
if !strings.Contains(errs.String(), "kv-restricted: can't list ") || strings.Count(errs.String(), "kv-restricted") != 1 {
|
|
t.Errorf("unreadable vaults not said:\n%s", errs.String())
|
|
}
|
|
|
|
// Further ahead, the soonest first.
|
|
out.Reset()
|
|
expiring(providers, expiringOpts{days: 400, timeout: time.Minute, now: now}, &out, &errs)
|
|
if got := strings.Count(out.String(), "\n"); got != 4 || !strings.Contains(out.String(), "app-tls") {
|
|
t.Errorf("400 days:\n%s", out.String())
|
|
}
|
|
|
|
// Nothing listed, but not everything checked.
|
|
errs.Reset()
|
|
err = expiring(providers, expiringOpts{days: 0, timeout: time.Minute, now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)}, &out, &errs)
|
|
if !errors.Is(err, errIncomplete) {
|
|
t.Errorf("err %v, want errIncomplete", err)
|
|
}
|
|
|
|
if _, err := parseExpiring([]string{"--days", "-1"}, 30); err == nil {
|
|
t.Error("negative days accepted")
|
|
}
|
|
}
|