| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- package db
- import (
- "context"
- "os"
- "testing"
- "time"
- )
- // TestOpen 需要真实的 PostgreSQL,未设置 HAVEN_TEST_DB_DSN 时跳过。
- //
- // 本地跑法:
- //
- // HAVEN_TEST_DB_DSN='postgres://haven:xxx@127.0.0.1:5432/haven?sslmode=disable' \
- // go test ./internal/db/... -v
- func TestOpen(t *testing.T) {
- dsn := os.Getenv("HAVEN_TEST_DB_DSN")
- if dsn == "" {
- t.Skip("未设置 HAVEN_TEST_DB_DSN,跳过数据库集成测试")
- }
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
- defer cancel()
- conn, err := Open(ctx, dsn)
- if err != nil {
- t.Fatalf("Open() 返回错误: %v", err)
- }
- defer conn.Close()
- var one int
- if err := conn.QueryRowContext(ctx, "SELECT 1").Scan(&one); err != nil {
- t.Fatalf("查询失败: %v", err)
- }
- if one != 1 {
- t.Errorf("SELECT 1 返回 %d", one)
- }
- }
- func TestOpenInvalidDSN(t *testing.T) {
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
- defer cancel()
- if _, err := Open(ctx, "postgres://nouser@127.0.0.1:1/nodb?sslmode=disable&connect_timeout=2"); err == nil {
- t.Fatal("无法连接的 DSN 应返回错误")
- }
- }
|