refactor: deprecate int32 (#7025)
* refactor: deprecate int32 * fix(db): reject legacy user quota schemas at startup * fix(quota): enforce wallet bounds and saturating billing conversions * fix(rate-limit): keep count*duration from wrapping int64 * fix: error message
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package billingexpr_test
|
||||
|
||||
import (
|
||||
"math"
|
||||
"testing"
|
||||
|
||||
"github.com/QuantumNous/new-api/common"
|
||||
@@ -11,13 +10,13 @@ import (
|
||||
)
|
||||
|
||||
// TestComputeTieredQuota_ClampOnOverflow guards the billing-safety invariant
|
||||
// that an oversized tiered settlement clamps to the int32 max instead of
|
||||
// that an oversized tiered settlement clamps to the single-request max instead of
|
||||
// wrapping into a credit, and that the saturation event is surfaced on the
|
||||
// result so callers can record it for admin auditing.
|
||||
func TestComputeTieredQuota_ClampOnOverflow(t *testing.T) {
|
||||
// exprOutput = p * 1e9 = 1e18; quotaBeforeGroup = 1e18 / 1e6 * 5e5 = 5e17,
|
||||
// which far exceeds MaxInt32 and must saturate.
|
||||
exprStr := `tier("base", p * 1000000000)`
|
||||
// exprOutput = p * 1e12 = 1e21; quotaBeforeGroup = 1e21 / 1e6 * 5e5 = 5e20,
|
||||
// which far exceeds the supported single-request range and must saturate.
|
||||
exprStr := `tier("base", p * 1000000000000)`
|
||||
snap := &billingexpr.BillingSnapshot{
|
||||
BillingMode: "tiered_expr",
|
||||
ExprString: exprStr,
|
||||
@@ -29,10 +28,10 @@ func TestComputeTieredQuota_ClampOnOverflow(t *testing.T) {
|
||||
result, err := billingexpr.ComputeTieredQuota(snap, billingexpr.TokenParams{P: 1_000_000_000})
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, math.MaxInt32, result.ActualQuotaAfterGroup, "oversized quota must clamp to int32 max, never wrap negative")
|
||||
assert.Equal(t, common.MaxQuota, result.ActualQuotaAfterGroup, "oversized quota must clamp, never wrap negative")
|
||||
require.NotNil(t, result.Clamp, "clamp event must be surfaced so it can be audited")
|
||||
assert.Equal(t, common.QuotaClampOverflow, result.Clamp.Kind)
|
||||
assert.Equal(t, math.MaxInt32, result.Clamp.Clamped)
|
||||
assert.Equal(t, common.MaxQuota, result.Clamp.Clamped)
|
||||
}
|
||||
|
||||
// TestComputeTieredQuota_NoClampInRange confirms an in-range settlement leaves
|
||||
|
||||
Reference in New Issue
Block a user