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  }