Skip to content

Commit e851136

Browse files
committed
add a invalid db url test + consolidate custom pool tests
1 parent 39af9bf commit e851136

File tree

1 file changed

+79
-56
lines changed

1 file changed

+79
-56
lines changed

dbos/dbos_test.go

Lines changed: 79 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package dbos
22

33
import (
4-
"bytes"
54
"context"
65
"fmt"
7-
"log/slog"
86
"testing"
97
"time"
108

@@ -63,60 +61,6 @@ func TestConfig(t *testing.T) {
6361
assert.Equal(t, expectedMsg, dbosErr.Message)
6462
})
6563

66-
t.Run("NewSystemDatabaseWithCustomPool", func(t *testing.T) {
67-
68-
// Logger
69-
var buf bytes.Buffer
70-
slogLogger := slog.New(slog.NewTextHandler(&buf, &slog.HandlerOptions{
71-
Level: slog.LevelDebug,
72-
}))
73-
74-
slogLogger = slogLogger.With("service", "dbos-test", "environment", "test")
75-
76-
// Custom Pool
77-
poolConfig, err := pgxpool.ParseConfig(databaseURL)
78-
require.NoError(t, err)
79-
80-
poolConfig.MaxConns = 10
81-
poolConfig.MinConns = 5
82-
poolConfig.MaxConnLifetime = 2 * time.Hour
83-
poolConfig.MaxConnIdleTime = time.Minute * 2
84-
85-
poolConfig.ConnConfig.ConnectTimeout = 10 * time.Second
86-
87-
pool, err := pgxpool.NewWithConfig(context.Background(), poolConfig)
88-
require.NoError(t, err)
89-
90-
config := Config{
91-
DatabaseURL: databaseURL,
92-
AppName: "test-custom-pool",
93-
Logger: slogLogger,
94-
SystemDBPool: pool,
95-
}
96-
97-
customdbosContext, err := NewDBOSContext(context.Background(), config)
98-
require.NoError(t, err)
99-
require.NotNil(t, customdbosContext)
100-
101-
dbosCtx, ok := customdbosContext.(*dbosContext)
102-
defer dbosCtx.Shutdown(10 * time.Second)
103-
require.True(t, ok)
104-
105-
sysDB, ok := dbosCtx.systemDB.(*sysDB)
106-
require.True(t, ok)
107-
assert.Same(t, pool, sysDB.pool, "The pool in dbosContext should be the same as the custom pool provided")
108-
109-
stats := sysDB.pool.Stat()
110-
assert.Equal(t, int32(10), stats.MaxConns(), "MaxConns should match custom pool config")
111-
112-
sysdbConfig := sysDB.pool.Config()
113-
assert.Equal(t, int32(10), sysdbConfig.MaxConns)
114-
assert.Equal(t, int32(5), sysdbConfig.MinConns)
115-
assert.Equal(t, 2*time.Hour, sysdbConfig.MaxConnLifetime)
116-
assert.Equal(t, 2*time.Minute, sysdbConfig.MaxConnIdleTime)
117-
assert.Equal(t, 10*time.Second, sysdbConfig.ConnConfig.ConnectTimeout)
118-
})
119-
12064
t.Run("FailsWithoutDatabaseURL", func(t *testing.T) {
12165
config := Config{
12266
AppName: "test-app",
@@ -517,3 +461,82 @@ func TestCustomSystemDBSchema(t *testing.T) {
517461
assert.Equal(t, "DBOS.setEvent", stepsB[2].StepName, "third step should be SetEvent")
518462
})
519463
}
464+
465+
func TestCustomPool(t *testing.T) {
466+
t.Run("NewSystemDatabaseWithCustomPool", func(t *testing.T) {
467+
// Custom Pool
468+
databaseURL := getDatabaseURL()
469+
poolConfig, err := pgxpool.ParseConfig(databaseURL)
470+
require.NoError(t, err)
471+
472+
poolConfig.MaxConns = 10
473+
poolConfig.MinConns = 5
474+
poolConfig.MaxConnLifetime = 2 * time.Hour
475+
poolConfig.MaxConnIdleTime = time.Minute * 2
476+
477+
poolConfig.ConnConfig.ConnectTimeout = 10 * time.Second
478+
479+
pool, err := pgxpool.NewWithConfig(context.Background(), poolConfig)
480+
require.NoError(t, err)
481+
482+
config := Config{
483+
DatabaseURL: databaseURL,
484+
AppName: "test-custom-pool",
485+
SystemDBPool: pool,
486+
}
487+
488+
customdbosContext, err := NewDBOSContext(context.Background(), config)
489+
require.NoError(t, err)
490+
require.NotNil(t, customdbosContext)
491+
492+
dbosCtx, ok := customdbosContext.(*dbosContext)
493+
defer dbosCtx.Shutdown(10 * time.Second)
494+
require.True(t, ok)
495+
496+
sysDB, ok := dbosCtx.systemDB.(*sysDB)
497+
require.True(t, ok)
498+
assert.Same(t, pool, sysDB.pool, "The pool in dbosContext should be the same as the custom pool provided")
499+
500+
stats := sysDB.pool.Stat()
501+
assert.Equal(t, int32(10), stats.MaxConns(), "MaxConns should match custom pool config")
502+
503+
sysdbConfig := sysDB.pool.Config()
504+
assert.Equal(t, int32(10), sysdbConfig.MaxConns)
505+
assert.Equal(t, int32(5), sysdbConfig.MinConns)
506+
assert.Equal(t, 2*time.Hour, sysdbConfig.MaxConnLifetime)
507+
assert.Equal(t, 2*time.Minute, sysdbConfig.MaxConnIdleTime)
508+
assert.Equal(t, 10*time.Second, sysdbConfig.ConnConfig.ConnectTimeout)
509+
})
510+
511+
wf := func(ctx DBOSContext, input string) (string, error) {
512+
return input, nil
513+
}
514+
515+
t.Run("InvalidDatabaseUrl", func(t *testing.T) {
516+
invalidDatabaseURL := "postgres://invalid:invalid@localhost:5432/invaliddb"
517+
databaseURL := getDatabaseURL()
518+
poolConfig, err := pgxpool.ParseConfig(databaseURL)
519+
require.NoError(t, err)
520+
pool, err := pgxpool.NewWithConfig(context.Background(), poolConfig)
521+
require.NoError(t, err)
522+
523+
config := Config{
524+
DatabaseURL: invalidDatabaseURL,
525+
AppName: "test-invalid-db-url",
526+
SystemDBPool: pool,
527+
}
528+
dbosCtx, err := NewDBOSContext(context.Background(), config)
529+
require.NoError(t, err)
530+
531+
RegisterWorkflow(dbosCtx, wf)
532+
533+
// Launch the DBOS context
534+
err = dbosCtx.Launch()
535+
require.NoError(t, err)
536+
defer dbosCtx.Shutdown(1 * time.Minute)
537+
538+
// Run a workflow
539+
_, err = RunWorkflow(dbosCtx, wf, "test-input")
540+
require.NoError(t, err)
541+
})
542+
}

0 commit comments

Comments
 (0)