account_concurrency_editable_database_test.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. //go:build protectionintegration
  2. package repository
  3. import (
  4. "context"
  5. "github.com/Wei-Shaw/sub2api/internal/service"
  6. "github.com/stretchr/testify/require"
  7. "testing"
  8. )
  9. func TestAccountProtectionEditableConcurrencySingleBulkAndTransitions(t *testing.T) {
  10. client, db := protectionTestDatabase(t)
  11. repo := newAccountRepositoryWithSQL(client, db, nil)
  12. ctx := context.Background()
  13. account := &service.Account{Name: "editable-concurrency", Platform: service.PlatformOpenAI, Type: service.AccountTypeOAuth, Concurrency: 64, Status: service.StatusActive}
  14. require.NoError(t, repo.Create(ctx, account))
  15. protection := service.NewAntiDegradeService(protectionIntegrationStore{repo})
  16. for _, mode := range service.RegisteredProtectionModes() {
  17. current, err := protection.ApplyAntiDegradeMode(ctx, account.ID, service.AntiDegradeMode(mode))
  18. require.NoError(t, err)
  19. require.GreaterOrEqual(t, current.Mode1EffectiveConcurrency(), 64)
  20. wanted := 128
  21. _, err = repo.BulkUpdate(ctx, []int64{account.ID}, service.AccountBulkUpdate{Concurrency: &wanted})
  22. require.NoError(t, err)
  23. current, err = repo.GetByID(ctx, account.ID)
  24. require.NoError(t, err)
  25. require.Equal(t, wanted, current.Mode1EffectiveConcurrency())
  26. marker := current.Extra[service.AntiDegradeMarkerExtraKey].(map[string]any)
  27. require.EqualValues(t, wanted, marker["max_concurrency"])
  28. current.Concurrency = 256
  29. require.NoError(t, repo.Update(ctx, current))
  30. restored, err := protection.RevertAntiDegrade(ctx, account.ID)
  31. require.NoError(t, err)
  32. require.Equal(t, 256, restored.Concurrency)
  33. }
  34. }