From 26c9d19f394206be9184dc36c53bbabdd3527daf Mon Sep 17 00:00:00 2001 From: "pulse-triage[bot]" <249995291+pulse-triage[bot]@users.noreply.github.com> Date: Wed, 9 Sep 2026 10:51:06 +0100 Subject: [PATCH] test(licensing): preserve community multi-tenant entitlement boundary Hosted organisation E2E failures exposed an ambiguity between runtime identity and entitlement provisioning. Assert that Community preserves a granted multi_tenant capability without manufacturing it when absent, so fixture repairs do not wrongly require a private binary or weaken capability gating. Change-source: pulse-maintainer --- pkg/licensing/entitlement_payload_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pkg/licensing/entitlement_payload_test.go b/pkg/licensing/entitlement_payload_test.go index 807cea891..ff9dea5e7 100644 --- a/pkg/licensing/entitlement_payload_test.go +++ b/pkg/licensing/entitlement_payload_test.go @@ -456,6 +456,22 @@ func TestFilterCapabilitiesForRuntimeIdentity_BlocksPrivateRuntimeCapabilitiesOn } } +// The E2E runtime flag can enable backend development gates, but it is not +// an entitlement. Community builds retain multi-tenancy only when supplied +// by the entitlement payload; a private runtime is not required for this key. +func TestFilterCapabilitiesForRuntimeIdentity_CommunityMultiTenantEntitlement(t *testing.T) { + for _, granted := range []bool{false, true} { + capabilities := []string{FeatureRelay} + if granted { + capabilities = append(capabilities, FeatureMultiTenant) + } + filtered, blocked := FilterCapabilitiesForRuntimeIdentity(capabilities, CommunityRuntimeIdentity()) + if !reflect.DeepEqual(filtered, capabilities) || len(blocked) != 0 { + t.Fatalf("granted=%v: filtered=%v blocked=%v, want %v without blocks", granted, filtered, blocked, capabilities) + } + } +} + func TestFilterCapabilitiesForRuntimeIdentity_PreservesPrivateRuntimeCapabilitiesOnProBuild(t *testing.T) { capabilities := []string{FeatureRelay, FeatureAuditLogging, FeatureRBAC, FeatureAIAutoFix} filtered, blocked := FilterCapabilitiesForRuntimeIdentity(capabilities, ProRuntimeIdentity())