account_request_integrity_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233
  1. package service
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/stretchr/testify/require"
  5. "testing"
  6. )
  7. func TestAccountProtectionIndependentIntegrityModes(t *testing.T) {
  8. a := &Account{ID: 42, Platform: PlatformOpenAI, Type: AccountTypeOAuth, Concurrency: 4}
  9. PrepareNewAccountProtection(a)
  10. require.Equal(t, "legacy", a.ProtectionMode())
  11. require.Equal(t, "observe", a.RequestIntegrityMode())
  12. before := []byte(`{"input":[{"role":"user","content":"question"}],"tools":[{"type":"function","name":"important"}]}`)
  13. after := []byte(`{"input":[{"role":"user","content":"question"}]}`)
  14. c, _ := gin.CreateTestContext(nil)
  15. stageMode1Request(c, a, before)
  16. require.NoError(t, validateMode1StagedRequest(c, a, after), "observation must preserve the existing request path")
  17. flag, exists := c.Get("request_integrity_difference")
  18. require.True(t, exists)
  19. require.Equal(t, true, flag)
  20. require.Equal(t, "nodejs24", a.Extra["tls_fingerprint_builtin"])
  21. a.Extra[requestIntegrityModeKey] = "enforce"
  22. require.Error(t, validateMode1StagedRequest(c, a, after))
  23. a.Extra[requestIntegrityModeKey] = "off"
  24. require.NoError(t, validateMode1StagedRequest(c, a, after))
  25. a.Extra[AntiDegradeMarkerExtraKey] = map[string]any{"enabled": true, "mode": "mode1", "policy_version": 3}
  26. require.Equal(t, "off", a.RequestIntegrityMode(), "explicit administrator choice overrides the mode1 default")
  27. delete(a.Extra,requestIntegrityModeKey)
  28. require.Equal(t,"enforce",a.RequestIntegrityMode(),"existing mode1 defaults remain compatible when no override is saved")
  29. require.Error(t, validateRequestIntegrityExtra(map[string]any{requestIntegrityModeKey: "unknown"}))
  30. require.NoError(t, validateRequestIntegrityExtra(map[string]any{requestIntegrityModeKey: nil}))
  31. }