feat: 完整游戏运维功能
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"browser.local/platform/repo"
|
||||
)
|
||||
|
||||
func TestConfiguredSecretEnvelopeIsOpaqueAndRestartStable(t *testing.T) {
|
||||
const key = "test-secret-envelope-key-at-least-32-characters"
|
||||
const plain = "raw-component-secret"
|
||||
svc := NewCoreService(repo.NewMemoryStore())
|
||||
if err := svc.ConfigureSecretEnvelopeKey(key); err != nil {
|
||||
t.Fatalf("configure envelope: %v", err)
|
||||
}
|
||||
encrypted, err := svc.encryptRuntimeKey(plain)
|
||||
if err != nil {
|
||||
t.Fatalf("seal secret: %v", err)
|
||||
}
|
||||
if strings.Contains(encrypted, plain) || !strings.HasPrefix(encrypted, "enc:v1:") {
|
||||
t.Fatalf("unexpected envelope ciphertext %q", encrypted)
|
||||
}
|
||||
restarted := NewCoreService(repo.NewMemoryStore())
|
||||
if err := restarted.ConfigureSecretEnvelopeKey(key); err != nil {
|
||||
t.Fatalf("configure restarted envelope: %v", err)
|
||||
}
|
||||
decrypted, err := restarted.decryptRuntimeKey(encrypted)
|
||||
if err != nil || decrypted != plain {
|
||||
t.Fatalf("open restarted envelope: plain=%q err=%v", decrypted, err)
|
||||
}
|
||||
if _, err := NewCoreService(repo.NewMemoryStore()).decryptRuntimeKey(encrypted); err == nil {
|
||||
t.Fatal("development fallback must not decrypt a custom-key envelope")
|
||||
}
|
||||
}
|
||||
|
||||
func TestSecretEnvelopeRejectsShortConfiguredKey(t *testing.T) {
|
||||
svc := NewCoreService(repo.NewMemoryStore())
|
||||
if err := svc.ConfigureSecretEnvelopeKey("too-short"); err == nil {
|
||||
t.Fatal("expected short secret envelope key rejection")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user