Files
Assistant/tests/cognitive_admission/admission_test.go
m 0d4e9ee1b4
CI / test (push) Successful in 23s
CI / test (pull_request) Successful in 22s
fix(cognitive): preserve admission JSON fields
2026-08-22 14:37:32 +03:00

47 lines
2.4 KiB
Go

package cognitive_admission_test
import (
"encoding/json"
"strings"
"testing"
"git.cin.su/m/Assistant/contracts/capability"
)
func TestAdmitReturnsExplainableDecision(t *testing.T) {
policy := capability.AdmissionPolicy{ID: "local-v1", MaxConcurrent: 2, MaxAcceptedPerHour: 10, MaxInputBytes: 1000, MaxOutputBytes: 500}
request := capability.AdmissionRequest{Complexity: capability.AdmissionNormal, InputBytes: 100, MaxOutputBytes: 100, DeadlineMillis: 2000}
if decision := capability.Admit(request, policy, capability.AdmissionCounters{}, 1000); decision.State != capability.AdmissionAdmitted || decision.PolicyID != policy.ID {
t.Fatalf("admitted = %#v", decision)
}
checks := []struct {
counters capability.AdmissionCounters
reason capability.AdmissionReason
}{
{capability.AdmissionCounters{Concurrent: 2}, capability.AdmissionReasonConcurrency},
{capability.AdmissionCounters{AcceptedLastHour: 10}, capability.AdmissionReasonAcceptedHour},
}
for _, check := range checks {
if decision := capability.Admit(request, policy, check.counters, 1000); decision.State != capability.AdmissionRejected || decision.Reason != check.reason {
t.Fatalf("rejected = %#v want %s", decision, check.reason)
}
}
}
func TestAdmissionRequestUsesStableWireFields(t *testing.T) {
raw, err := json.Marshal(capability.AdmissionRequest{Complexity: capability.AdmissionNormal, InputBytes: 10, MaxOutputBytes: 20, DeadlineMillis: 30})
if err != nil || !strings.Contains(string(raw), `"input_bytes":10`) || !strings.Contains(string(raw), `"max_output_bytes":20`) || !strings.Contains(string(raw), `"deadline_millis":30`) {
t.Fatalf("admission wire shape drifted: %s %v", raw, err)
}
}
func TestAdmitRejectsBudgetAndDeadline(t *testing.T) {
policy := capability.AdmissionPolicy{ID: "local-v1", MaxConcurrent: 1, MaxAcceptedPerHour: 1, MaxInputBytes: 10, MaxOutputBytes: 10}
if decision := capability.Admit(capability.AdmissionRequest{InputBytes: 11, MaxOutputBytes: 1}, policy, capability.AdmissionCounters{}, 1); decision.Reason != capability.AdmissionReasonInputBudget {
t.Fatalf("input decision = %#v", decision)
}
if decision := capability.Admit(capability.AdmissionRequest{InputBytes: 1, MaxOutputBytes: 1, DeadlineMillis: 1}, policy, capability.AdmissionCounters{}, 1); decision.Reason != capability.AdmissionReasonDeadline {
t.Fatalf("deadline decision = %#v", decision)
}
}