Files
sub2api-add/plugins/subscription-admin/internal/manifest/manifest_test.go
T
Qiufeng 5feae3ad41
Business Plugins CI / check (plugin-admin) (push) Successful in 3m13s
Business Plugins CI / check (subscription-admin) (push) Successful in 1m41s
chore: initialize standalone business plugin repository
2026-08-27 23:36:08 +08:00

63 lines
1.8 KiB
Go

package manifest
import (
"crypto/ed25519"
"encoding/base64"
"encoding/json"
"testing"
)
func validManifest() Manifest {
var m Manifest
m.SchemaVersion = 1
m.PluginID = "qiu.subscription-admin"
m.Name = "Subscription Admin"
m.Version = "0.1.0"
m.CoreAPIBaseline = "sub2api-0.1.183"
m.Capabilities = []string{"subscription.admin.v1"}
m.TestedCoreVersions = []string{"0.1.183"}
m.Backend.HealthPath = "/healthz"
m.Backend.ReadinessPath = "/readyz"
m.Backend.ListenEnv = "PLUGIN_PORT"
m.UI.Entrypoint = "ui/index.html"
m.UI.Menu.ID = m.PluginID
m.UI.Menu.Label = "订阅管理"
m.UI.Menu.Visibility = "admin"
m.UI.Menu.SortOrder = 200
m.Publisher.KeyID = "test-key"
m.CoreAPIAllowlist = RequiredAllowlist()
return m
}
func TestValidateManifest(t *testing.T) {
if err := Validate(validManifest()); err != nil {
t.Fatal(err)
}
m := validManifest()
m.CoreAPIAllowlist = append(m.CoreAPIAllowlist, "GET /api/v1/admin/users")
if err := Validate(m); err == nil {
t.Fatal("expected exact allowlist validation failure")
}
}
func TestVerifySignature(t *testing.T) {
publicKey, privateKey, err := ed25519.GenerateKey(nil)
if err != nil {
t.Fatal(err)
}
manifestBytes := []byte(`{"schema_version":1}`)
signature := Signature{Algorithm: "ed25519", KeyID: "test-key", Signature: base64.StdEncoding.EncodeToString(ed25519.Sign(privateKey, manifestBytes))}
signatureBytes, err := json.Marshal(signature)
if err != nil {
t.Fatal(err)
}
publicKeyBytes := []byte(base64.StdEncoding.EncodeToString(publicKey))
if err := VerifySignature(manifestBytes, signatureBytes, publicKeyBytes); err != nil {
t.Fatal(err)
}
manifestBytes[0] = '{'
if err := VerifySignature([]byte(`{"schema_version":2}`), signatureBytes, publicKeyBytes); err == nil {
t.Fatal("expected tamper failure")
}
}