feat: bootstrap reusable GoOmni framework

This commit is contained in:
2026-09-20 22:06:24 +08:00
commit 8b19aa79ee
60 changed files with 4923 additions and 0 deletions

58
database/database_test.go Normal file
View File

@@ -0,0 +1,58 @@
package database
import (
"context"
"os"
"strings"
"testing"
"time"
)
func TestConfigFromEnv(t *testing.T) {
keys := []string{
"GO_OMNI_DB_DRIVER", "GO_OMNI_DB_DSN", "GO_OMNI_DB_MAX_OPEN_CONNS",
"GO_OMNI_DB_MAX_IDLE_CONNS", "GO_OMNI_DB_CONN_MAX_LIFETIME",
"GO_OMNI_DB_CONN_MAX_IDLE_TIME", "GO_OMNI_DB_PING_TIMEOUT",
}
for _, key := range keys {
t.Setenv(key, "")
_ = os.Unsetenv(key)
}
t.Setenv("GO_OMNI_DB_DSN", "root:secret@tcp(127.0.0.1:3306)/demo")
t.Setenv("GO_OMNI_DB_MAX_OPEN_CONNS", "20")
t.Setenv("GO_OMNI_DB_MAX_IDLE_CONNS", "8")
t.Setenv("GO_OMNI_DB_CONN_MAX_LIFETIME", "2m")
t.Setenv("GO_OMNI_DB_PING_TIMEOUT", "750ms")
cfg, err := ConfigFromEnv("")
if err != nil {
t.Fatal(err)
}
if cfg.Driver != "mysql" || cfg.DSN == "" || cfg.MaxOpenConns != 20 || cfg.MaxIdleConns != 8 || cfg.ConnMaxLifetime != 2*time.Minute || cfg.PingTimeout != 750*time.Millisecond {
t.Fatalf("unexpected config: %+v", cfg)
}
}
func TestConfigFromEnvRejectsInvalidValues(t *testing.T) {
t.Setenv("GO_OMNI_DB_DSN", "demo")
t.Setenv("GO_OMNI_DB_MAX_OPEN_CONNS", "bad")
if _, err := ConfigFromEnv(""); err == nil || !strings.Contains(err.Error(), "MAX_OPEN_CONNS") {
t.Fatalf("expected invalid pool limit error, got %v", err)
}
t.Setenv("GO_OMNI_DB_MAX_OPEN_CONNS", "2")
t.Setenv("GO_OMNI_DB_MAX_IDLE_CONNS", "3")
if _, err := ConfigFromEnv(""); err == nil || !strings.Contains(err.Error(), "max idle") {
t.Fatalf("expected pool relationship error, got %v", err)
}
t.Setenv("GO_OMNI_DB_MAX_IDLE_CONNS", "1")
t.Setenv("GO_OMNI_DB_PING_TIMEOUT", "0s")
if _, err := ConfigFromEnv(""); err == nil || !strings.Contains(err.Error(), "timeouts") {
t.Fatalf("expected timeout error, got %v", err)
}
}
func TestOpenValidatesBeforeLoadingDriver(t *testing.T) {
_, err := Open(context.Background(), Config{Driver: "", DSN: "demo"})
if err == nil || !strings.Contains(err.Error(), "driver") {
t.Fatalf("expected driver validation error, got %v", err)
}
}