优化结构

This commit is contained in:
Yvan
2026-08-25 00:20:29 +08:00
parent 969afee284
commit ee179d6b34
49 changed files with 289 additions and 591 deletions
+28 -34
View File
@@ -55,16 +55,16 @@ func (*webSocketStub) OnDisconnect(func(*platformws.Session)) {}
func TestResourceRegistryDefaults(t *testing.T) {
registry := NewResourceRegistry()
if registry.Logger() == nil {
resources := registry.Snapshot()
if resources.Logger == nil {
t.Fatal("default logger is nil")
}
resources := registry.Snapshot()
if resources.DB != nil || len(resources.NamedDBs) != 0 || resources.Redis != nil || len(resources.NamedRedis) != 0 || resources.Mongo != nil || resources.Storage != nil || resources.MQ != nil || resources.WebSocket != nil || resources.Scheduler != nil {
t.Fatalf("unexpected initialized resource: %#v", resources)
}
}
func TestResourceRegistryReplaceAndSetters(t *testing.T) {
func TestResourceRegistryReplaceAndSnapshot(t *testing.T) {
logger := slog.Default().With("test", true)
db := &gorm.DB{}
redisClient := redis.NewClient(&redis.Options{Addr: "127.0.0.1:6379"})
@@ -76,41 +76,33 @@ func TestResourceRegistryReplaceAndSetters(t *testing.T) {
scheduler := &schedulerStub{}
registry := NewResourceRegistry()
inputDBs := map[string]*gorm.DB{"reporting": db}
inputRedis := map[string]redis.UniversalClient{"cache": redisClient}
registry.Replace(Resources{
Logger: logger, DB: db, NamedDBs: map[string]*gorm.DB{"reporting": db},
Redis: redisClient, NamedRedis: map[string]redis.UniversalClient{"cache": redisClient}, Mongo: mongoClient,
Logger: logger, DB: db, NamedDBs: inputDBs,
Redis: redisClient, NamedRedis: inputRedis, Mongo: mongoClient,
Storage: storage, MQ: mq, WebSocket: webSocket, Scheduler: scheduler,
})
resources := registry.Snapshot()
if resources.Logger != logger || resources.DB != db || resources.Redis != redisClient || resources.Mongo != mongoClient || resources.Storage != storage || resources.MQ != mq || resources.WebSocket != webSocket || resources.Scheduler != scheduler {
t.Fatalf("replacement snapshot does not match: %#v", resources)
}
if resources.NamedDBs["reporting"] != db || resources.NamedRedis["cache"] != redisClient {
t.Fatal("named resource lookup returned the wrong resource")
}
nextDB := &gorm.DB{}
registry.SetDB(nextDB)
if registry.DB() != nextDB {
t.Fatal("database setter did not publish the new database")
}
if registry.Redis() != redisClient || registry.Storage() != storage {
t.Fatal("database setter changed unrelated resources")
}
if registry.NamedDB("reporting") != db || registry.NamedDB("") != nextDB {
t.Fatal("named database lookup returned the wrong resource")
}
if registry.NamedRedis("cache") != redisClient || registry.NamedRedis("") != redisClient {
t.Fatal("named redis lookup returned the wrong resource")
}
inputDBs := map[string]*gorm.DB{"analytics": db}
registry.SetNamedDBs(inputDBs)
inputDBs["mutated"] = nextDB
if registry.NamedDB("mutated") != nil || registry.NamedDB("analytics") != db {
t.Fatal("named database map was not copied")
}
inputRedis := map[string]redis.UniversalClient{"sessions": redisClient}
registry.SetNamedRedis(inputRedis)
inputDBs["mutated"] = &gorm.DB{}
inputRedis["mutated"] = redisClient
if registry.NamedRedis("mutated") != nil || registry.NamedRedis("sessions") != redisClient {
t.Fatal("named redis map was not copied")
if _, exists := registry.Snapshot().NamedDBs["mutated"]; exists {
t.Fatal("named database map was not copied on replacement")
}
if _, exists := registry.Snapshot().NamedRedis["mutated"]; exists {
t.Fatal("named redis map was not copied on replacement")
}
resources.NamedDBs["mutated"] = db
if _, exists := registry.Snapshot().NamedDBs["mutated"]; exists {
t.Fatal("snapshot shares its named database map with the registry")
}
}
@@ -140,14 +132,16 @@ func TestResourceRegistryConcurrentAccess(t *testing.T) {
go func() {
defer wait.Done()
for step := 0; step < iterations; step++ {
registry.SetDB(&gorm.DB{})
_ = registry.Snapshot()
_ = registry.Logger()
registry.Replace(Resources{DB: &gorm.DB{}})
if registry.Snapshot().Logger == nil {
t.Error("concurrent snapshot lost the default logger")
return
}
}
}()
}
wait.Wait()
if registry.DB() == nil {
t.Fatal("concurrent setters lost the database")
if registry.Snapshot().DB == nil {
t.Fatal("concurrent replacement lost the database")
}
}