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