61 lines
2.0 KiB
Go
61 lines
2.0 KiB
Go
package appconfig
|
|
|
|
import "testing"
|
|
|
|
func TestStoredGiftComboConfigFromRequestPreservesExplicitKillSwitch(t *testing.T) {
|
|
config, err := storedGiftComboConfigFromRequest(GiftComboConfigRequest{
|
|
Enabled: false,
|
|
APIVersion: 2,
|
|
WindowMS: 300,
|
|
MaxGiftCountPerBatch: 999,
|
|
MaxGiftUnitsPerBatch: 5_000,
|
|
MaxInFlight: 2,
|
|
MaxPendingBatches: 20,
|
|
RetryMaxAttempts: 5,
|
|
RetryBaseDelayMS: 250,
|
|
RolloutBasisPoints: 5_000,
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("storedGiftComboConfigFromRequest failed: %v", err)
|
|
}
|
|
if config.Enabled || config.RolloutBasisPoints != 5_000 {
|
|
t.Fatalf("explicit kill switch changed during normalization: %+v", config)
|
|
}
|
|
}
|
|
|
|
func TestNormalizeStoredGiftComboConfigRejectsQueueWithoutBackpressure(t *testing.T) {
|
|
config := defaultStoredGiftComboConfig()
|
|
config.APIVersion = 1
|
|
if _, err := normalizeStoredGiftComboConfig(config); err == nil {
|
|
t.Fatal("apiVersion 1 must not turn the current Flutter back to the legacy HTTP contract")
|
|
}
|
|
config = defaultStoredGiftComboConfig()
|
|
config.MaxInFlight = 3
|
|
if _, err := normalizeStoredGiftComboConfig(config); err == nil {
|
|
t.Fatal("maxInFlight above the server contract must be rejected")
|
|
}
|
|
config = defaultStoredGiftComboConfig()
|
|
config.MaxPendingBatches = 0
|
|
if _, err := normalizeStoredGiftComboConfig(config); err == nil {
|
|
t.Fatal("unbounded/empty pending queue policy must be rejected")
|
|
}
|
|
config = defaultStoredGiftComboConfig()
|
|
config.MaxInFlight = 2
|
|
config.MaxPendingBatches = 1
|
|
if _, err := normalizeStoredGiftComboConfig(config); err == nil {
|
|
t.Fatal("pending queue smaller than in-flight concurrency must be rejected")
|
|
}
|
|
}
|
|
|
|
func TestNormalizeStoredGiftComboConfigForReadPromotesLegacyVersionMarker(t *testing.T) {
|
|
config := defaultStoredGiftComboConfig()
|
|
config.APIVersion = 1
|
|
resolved, err := normalizeStoredGiftComboConfigForRead(config)
|
|
if err != nil {
|
|
t.Fatalf("legacy stored config must remain readable: %v", err)
|
|
}
|
|
if resolved.APIVersion != 2 {
|
|
t.Fatalf("legacy stored marker was not promoted to V2: %+v", resolved)
|
|
}
|
|
}
|