decred.org/dcrwallet/v3@v3.1.0/wallet/udb/common_test.go (about)

     1  // Copyright (c) 2014 The btcsuite developers
     2  // Copyright (c) 2015-2017 The Decred developers
     3  // Use of this source code is governed by an ISC
     4  // license that can be found in the LICENSE file.
     5  
     6  package udb
     7  
     8  import (
     9  	"context"
    10  	"encoding/hex"
    11  	"fmt"
    12  	"os"
    13  
    14  	"decred.org/dcrwallet/v3/wallet/walletdb"
    15  	"github.com/decred/dcrd/chaincfg/v3"
    16  )
    17  
    18  var (
    19  	// seed is the master seed used throughout the tests.
    20  	seed = []byte{
    21  		0xb4, 0x6b, 0xc6, 0x50, 0x2a, 0x30, 0xbe, 0xb9, 0x2f,
    22  		0x0a, 0xeb, 0xc7, 0x76, 0x40, 0x3c, 0x3d, 0xbf, 0x11,
    23  		0xbf, 0xb6, 0x83, 0x05, 0x96, 0x7c, 0x36, 0xda, 0xc9,
    24  		0xef, 0x8d, 0x64, 0x15, 0x67,
    25  	}
    26  
    27  	emptyDbPath = ""
    28  
    29  	pubPassphrase   = []byte("_DJr{fL4H0O}*-0\n:V1izc)(6BomK")
    30  	privPassphrase  = []byte("81lUHXnOMZ@?XXd7O9xyDIWIbXX-lj")
    31  	pubPassphrase2  = []byte("-0NV4P~VSJBWbunw}%<Z]fuGpbN[ZI")
    32  	privPassphrase2 = []byte("~{<]08%6!-?2s<$(8$8:f(5[4/!/{Y")
    33  )
    34  
    35  // hexToBytes is a wrapper around hex.DecodeString that panics if there is an
    36  // error.  It MUST only be used with hard coded values in the tests.
    37  func hexToBytes(origHex string) []byte {
    38  	buf, err := hex.DecodeString(origHex)
    39  	if err != nil {
    40  		panic(err)
    41  	}
    42  	return buf
    43  }
    44  
    45  // createEmptyDB is a helper function for creating an empty wallet db.
    46  func createEmptyDB(ctx context.Context) error {
    47  	db, err := walletdb.Create("bdb", emptyDbPath)
    48  	if err != nil {
    49  		return err
    50  	}
    51  	defer db.Close()
    52  
    53  	err = Initialize(ctx, db, chaincfg.TestNet3Params(), seed, pubPassphrase,
    54  		privPassphrase)
    55  	if err != nil {
    56  		return err
    57  	}
    58  
    59  	err = Upgrade(ctx, db, pubPassphrase, chaincfg.TestNet3Params())
    60  	if err != nil {
    61  		return err
    62  	}
    63  
    64  	return nil
    65  }
    66  
    67  // cloneDB makes a copy of an empty wallet db. It returns a wallet db, store, a
    68  // stake store and a teardown function.
    69  func cloneDB(ctx context.Context, cloneName string) (walletdb.DB, *Manager, *Store, *StakeStore, func(), error) {
    70  	file, err := os.ReadFile(emptyDbPath)
    71  	if err != nil {
    72  		return nil, nil, nil, nil, nil, fmt.Errorf("unexpected error: %v", err)
    73  	}
    74  
    75  	err = os.WriteFile(cloneName, file, 0644)
    76  	if err != nil {
    77  		return nil, nil, nil, nil, nil, fmt.Errorf("unexpected error: %v", err)
    78  	}
    79  
    80  	db, err := walletdb.Open("bdb", cloneName)
    81  	if err != nil {
    82  		return nil, nil, nil, nil, nil, fmt.Errorf("unexpected error: %v", err)
    83  	}
    84  
    85  	mgr, txStore, stkStore, err := Open(ctx, db, chaincfg.TestNet3Params(), pubPassphrase)
    86  	if err != nil {
    87  		return nil, nil, nil, nil, nil, fmt.Errorf("unexpected error: %v", err)
    88  	}
    89  
    90  	teardown := func() {
    91  		os.Remove(cloneName)
    92  		db.Close()
    93  	}
    94  
    95  	return db, mgr, txStore, stkStore, teardown, err
    96  }