lnd/kvdb/postgres/db_test.go
Elle Mouton 30ba8cbae9
kvdb/postgres: separate general sql code from postgres
In this commit, changes are made to the `kvdb/postgres` package so that
all all the non-postgres-specific code is generalised to be applicable
for all sql code. A follow up commit will move all the general sql code
into its own package.
2023-01-23 09:05:11 +02:00

63 lines
1.3 KiB
Go

//go:build kvdb_postgres
package postgres
import (
"testing"
"time"
"github.com/btcsuite/btcwallet/walletdb"
"github.com/btcsuite/btcwallet/walletdb/walletdbtest"
"github.com/stretchr/testify/require"
"golang.org/x/net/context"
)
// TestInterface performs all interfaces tests for this database driver.
func TestInterface(t *testing.T) {
stop, err := StartEmbeddedPostgres()
require.NoError(t, err)
defer stop()
f, err := NewFixture("")
require.NoError(t, err)
// dbType is the database type name for this driver.
const dbType = "postgres"
ctx := context.Background()
cfg := &Config{
Dsn: f.Dsn,
}
walletdbtest.TestInterface(t, dbType, ctx, cfg, prefix)
}
// TestPanic tests recovery from panic conditions.
func TestPanic(t *testing.T) {
stop, err := StartEmbeddedPostgres()
require.NoError(t, err)
defer stop()
f, err := NewFixture("")
require.NoError(t, err)
err = f.Db.Update(func(tx walletdb.ReadWriteTx) error {
bucket, err := tx.CreateTopLevelBucket([]byte("test"))
require.NoError(t, err)
// Stop database server.
stop()
// Keep trying to get data until Get panics because the
// connection is lost.
for i := 0; i < 50; i++ {
bucket.Get([]byte("key"))
time.Sleep(100 * time.Millisecond)
}
return nil
}, func() {})
require.Contains(t, err.Error(), "terminating connection")
}