github.com/decred/dcrlnd@v0.7.6/kvdb/etcd/db_test.go (about) 1 //go:build kvdb_etcd 2 // +build kvdb_etcd 3 4 package etcd 5 6 import ( 7 "bytes" 8 "context" 9 "testing" 10 11 "github.com/btcsuite/btcwallet/walletdb" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestCopy(t *testing.T) { 16 t.Parallel() 17 18 f := NewEtcdTestFixture(t) 19 defer f.Cleanup() 20 21 db, err := newEtcdBackend(context.TODO(), f.BackendConfig()) 22 require.NoError(t, err) 23 24 err = db.Update(func(tx walletdb.ReadWriteTx) error { 25 // "apple" 26 apple, err := tx.CreateTopLevelBucket([]byte("apple")) 27 require.NoError(t, err) 28 require.NotNil(t, apple) 29 30 require.NoError(t, apple.Put([]byte("key"), []byte("val"))) 31 return nil 32 }, func() {}) 33 34 // Expect non-zero copy. 35 var buf bytes.Buffer 36 37 require.NoError(t, db.Copy(&buf)) 38 require.Greater(t, buf.Len(), 0) 39 require.Nil(t, err) 40 41 expected := map[string]string{ 42 BucketKey("apple"): BucketVal("apple"), 43 ValueKey("key", "apple"): "val", 44 } 45 require.Equal(t, expected, f.Dump()) 46 } 47 48 func TestAbortContext(t *testing.T) { 49 t.Parallel() 50 51 f := NewEtcdTestFixture(t) 52 defer f.Cleanup() 53 54 ctx, cancel := context.WithCancel(context.Background()) 55 56 config := f.BackendConfig() 57 58 // Pass abort context and abort right away. 59 db, err := newEtcdBackend(ctx, config) 60 require.NoError(t, err) 61 cancel() 62 63 // Expect that the update will fail. 64 err = db.Update(func(tx walletdb.ReadWriteTx) error { 65 _, err := tx.CreateTopLevelBucket([]byte("bucket")) 66 require.Error(t, err, "context canceled") 67 68 return nil 69 }, func() {}) 70 71 require.Error(t, err, "context canceled") 72 73 // No changes in the DB. 74 require.Equal(t, map[string]string{}, f.Dump()) 75 }