github.com/decred/dcrlnd@v0.7.6/lnwallet/dcrwallet/keychain_test.go (about)

     1  package dcrwallet
     2  
     3  import (
     4  	"context"
     5  	"io/ioutil"
     6  	"os"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/decred/dcrlnd/channeldb"
    11  	"github.com/decred/dcrlnd/keychain"
    12  
    13  	wallet "decred.org/dcrwallet/v4/wallet"
    14  	"github.com/decred/dcrd/chaincfg/chainhash"
    15  	"github.com/decred/dcrd/chaincfg/v3"
    16  	walletloader "github.com/decred/dcrlnd/lnwallet/dcrwallet/loader"
    17  )
    18  
    19  var (
    20  	testHDSeed = chainhash.Hash{
    21  		0xb7, 0x94, 0x38, 0x5f, 0x2d, 0x1e, 0xf7, 0xab,
    22  		0x4d, 0x92, 0x73, 0xd1, 0x90, 0x63, 0x81, 0xb4,
    23  		0x4f, 0x2f, 0x6f, 0x25, 0x98, 0xa3, 0xef, 0xb9,
    24  		0x69, 0x49, 0x18, 0x83, 0x31, 0x98, 0x47, 0x53,
    25  	}
    26  )
    27  
    28  func createTestWallet() (func(), *wallet.Wallet, *channeldb.DB, error) {
    29  	tempDir, err := ioutil.TempDir("", "keyring-lnwallet")
    30  	if err != nil {
    31  		return nil, nil, nil, err
    32  	}
    33  	loader := walletloader.NewLoader(chaincfg.SimNetParams(), tempDir,
    34  		wallet.DefaultGapLimit)
    35  
    36  	pass := []byte("test")
    37  
    38  	birthday := time.Now().Add(-time.Hour * 24)
    39  	baseWallet, err := loader.CreateNewWallet(
    40  		context.Background(), pass, pass, testHDSeed[:], birthday,
    41  	)
    42  	if err != nil {
    43  		return nil, nil, nil, err
    44  	}
    45  
    46  	if err := baseWallet.Unlock(context.Background(), pass, nil); err != nil {
    47  		return nil, nil, nil, err
    48  	}
    49  
    50  	// Create the temp chandb dir.
    51  	cdbDir, err := ioutil.TempDir("", "channeldb")
    52  	if err != nil {
    53  		return nil, nil, nil, err
    54  	}
    55  
    56  	// Next, create channeldb for the first time.
    57  	cdb, err := channeldb.Open(cdbDir)
    58  	if err != nil {
    59  		return nil, nil, nil, err
    60  	}
    61  
    62  	cleanUp := func() {
    63  		baseWallet.Lock()
    64  		os.RemoveAll(tempDir)
    65  		cdb.Close()
    66  		os.RemoveAll(cdbDir)
    67  	}
    68  
    69  	return cleanUp, baseWallet, cdb, nil
    70  }
    71  
    72  // TestDcrwalletKeyRingImpl tests whether the walletKeyRing implementation
    73  // conforms to the required interface spec.
    74  func TestDcrwalletKeyRingImpl(t *testing.T) {
    75  	t.Parallel()
    76  
    77  	keychain.CheckKeyRingImpl(t,
    78  		func() (string, func(), keychain.KeyRing, error) {
    79  			cleanUp, wallet, cdb, err := createTestWallet()
    80  			if err != nil {
    81  				t.Fatalf("unable to create wallet: %v", err)
    82  			}
    83  
    84  			keyRing, err := newWalletKeyRing(wallet, cdb)
    85  
    86  			return "dcrwallet", cleanUp, keyRing, err
    87  		},
    88  	)
    89  
    90  }
    91  
    92  // TestDcrwalletSecretKeyRingImpl tests whether the walletKeyRing
    93  // implementation conforms to the required interface spec.
    94  func TestDcrwalletSecretKeyRingImpl(t *testing.T) {
    95  	t.Parallel()
    96  
    97  	keychain.CheckSecretKeyRingImpl(t,
    98  		func() (string, func(), keychain.SecretKeyRing, error) {
    99  			cleanUp, wallet, cdb, err := createTestWallet()
   100  			if err != nil {
   101  				t.Fatalf("unable to create wallet: %v", err)
   102  			}
   103  
   104  			keyRing, err := newWalletKeyRing(wallet, cdb)
   105  
   106  			return "dcrwallet", cleanUp, keyRing, err
   107  		},
   108  	)
   109  
   110  }
   111  
   112  func init() {
   113  	// We'll clamp the max range scan to constrain the run time of the
   114  	// private key scan test.
   115  	keychain.MaxKeyRangeScan = 3
   116  }