github.com/decred/dcrlnd@v0.7.6/kvdb/postgres/db_test.go (about) 1 //go:build kvdb_postgres 2 // +build kvdb_postgres 3 4 package postgres 5 6 import ( 7 "testing" 8 "time" 9 10 "github.com/btcsuite/btcwallet/walletdb" 11 "github.com/btcsuite/btcwallet/walletdb/walletdbtest" 12 "github.com/stretchr/testify/require" 13 "golang.org/x/net/context" 14 ) 15 16 // TestInterface performs all interfaces tests for this database driver. 17 func TestInterface(t *testing.T) { 18 stop, err := StartEmbeddedPostgres() 19 require.NoError(t, err) 20 defer stop() 21 22 f, err := NewFixture("") 23 require.NoError(t, err) 24 25 // dbType is the database type name for this driver. 26 const dbType = "postgres" 27 28 ctx := context.Background() 29 cfg := &Config{ 30 Dsn: f.Dsn, 31 } 32 33 walletdbtest.TestInterface(t, dbType, ctx, cfg, prefix) 34 } 35 36 // TestPanic tests recovery from panic conditions. 37 func TestPanic(t *testing.T) { 38 stop, err := StartEmbeddedPostgres() 39 require.NoError(t, err) 40 defer stop() 41 42 f, err := NewFixture("") 43 require.NoError(t, err) 44 45 err = f.Db.(*db).Update(func(tx walletdb.ReadWriteTx) error { 46 bucket, err := tx.CreateTopLevelBucket([]byte("test")) 47 require.NoError(t, err) 48 49 // Stop database server. 50 stop() 51 52 // Keep trying to get data until Get panics because the 53 // connection is lost. 54 for i := 0; i < 50; i++ { 55 bucket.Get([]byte("key")) 56 time.Sleep(100 * time.Millisecond) 57 } 58 59 return nil 60 }, func() {}) 61 62 require.Contains(t, err.Error(), "terminating connection") 63 }