Move SCUM lifecycle ownership to plugin

This commit is contained in:
npc0-hue
2026-08-01 09:36:12 +08:00
parent bca4f935ba
commit d1249fca85
49 changed files with 795 additions and 566 deletions
+33
View File
@@ -74,6 +74,39 @@ func TestValidateGamePluginManifestRegistrationRejectsUnsafeRequests(t *testing.
}
}
func TestValidateGamePluginManifestRegistrationValidatesAssetFileCoverage(t *testing.T) {
registration := validGamePluginManifestRegistration()
registration.Manifest.AssetFiles = []domain.PluginAssetFile{
{Path: "actions/install.json", Mode: 0o600},
{Path: "bin/install-server", Mode: 0o700},
}
registration.AssetFiles = []domain.PluginAssetFile{
{Path: "actions/install.json", Content: "{}", Mode: 0o600},
{Path: "bin/install-server", Content: "#!/usr/bin/env sh\n", Mode: 0o700},
}
if err := ValidateGamePluginManifestRegistration(registration); err != nil {
t.Fatalf("expected declared asset files with matching content to validate, got %v", err)
}
missing := domain.CopyGamePluginManifestRegistration(registration)
missing.AssetFiles = missing.AssetFiles[:1]
if err := ValidateGamePluginManifestRegistration(missing); err == nil || !strings.Contains(err.Error(), "missing declared plugin asset bin/install-server") {
t.Fatalf("expected missing asset rejection, got %v", err)
}
extra := domain.CopyGamePluginManifestRegistration(registration)
extra.AssetFiles = append(extra.AssetFiles, domain.PluginAssetFile{Path: "bin/unregistered", Content: "unused"})
if err := ValidateGamePluginManifestRegistration(extra); err == nil || !strings.Contains(err.Error(), "undeclared plugin asset bin/unregistered") {
t.Fatalf("expected undeclared asset rejection, got %v", err)
}
inlineContent := domain.CopyGamePluginManifestRegistration(registration)
inlineContent.Manifest.AssetFiles[0].Content = "{}"
if err := ValidateGamePluginManifestRegistration(inlineContent); err == nil || !strings.Contains(err.Error(), "content must be supplied only") {
t.Fatalf("expected manifest inline content rejection, got %v", err)
}
}
func TestValidateGamePluginManifestRegistrationValidatesRuntimeProfiles(t *testing.T) {
t.Run("unsafe runtime value", func(t *testing.T) {
registration := validGamePluginManifestRegistration()