Files
summercms/modules/lagoon/keygen_test.go
Jakub Zych ca5b2963a5 feat(14.3-01): export lagoon.GenerateAppKey
- key:generate now calls GenerateAppKey; its output is unchanged
- tools can write a fresh app.key without the check-mark decoration
- document lagoon.GenerateAppKey in the lagoon README

Claude-Session: https://claude.ai/code/session_01M8Qu9LgCKYy7iYEho52tW8
2026-10-08 11:41:38 +02:00

59 lines
1.3 KiB
Go

package lagoon
import (
"bytes"
"context"
"encoding/base64"
"strings"
"testing"
"git.golem15.com/golem15/summercms/modules/bonfire"
)
func TestEncryptedKeyGeneratePrints32ByteBase64(t *testing.T) {
cmd := KeyGenerateCommand()
if cmd.Name != "key:generate" {
t.Fatalf("Name = %q", cmd.Name)
}
if cmd.Run == nil {
t.Fatal("Run is nil")
}
var buf bytes.Buffer
out := bonfire.NewOutput(strings.NewReader(""), &buf, &buf)
if err := cmd.Run(context.Background(), nil, out); err != nil {
t.Fatal(err)
}
line := strings.TrimSpace(buf.String())
fields := strings.Fields(line)
if len(fields) == 0 {
t.Fatal("key:generate produced no output")
}
encoded := fields[len(fields)-1]
raw, err := base64.StdEncoding.DecodeString(encoded)
if err != nil {
t.Fatalf("output %q is not base64: %v", encoded, err)
}
if len(raw) != 32 {
t.Fatalf("decoded key length = %d, want 32", len(raw))
}
}
func TestGenerateAppKeyIs32ByteBase64(t *testing.T) {
a, err := GenerateAppKey()
if err != nil {
t.Fatal(err)
}
b, err := GenerateAppKey()
if err != nil {
t.Fatal(err)
}
if len(a) != 44 || a == b {
t.Fatalf("keys %q and %q: want two distinct 44-character values", a, b)
}
raw, err := base64.StdEncoding.DecodeString(a)
if err != nil || len(raw) != 32 {
t.Fatalf("key %q decodes to %d bytes, err %v", a, len(raw), err)
}
}