lnd/kvdb/postgres/db_test.go
2021-11-08 22:39:41 +01:00

64 lines
1.3 KiB
Go

//go:build kvdb_postgres
// +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.(*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")
}