Pulse/pkg/licensing/token_source_test.go
2026-03-18 16:06:30 +00:00

114 lines
3.4 KiB
Go

package licensing
import (
"reflect"
"testing"
)
type stubTokenClaims struct {
capabilities []string
limits map[string]int64
metersEnabled []string
planVersion string
subscriptionState SubscriptionState
}
func (s stubTokenClaims) EffectiveCapabilities() []string {
return append([]string(nil), s.capabilities...)
}
func (s stubTokenClaims) EffectiveLimits() map[string]int64 {
if s.limits == nil {
return nil
}
cp := make(map[string]int64, len(s.limits))
for k, v := range s.limits {
cp[k] = v
}
return cp
}
func (s stubTokenClaims) EntitlementMetersEnabled() []string {
return append([]string(nil), s.metersEnabled...)
}
func (s stubTokenClaims) EntitlementPlanVersion() string {
return s.planVersion
}
func (s stubTokenClaims) EntitlementSubscriptionState() SubscriptionState {
return s.subscriptionState
}
func TestTokenSourceReturnsClaimValues(t *testing.T) {
source := NewTokenSource(stubTokenClaims{
capabilities: []string{"relay", "ai_autofix"},
limits: map[string]int64{"max_monitored_systems": 42},
metersEnabled: []string{"agents"},
planVersion: "cloud_starter",
subscriptionState: SubStateGrace,
})
if got := source.Capabilities(); !reflect.DeepEqual(got, []string{"relay", "ai_autofix"}) {
t.Fatalf("Capabilities()=%v, want %v", got, []string{"relay", "ai_autofix"})
}
if got := source.Limits(); !reflect.DeepEqual(got, map[string]int64{"max_monitored_systems": 42}) {
t.Fatalf("Limits()=%v, want %v", got, map[string]int64{"max_monitored_systems": 42})
}
if got := source.MetersEnabled(); !reflect.DeepEqual(got, []string{"agents"}) {
t.Fatalf("MetersEnabled()=%v, want %v", got, []string{"agents"})
}
if got := source.PlanVersion(); got != "cloud_starter" {
t.Fatalf("PlanVersion()=%q, want %q", got, "cloud_starter")
}
if got := source.SubscriptionState(); got != SubStateGrace {
t.Fatalf("SubscriptionState()=%q, want %q", got, SubStateGrace)
}
}
func TestTokenSourcePreservesMissingPlanVersion(t *testing.T) {
source := NewTokenSource(stubTokenClaims{
planVersion: "",
subscriptionState: SubStateActive,
limits: map[string]int64{"max_monitored_systems": 42},
})
if got := source.PlanVersion(); got != "" {
t.Fatalf("PlanVersion()=%q, want empty", got)
}
if got := source.SubscriptionState(); got != SubStateActive {
t.Fatalf("SubscriptionState()=%q, want %q", got, SubStateActive)
}
if got := source.Limits()["max_monitored_systems"]; got != 42 {
t.Fatalf("Limits()[max_monitored_systems]=%d, want %d", got, 42)
}
}
func TestTokenSourceNilDefaults(t *testing.T) {
var source *TokenSource
if got := source.Capabilities(); got != nil {
t.Fatalf("Capabilities()=%v, want nil", got)
}
if got := source.Limits(); got != nil {
t.Fatalf("Limits()=%v, want nil", got)
}
if got := source.MetersEnabled(); got != nil {
t.Fatalf("MetersEnabled()=%v, want nil", got)
}
if got := source.PlanVersion(); got != "" {
t.Fatalf("PlanVersion()=%q, want empty", got)
}
if got := source.SubscriptionState(); got != SubStateActive {
t.Fatalf("SubscriptionState()=%q, want %q", got, SubStateActive)
}
if got := source.TrialStartedAt(); got != nil {
t.Fatalf("TrialStartedAt()=%v, want nil", got)
}
if got := source.TrialEndsAt(); got != nil {
t.Fatalf("TrialEndsAt()=%v, want nil", got)
}
if got := source.OverflowGrantedAt(); got != nil {
t.Fatalf("OverflowGrantedAt()=%v, want nil", got)
}
}