155 lines
7.4 KiB
Go
155 lines
7.4 KiB
Go
package config
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestLoadPrefersChatappKeys(t *testing.T) {
|
|
t.Setenv("CHATAPP_STORE_MYSQL_DSN", "chatapp-mysql")
|
|
t.Setenv("CRON_MYSQL_DSN", "legacy-mysql")
|
|
t.Setenv("CHATAPP_STORE_REDIS_ADDR", "chatapp-redis")
|
|
t.Setenv("CHATAPP_STORE_REDIS_PASSWORD", "chatapp-password")
|
|
t.Setenv("CHATAPP_STORE_REDIS_DB", "5")
|
|
t.Setenv("CHATAPP_JAVA_OTHER_BASE_URL", "http://chatapp-java")
|
|
t.Setenv("CHATAPP_JAVA_WALLET_BASE_URL", "http://chatapp-wallet")
|
|
t.Setenv("CHATAPP_WEEK_STAR_DEFAULT_SYS_ORIGIN", "likei")
|
|
t.Setenv("CHATAPP_WEEK_STAR_TIMEZONE", "Asia/Shanghai")
|
|
t.Setenv("CHATAPP_WEEK_STAR_SETTLE_INTERVAL_SECONDS", "120")
|
|
t.Setenv("CHATAPP_ROOM_TURNOVER_REWARD_DEFAULT_SYS_ORIGIN", "likei")
|
|
t.Setenv("CHATAPP_ROOM_TURNOVER_REWARD_TIMEZONE", "Asia/Riyadh")
|
|
t.Setenv("CHATAPP_ROOM_TURNOVER_REWARD_SETTLE_INTERVAL_SECONDS", "180")
|
|
t.Setenv("CHATAPP_RECHARGE_REWARD_DEFAULT_SYS_ORIGIN", "likei")
|
|
t.Setenv("CHATAPP_RECHARGE_REWARD_TIMEZONE", "Asia/Riyadh")
|
|
t.Setenv("CHATAPP_RECHARGE_REWARD_STORAGE_TIMEZONE", "Asia/Shanghai")
|
|
t.Setenv("CHATAPP_RECHARGE_REWARD_START_DATE", "2026-05-21")
|
|
t.Setenv("CHATAPP_RECHARGE_REWARD_SETTLE_INTERVAL_SECONDS", "90")
|
|
t.Setenv("CHATAPP_RECHARGE_REWARD_COIN_SELLER_GOLD_PER_USD", "100000")
|
|
t.Setenv("CHATAPP_WEEK_STAR_RETRY_STREAM_KEY", "chatapp-stream")
|
|
t.Setenv("CHATAPP_WEEK_STAR_RETRY_CONSUMER_GROUP", "chatapp-group")
|
|
t.Setenv("CHATAPP_WEEK_STAR_RETRY_CONSUMER_NAME", "chatapp-consumer")
|
|
t.Setenv("CHATAPP_WEEK_STAR_RETRY_BATCH_SIZE", "11")
|
|
t.Setenv("CHATAPP_WEEK_STAR_RETRY_BLOCK_MILLIS", "2500")
|
|
t.Setenv("CHATAPP_WEEK_STAR_RETRY_MIN_IDLE_MILLIS", "4500")
|
|
t.Setenv("CHATAPP_HTTP_TIMEOUT_SECONDS", "9")
|
|
t.Setenv("CHATAPP_HTTP_SHUTDOWN_TIMEOUT_SECONDS", "19")
|
|
t.Setenv("CHATAPP_AUTO_MIGRATE", "true")
|
|
|
|
cfg := Load()
|
|
|
|
if cfg.MySQLDSN != "chatapp-mysql" {
|
|
t.Fatalf("expected chatapp mysql dsn, got %q", cfg.MySQLDSN)
|
|
}
|
|
if cfg.RedisAddr != "chatapp-redis" || cfg.RedisPassword != "chatapp-password" || cfg.RedisDB != 5 {
|
|
t.Fatalf("unexpected redis config: %+v", cfg)
|
|
}
|
|
if cfg.JavaOtherBaseURL != "http://chatapp-java" {
|
|
t.Fatalf("expected chatapp java base url, got %q", cfg.JavaOtherBaseURL)
|
|
}
|
|
if cfg.JavaWalletBaseURL != "http://chatapp-wallet" {
|
|
t.Fatalf("expected chatapp java wallet base url, got %q", cfg.JavaWalletBaseURL)
|
|
}
|
|
if cfg.WeekStarDefaultSysOrigin != "LIKEI" {
|
|
t.Fatalf("expected normalized sys origin LIKEI, got %q", cfg.WeekStarDefaultSysOrigin)
|
|
}
|
|
if cfg.WeekStarTimezone != "Asia/Shanghai" {
|
|
t.Fatalf("expected chatapp timezone, got %q", cfg.WeekStarTimezone)
|
|
}
|
|
if cfg.WeekStarSettleInterval != 120*time.Second {
|
|
t.Fatalf("expected settle interval 120s, got %s", cfg.WeekStarSettleInterval)
|
|
}
|
|
if cfg.RoomTurnoverDefaultSysOrigin != "LIKEI" || cfg.RoomTurnoverTimezone != "Asia/Riyadh" || cfg.RoomTurnoverSettleInterval != 180*time.Second {
|
|
t.Fatalf("unexpected room turnover config: %+v", cfg)
|
|
}
|
|
if cfg.RechargeRewardDefaultSysOrigin != "LIKEI" || cfg.RechargeRewardTimezone != "Asia/Riyadh" || cfg.RechargeRewardStorageTimezone != "Asia/Shanghai" {
|
|
t.Fatalf("unexpected recharge reward timezone config: %+v", cfg)
|
|
}
|
|
if cfg.RechargeRewardStartDate != "2026-05-21" || cfg.RechargeRewardSettleInterval != 90*time.Second || cfg.RechargeRewardCoinSellerGoldPerUSD != 100000 {
|
|
t.Fatalf("unexpected recharge reward settlement config: %+v", cfg)
|
|
}
|
|
if cfg.WeekStarRetryStreamKey != "chatapp-stream" || cfg.WeekStarRetryConsumerGroup != "chatapp-group" || cfg.WeekStarRetryConsumerName != "chatapp-consumer" {
|
|
t.Fatalf("unexpected retry consumer config: %+v", cfg)
|
|
}
|
|
if cfg.WeekStarRetryBatchSize != 11 || cfg.WeekStarRetryBlock != 2500*time.Millisecond || cfg.WeekStarRetryMinIdle != 4500*time.Millisecond {
|
|
t.Fatalf("unexpected retry timing config: %+v", cfg)
|
|
}
|
|
if cfg.Timeout != 9*time.Second || cfg.ShutdownTimeout != 19*time.Second {
|
|
t.Fatalf("unexpected http timeout config: %+v", cfg)
|
|
}
|
|
if !cfg.AutoMigrate {
|
|
t.Fatalf("expected auto migrate to be true")
|
|
}
|
|
}
|
|
|
|
func TestLoadFallsBackToLegacyKeys(t *testing.T) {
|
|
t.Setenv("CRON_MYSQL_DSN", "legacy-mysql")
|
|
t.Setenv("CRON_REDIS_ADDR", "legacy-redis")
|
|
t.Setenv("CRON_REDIS_PASSWORD", "legacy-password")
|
|
t.Setenv("CRON_REDIS_DB", "3")
|
|
t.Setenv("CRON_JAVA_OTHER_BASE_URL", "http://legacy-java")
|
|
t.Setenv("CRON_JAVA_WALLET_BASE_URL", "http://legacy-wallet")
|
|
t.Setenv("WEEK_STAR_DEFAULT_SYS_ORIGIN", "tarab")
|
|
t.Setenv("WEEK_STAR_TIMEZONE", "Asia/Riyadh")
|
|
t.Setenv("WEEK_STAR_SETTLE_INTERVAL_SECONDS", "66")
|
|
t.Setenv("ROOM_TURNOVER_REWARD_DEFAULT_SYS_ORIGIN", "tarab")
|
|
t.Setenv("ROOM_TURNOVER_REWARD_TIMEZONE", "Asia/Shanghai")
|
|
t.Setenv("ROOM_TURNOVER_REWARD_SETTLE_INTERVAL_SECONDS", "77")
|
|
t.Setenv("RECHARGE_REWARD_DEFAULT_SYS_ORIGIN", "tarab")
|
|
t.Setenv("RECHARGE_REWARD_TIMEZONE", "Asia/Riyadh")
|
|
t.Setenv("RECHARGE_REWARD_STORAGE_TIMEZONE", "UTC")
|
|
t.Setenv("RECHARGE_REWARD_START_DATE", "2026-05-21")
|
|
t.Setenv("RECHARGE_REWARD_SETTLE_INTERVAL_SECONDS", "88")
|
|
t.Setenv("RECHARGE_REWARD_COIN_SELLER_GOLD_PER_USD", "100000")
|
|
t.Setenv("WEEK_STAR_RETRY_STREAM_KEY", "legacy-stream")
|
|
t.Setenv("WEEK_STAR_RETRY_CONSUMER_GROUP", "legacy-group")
|
|
t.Setenv("WEEK_STAR_RETRY_CONSUMER_NAME", "legacy-consumer")
|
|
t.Setenv("WEEK_STAR_RETRY_BATCH_SIZE", "7")
|
|
t.Setenv("WEEK_STAR_RETRY_BLOCK_MILLIS", "1700")
|
|
t.Setenv("WEEK_STAR_RETRY_MIN_IDLE_MILLIS", "2700")
|
|
t.Setenv("CRON_HTTP_TIMEOUT_SECONDS", "4")
|
|
t.Setenv("CRON_SHUTDOWN_TIMEOUT_SECONDS", "14")
|
|
t.Setenv("CRON_AUTO_MIGRATE", "true")
|
|
|
|
cfg := Load()
|
|
|
|
if cfg.MySQLDSN != "legacy-mysql" {
|
|
t.Fatalf("expected legacy mysql dsn, got %q", cfg.MySQLDSN)
|
|
}
|
|
if cfg.RedisAddr != "legacy-redis" || cfg.RedisPassword != "legacy-password" || cfg.RedisDB != 3 {
|
|
t.Fatalf("unexpected redis config: %+v", cfg)
|
|
}
|
|
if cfg.JavaOtherBaseURL != "http://legacy-java" {
|
|
t.Fatalf("expected legacy java base url, got %q", cfg.JavaOtherBaseURL)
|
|
}
|
|
if cfg.JavaWalletBaseURL != "http://legacy-wallet" {
|
|
t.Fatalf("expected legacy java wallet base url, got %q", cfg.JavaWalletBaseURL)
|
|
}
|
|
if cfg.WeekStarDefaultSysOrigin != "TARAB" {
|
|
t.Fatalf("expected normalized sys origin TARAB, got %q", cfg.WeekStarDefaultSysOrigin)
|
|
}
|
|
if cfg.WeekStarSettleInterval != 66*time.Second {
|
|
t.Fatalf("expected settle interval 66s, got %s", cfg.WeekStarSettleInterval)
|
|
}
|
|
if cfg.RoomTurnoverDefaultSysOrigin != "TARAB" || cfg.RoomTurnoverTimezone != "Asia/Shanghai" || cfg.RoomTurnoverSettleInterval != 77*time.Second {
|
|
t.Fatalf("unexpected legacy room turnover config: %+v", cfg)
|
|
}
|
|
if cfg.RechargeRewardDefaultSysOrigin != "TARAB" || cfg.RechargeRewardTimezone != "Asia/Riyadh" || cfg.RechargeRewardStorageTimezone != "UTC" {
|
|
t.Fatalf("unexpected legacy recharge reward timezone config: %+v", cfg)
|
|
}
|
|
if cfg.RechargeRewardStartDate != "2026-05-21" || cfg.RechargeRewardSettleInterval != 88*time.Second || cfg.RechargeRewardCoinSellerGoldPerUSD != 100000 {
|
|
t.Fatalf("unexpected legacy recharge reward settlement config: %+v", cfg)
|
|
}
|
|
if cfg.WeekStarRetryStreamKey != "legacy-stream" || cfg.WeekStarRetryConsumerGroup != "legacy-group" || cfg.WeekStarRetryConsumerName != "legacy-consumer" {
|
|
t.Fatalf("unexpected retry consumer config: %+v", cfg)
|
|
}
|
|
if cfg.WeekStarRetryBatchSize != 7 || cfg.WeekStarRetryBlock != 1700*time.Millisecond || cfg.WeekStarRetryMinIdle != 2700*time.Millisecond {
|
|
t.Fatalf("unexpected retry timing config: %+v", cfg)
|
|
}
|
|
if cfg.Timeout != 4*time.Second || cfg.ShutdownTimeout != 14*time.Second {
|
|
t.Fatalf("unexpected http timeout config: %+v", cfg)
|
|
}
|
|
if !cfg.AutoMigrate {
|
|
t.Fatalf("expected auto migrate to be true")
|
|
}
|
|
}
|