package config import "testing" func TestLoadLocalKeepsOutboxMQDisabled(t *testing.T) { cfg, err := Load("../../configs/config.yaml") if err != nil { t.Fatalf("Load local config failed: %v", err) } if cfg.RocketMQ.Enabled || cfg.RocketMQ.WalletOutbox.Enabled || cfg.RocketMQ.RealtimeOutbox.Enabled { t.Fatalf("local config must not require RocketMQ: %+v", cfg.RocketMQ) } if cfg.OutboxWorker.Concurrency != 1 || cfg.RealtimeOutboxWorker.Concurrency != 2 { t.Fatalf("local outbox worker defaults mismatch: outbox=%+v realtime=%+v", cfg.OutboxWorker, cfg.RealtimeOutboxWorker) } } func TestLoadTencentExampleSplitsRealtimeOutboxAndRaisesThroughput(t *testing.T) { cfg, err := Load("../../configs/config.tencent.example.yaml") if err != nil { t.Fatalf("Load tencent example failed: %v", err) } if !cfg.RocketMQ.Enabled || !cfg.RocketMQ.WalletOutbox.Enabled || !cfg.RocketMQ.RealtimeOutbox.Enabled { t.Fatalf("tencent example must enable both wallet outbox producers: %+v", cfg.RocketMQ) } if cfg.RocketMQ.WalletOutbox.Topic == cfg.RocketMQ.RealtimeOutbox.Topic { t.Fatalf("realtime outbox topic must be separated from generic wallet topic: %+v", cfg.RocketMQ) } if cfg.OutboxWorker.BatchSize != 200 || cfg.OutboxWorker.Concurrency != 8 { t.Fatalf("generic outbox throughput config mismatch: %+v", cfg.OutboxWorker) } if cfg.RealtimeOutboxWorker.BatchSize != 50 || cfg.RealtimeOutboxWorker.Concurrency != 4 { t.Fatalf("realtime outbox worker config mismatch: %+v", cfg.RealtimeOutboxWorker) } if len(cfg.RealtimeOutboxWorker.EventTypes) != 3 || cfg.RealtimeOutboxWorker.EventTypes[0] != "WalletRedPacketCreated" { t.Fatalf("realtime outbox event types mismatch: %+v", cfg.RealtimeOutboxWorker.EventTypes) } }