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 }