connect_test.go

 1package db
 2
 3import (
 4	"context"
 5	"testing"
 6
 7	"github.com/stretchr/testify/require"
 8)
 9
10func TestConnect_SharesConnectionForSameDataDir(t *testing.T) {
11	t.Cleanup(ResetPool)
12
13	dataDir := t.TempDir()
14
15	conn1, err := Connect(context.Background(), dataDir)
16	require.NoError(t, err)
17
18	conn2, err := Connect(context.Background(), dataDir)
19	require.NoError(t, err)
20
21	require.Same(t, conn1, conn2, "should return the same *sql.DB for the same data dir")
22
23	// Releasing once should not close the connection.
24	require.NoError(t, Release(dataDir))
25	require.NoError(t, conn1.PingContext(context.Background()), "connection should still be usable after partial release")
26
27	// Releasing again should close it.
28	require.NoError(t, Release(dataDir))
29	require.Error(t, conn1.PingContext(context.Background()), "connection should be closed after final release")
30}
31
32func TestConnect_SeparateConnectionsForDifferentDataDirs(t *testing.T) {
33	t.Cleanup(ResetPool)
34
35	dir1 := t.TempDir()
36	dir2 := t.TempDir()
37
38	conn1, err := Connect(context.Background(), dir1)
39	require.NoError(t, err)
40
41	conn2, err := Connect(context.Background(), dir2)
42	require.NoError(t, err)
43
44	require.NotSame(t, conn1, conn2, "different data dirs should get different connections")
45
46	require.NoError(t, Release(dir1))
47	require.NoError(t, Release(dir2))
48}
49
50func TestRelease_NoopForUnknownDataDir(t *testing.T) {
51	t.Cleanup(ResetPool)
52
53	require.NoError(t, Release("/nonexistent/path"), "releasing unknown data dir should not error")
54}